当前位置:  编程技术>移动开发
本页文章导读:
    ▪Cursor种的介绍        Cursor类的介绍 使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合。今天特地将它单独拿出来谈,加深自己和大家对Android 中使用 C.........
    ▪ 在Lua中兑现继承        在Lua中实现继承  最近做的一个项目用到了Lua,所以也顺便学习了些,想必玩过魔兽的朋友都听说过lua,不过相对来说用这个的还是不多。   面向对象只是一种思想,在Lua我们也可以实现,减.........
    ▪ 【FF7】网下搜索到的一些资料,做个备份       【FF7】网上搜索到的一些资料,做个备份 1.检查是否有网络连接  Java代码  1. public static boolean isNetworkAvailable(Context context) {  2. ConnectivityManager cm = (ConnectivityManager) context.getSystemServic.........

[1]Cursor种的介绍
    来源: 互联网  发布时间: 2014-02-18
Cursor类的介绍

使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合。今天特地将它单独拿出来谈,加深自己和大家对Android 中使用 Cursor 的理解。

关于 Cursor,在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:

Cursor 是每行的集合。

使用 moveToFirst() 定位第一行。

你必须知道每一列的名称。

你必须知道每一列的数据类型。

Cursor 是一个随机的数据源。

所有的数据都是通过下标取得。

关于 Cursor 的重要方法:

close()

关闭游标,释放资源

copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)

在缓冲区中检索请求的列的文本,将将其存储

getColumnCount()

返回所有列的总数

getColumnIndex(String columnName)

返回指定列的名称,如果不存在返回-1

getColumnIndexOrThrow(String columnName)

从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。

getColumnName(int columnIndex)

从给定的索引返回列名

getColumnNames()

返回一个字符串数组的列名

getCount()

返回Cursor 中的行数

moveToFirst()

移动光标到第一行

moveToLast()

移动光标到最后一行

moveToNext()

移动光标到下一行

moveToPosition(int position)

移动光标到一个绝对的位置

moveToPrevious()

移动光标到上一行

下面来看看一小段代码:

if (cur.moveToFirst() == false)

{

//为空的Cursor

return;

}

访问 Cursor 的下标获得其中的数据

int nameColumnIndex = cur.getColumnIndex(People.NAME);

String name = cur.getString(nameColumnIndex);

现在让我们看看如何循环 Cursor 取出我们需要的数据

while(cur.moveToNext())

{

//光标移动成功

//把数据取出

}

当cur.moveToNext() 为假时将跳出循环,即 Cursor 数据循环完毕。

如果你喜欢用 for 循环而不想用While 循环可以使用Google 提供的几下方法:

isBeforeFirst()

返回游标是否指向之前第一行的位置

isAfterLast()

返回游标是否指向第最后一行的位置

isClosed()

如果返回 true 即表示该游戏标己关闭

有了以上的方法,可以如此取出数据

for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext())

{

int nameColumn = cur.getColumnIndex(People.NAME);

int phoneColumn = cur.getColumnIndex(People.NUMBER);

String name = cur.getString(nameColumn);

String phoneNumber = cur.getString(phoneColumn);

}

Tip:在Android 查询数据是通过Cursor 类来实现的。当我们使用 SQLiteDatabase.query()方法时,就会得到Cursor对象, Cursor所指向的就是每一条数据。结合ADO.net 的知识可能好理解一点。

Cursor 位于 android.database.Cursor类,可见出它的设计是基于数据库服务产生的。

另外,还有几个己知的子类,分别为:

AbstractCursor

AbstractWindowedCursor

CrossProcessCursor

CursorWrapper

MatrixCursor

MergeCursor

MockCursor

SQLiteCursor

具体详细的使用方法和解释可以去参照API,这里就不过多讲述。

 

本文转自:http://tech.cncms.com/shouji/android/41527_2.html


    
[2] 在Lua中兑现继承
    来源: 互联网  发布时间: 2014-02-18
在Lua中实现继承

 最近做的一个项目用到了Lua,所以也顺便学习了些,想必玩过魔兽的朋友都听说过lua,不过相对来说用这个的还是不多。

  面向对象只是一种思想,在Lua我们也可以实现,减少了冗余代码。

  先建一个类 person

  person={

    name="a",

    age = 23,

    high=177,

    weight=65

}

 

在pserson表里,我们定义了一个人所具有的所有属性,当然我们还可以有动作(方法),比如人给人加一个说话的动作,可以这样写:

   functiuon person:say()

      print(self.name.."我来了,哈哈")

   end

或者

  person.say= function(self)

  print(self.name.."我来了,哈哈")

  end

上边的两方法可以说是一样的只是命名方法不一样而已,相当于都是表person增加个说话的方法,唯一不同的是,可以看书,两个方法一个要带参数,一个不用,在这就运用到了Lua的语法糖语法 “:”,这个“:”相当于你在调用方法的时候把self自己给传进去了,比如:

调用 person:say()  和person.say(person)

  >>输出   a我来了,哈哈

相信对于这个语法大家已经明白了,我们继续继承

 

 

现在person的原型已经出来了,既然是面向对象,我们就要得有初始的构造方法啊,ok,下面我们就先写个person的构造方法

 

先看代码:

 

  function person:new(o)
    --private 成员区域
    o = o or {}
    setmetatable(o,self)
    self.__index = self
    return o
end

 

ok构造方法完成,在这里需要解释下 元表的意思了,lua中任何一张表都有其元表,一组相关的表可以共享一个元表(也就是说可以共享元表的属性了),默认的是创建一个不带元表的表。在这里我们使用setmetatable(o,self),(lua的方法setmetatable)这个方法的意思就是,表o的元表是self,self  -前面说过,就是谁调用new()self就是谁,在这里就是person,我们理一下,在这个方法里:o是一个传进来的表table,他的元表是person,如此只要你给这个方法传一个值(最好是一个表table),我们都会给你返回一个以person为元表的table表了,如此一来,你只要new一下我们都会造一个person对象了

 

 

 

当然,我们还想要继承,我们怎样做:

给person加一个方法,

person.extend=person.new

呵呵,简单吧,其实就是person的new()方法我们变个名字而已,比如:

C=person:extend()

就代笔C继承了person,拥有了person所拥有的属性,

你可以试试:

C:say()

>>输出:a我来了,哈哈

 

当然我们还可以扩展子类C自己的属性和方法,我们只需

C=person:extend({hand="two",go=function() print(self.name.."__gpgpgp") end})

调用C:go()

>>输出:a__gpgpgp

调用print(C.name)

>>输出:a

 


    
[3] 【FF7】网下搜索到的一些资料,做个备份
    来源: 互联网  发布时间: 2014-02-18
【FF7】网上搜索到的一些资料,做个备份
1.检查是否有网络连接

  Java代码

  1. public static boolean isNetworkAvailable(Context context) {

  2. ConnectivityManager cm = (ConnectivityManager) context.getSystemService(

  3. Context.CONNECTIVITY_SERVICE);

  4. NetworkInfo info = cm.getActiveNetworkInfo();

  5. return (info != null && info.isConnected());

  6. }

  public static boolean isNetworkAvailable(Context context) {

  ConnectivityManager cm = (ConnectivityManager) context.getSystemService(

  Context.CONNECTIVITY_SERVICE);

  NetworkInfo info = cm.getActiveNetworkInfo();

  return (info != null && info.isConnected());

  }

  2.全屏和无标题

  Java代码

  1. // 全屏 ( No Statusbar )

  2. getWindow (). setFlags ( WindowManager . LayoutParams . FLAG _ FULLSCREEN ,

  3. WindowManager . LayoutParams . FLAG _ FULLSCREEN );

  4. // 无标题栏 ( No Titlebar )

  5. requestWindowFeature ( Window . FEATURE _ NO _ TITLE );

  // 全屏 ( No Statusbar )

  getWindow (). setFlags ( WindowManager . LayoutParams . FLAG _ FULLSCREEN ,

  WindowManager . LayoutParams . FLAG _ FULLSCREEN );

  // 无标题栏 ( No Titlebar )

  requestWindowFeature ( Window . FEATURE _ NO _ TITLE );

  3.使用ViewStub延迟展开视图

  Java代码

  1. 1 ) 定义 ViewStub

  2. < ViewStub Android : id = "@+ id / stub _ import "

  3. android : inflatedId ="@+ id / panel _ import "

  4. android : layout ="@ layout / progress _ overlay "

  5. android : layout _ width =" fill _ parent "

  6. android:layout_height="wrap_content"

  7. android:layout_gravity="bottom"/>

  8. 2 )展开视图

  9. findViewById(R.id.stub_import).setVisibility(View.VISIBLE);

  10. // 或者 获取视图

  11. View importPanel = ((ViewStub)

12. findViewById(R.id.stub_import)).inflate();

  1 ) 定义 ViewStub

  < ViewStub android : id = "@+ id / stub _ import "

  android : inflatedId ="@+ id / panel _ import "

  android : layout ="@ layout / progress _ overlay "

  android : layout _ width =" fill _ parent "

  android:layout_height="wrap_content"

  android:layout_gravity="bottom"/>

  2 )展开视图

  findViewById(R.id.stub_import).setVisibility(View.VISIBLE);

  // 或者 获取视图

  View importPanel = ((ViewStub)

  findViewById(R.id.stub_import)).inflate();

  4.删除窗口背景

  1) 编码实现

  Java代码

  1. public void onCreate(Bundle icicle){

  2. super.onCreate(icicle);

  3. setContentView(R.layout.mainview);

  4. // 删除窗口背景

  5. getWindow().setBackgroundDrawable(null);

  6. ...

  7. }

  public void onCreate(Bundle icicle){

  super.onCreate(icicle);

  setContentView(R.layout.mainview);

  // 删除窗口背景

  getWindow().setBackgroundDrawable(null);

  ...

  }

  2 )自定义主题实现

  Java代码

  1. < resources>

  2. < mce:style name="NoBackgroundTheme" parent="android:Theme">< !--

  3. < item name="android:windowBackground">@null< /item>

  4. -->< /mce:style>< style name="NoBackgroundTheme" parent="android:Theme" mce_bogus="1">< item name="android:windowBackground">@null< /item>< /style>

  5. < /resources>

  < resources>

  < mce:style name="NoBackgroundTheme" parent="android:Theme">< !--

  < item name="android:windowBackground">@null< /item>

  -->< /mce:style>< style name="NoBackgroundTheme" parent="android:Theme" mce_bogus="1">< item

name="android:windowBackground">@null< /item>< /style>

  < /resources>

  6.横竖屏切换时不重新加载 onCreate()

  为了防止横竖屏切换时 Activity 重新加载 onCreate ,

  只需要在 Activity 的配置文件里添加属性:

  android:configChanges="orientation|keyboardHidden|navigation"

  7.半透明主题

  1.Resource source file location : res/values/styles.xml

  < style name="myTranslucentTheme" parent="android:style/Theme.Translucent">

  < item name="android:windowBackground">@drawable/bg< /item>

  < /style>

  其中 bg 为一张半透明图片的索引

  2. 使用自定义半透明主题

  AndroidManifest.xml

  Java代码

  1. < activity android:name=".WallpaperActivity"

  2. android:label="@string/wallpaper_titile"

  3. android:theme="@style/myTranslucentTheme">

  4. < /activity>

  < activity android:name=".WallpaperActivity"

  android:label="@string/wallpaper_titile"

  android:theme="@style/myTranslucentTheme">

  < /activity>

  8.获取Android手机上的图片和视频缩略图

  大家都知道Android从1.5开始刚插入SD卡时系统会调用MediaScanner服务进行后台扫描,索引新的歌曲、图片和视频等信息,如果我们需要快速提取图片和视频缩略图可以直接访问 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails这两个数据库,即可查询出来缩略图

  如何判断文件呢? 可以通过Cursor遍历数据库,对比INTERNAL_CONTENT_URI字段的值,这是一个Uri我们可以转成String,这里保存着Android手机SD卡上的多媒体文件完整路径,

  有关具体的缩略图可以通过getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options) 或getThumbnail(ContentResolver cr, long origId, long groupId, int kind, BitmapFactory.Options options) 方法获取,这两种方法返回Bitmap类型,而缩略图的分辨率可以从HEIGHT和WIDTH两个字段提取,在Android上缩略图分为两种,通过读取

KIND字段来获得,分别为MICRO_KIND和MINI_KIND 分别为微型和迷你两种缩略模式,前者的分辨率更低。这样我们平时获取文件系统的某个图片预览时,可以直接调用系统缩略图,而不用自己重新计算。

  最后Android123提示大家,缩略图保存在SD卡的DCIM目录,里面的.thumbnails是图片的,而.video_thumbnails是视频的,这两个文件夹为隐藏属性,一般的文件管理器都可以看到。

  9.Android ANR介绍与避免

  很多初入Android开发的网友可能发现ANR的字样,到底Android ANR是什么呢? 其实ANR就是Application Not Responding的全称,当某个应用处于长期假死状态时Android系统会弹出一个窗口上面写道,XXX is not responding给出两个按钮一个为force close一个为wait。

  可能触发ANR的情况

  1. 长时间的I/O处理,比如读写大文件,网络访问时造成的阻塞。

  2. 执行耗时的运算,Android默认为超过5000ms即5秒开始弹出ANR窗口,某些应用可能首次执行时没有缓存十分耗时,可以通过Splash播放闪屏Logo等方式来延缓加载

  3. Service和appWidget中也要注意多线程的使用,除非它和Activity工作在不同的进程。

  避免ANR的方法

  1. 单独开工作者线程,通过独立的Thread或使用类似AsyncTask的方式来处理耗时的内容。

  2. 耗时的操作尽量分段处理,使用类似状态机的方法,类似Symbian的活动对象将一个复杂的事情,分段执行。

  3. UI线程中不要处理过多的内容,比如将一个5MB的文本,让TextView去setText,要知道这种UI操作,没有什么好方法去解决的,所以Android123提示,遇到UI中需要执行复杂的操作,可以参考上面2提到的分段处理方式。

  10.AsyncTask对比Thread加Handler

  很多网友可能发现Android平台很多应用使用的都是AsyncTask,而并非Thread和Handler去更新UI,这里 Android123给大家说下他们到底有什么区别,我们平时应该使用哪种。从Android 1.5开始系统将AsyncTask引入到android.os包中,过去在很早1.1和1.0 SDK时其实官方将其命名为UserTask,其内部是jdk 1.5开始新增的concurrent库,做过j2ee的网友可能明白并发库效率和强大性,比Java原始的Thread更灵活和强大,但对于轻量级的使用更为占用系统资源。Thread是Java早期为实现多线程而设计的,比较简单不支持concurrent中很多特性在同步和线程池类中需要自己去实现很多的东西,对于分布式应用来说更需要自己写调度代码,而为了Android

UI的刷新google引入了Handler和Looper机制,它们均基于消息实现,有事可能消息队列阻塞或其他原因无法准确的使用。

  Android开发网推荐大家使用AsyncTask代替Thread+Handler的方式,不仅调用上更为简单,经过实测更可靠一些,Google在 Browser中大量使用了异步任务作为处理耗时的I/O操作,比如下载文件、读写数据库等等,它们在本质上都离不开消息,但是AsyncTask相比 Thread加Handler更为可靠,更易于维护,但AsyncTask缺点也是有的比如一旦线程开启即dobackground方法执行后无法给线程发送消息,仅能通过预先设置好的标记来控制逻辑,当然可以通过线程的挂起等待标志位的改变来通讯,对于某些应用Thread和Handler以及 Looper可能更灵活。

  11.android.os.Debug调试工具使用方法

  在Android软件开发中最终的性能测试和调试显得至观重要,今天Android123和大家一起讨论下Google送给我们的android.os.Debug类,使用起来比较简单,我们先导入 import android.os.Debug这个包。

  在需要开始跟踪的地方加入 Debug.startMethodTracing(“/sdcard/cwj”);

  最终在停止调试的地方加入 Debug.stopMethodTracing();

  最终在sdcard上生成的cwj文件我们可以用sdk ools中的traceview来查看运行的结果。

  12.TextView多行本文滚动轻松实现

  Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。只要在layout中简单设置几个属性就可以轻松实现

  Java代码

  1. < TextView

  2. android:id="@+id/tvCWJ"

  3. android:layout_width="fill_parent"

  4. android:layout_height="wrap_content"

  5. android:scrollbars="vertical" < !--垂直滚动条 -->

  6. android:singleLine="false" < !--实现多行 -->

  7. android:maxLines="15" < !--最多不超过15行 -->

  8. android:textColor="#FF0000"

  9. />

  < TextView

  android:id="@+id/tvCWJ"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:scrollbars="vertical" < !--垂直滚动条 -->

android:singleLine="false" < !--实现多行 -->

  android:maxLines="15" < !--最多不超过15行 -->

  android:textColor="#FF0000"

  />

  当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下

  Java代码

  1. TextView tvAndroid123 = (TextView)findViewById(R.id.tvCWJ);

  2. tvAndroid123.setMovementMethod(ScrollingMovementMethod.getInstance()); // Android开发网提示相关的可以查看SDK中android.text.method分支了解更多

  TextView tvAndroid123 = (TextView)findViewById(R.id.tvCWJ);

  tvAndroid123.setMovementMethod(ScrollingMovementMethod.getInstance()); // Android开发网提示相关的可以查看SDK中android.text.method分支了解更多

  12.Widget简单制作流程

  1、在 OnUpdate()中 定义一个 Intent

  Intent startActivityIntent = new Intent(context,WidgetLife.class);

  2、实例化一个 PendingIntent

  PendingIntent Pintent = PendingIntent.getActivity(context,0,startActivityIntent,0);

  3、实例RemoteView

  RemoteViews ActivityView = new RemoteViews(context.getPackageName(),R.layout.widget_layout);

  4、Button 事件

  ActivityView.setOnClickPendingIntent(R.id.Button,Pintent);

  5、更新Widget

  appWidgetManager.updateAppWidget(appWidgetIds,ActivityView);

  12.对话框【Dialog】去除白色边框代码

  边框, Dialog, Android, 对话框, 代码

  使用样式文件,在values 目录下新建styles.xml文件,编写如下代码:

  Java代码

  1. < resources>

  2. < mce:style name="dialog" parent="@android:style/Theme.Dialog">< !--

  3. < item name="android:windowFrame">@null< /item>

  4. < item name="android:windowIsFloating">true< /item>

  5. < item name="android:windowIsTranslucent">false< /item>

  6. < item name="android:windowNoTitle">true< /item>

7. < item name="android:background">@android:color/black< /item>

  8. < item name="android:windowBackground">@null< /item>

  9. < item name="android:backgroundDimEnabled">false< /item>

  10.

  11. -->< /mce:style>< style name="dialog" parent="@android:style/Theme.Dialog" mce_bogus="1"> < item name="android:windowFrame">@null< /item>

  12. < item name="android:windowIsFloating">true< /item>

  13. < item name="android:windowIsTranslucent">false< /item>

  14. < item name="android:windowNoTitle">true< /item>

  15. < item name="android:background">@android:color/black< /item>

  16. < item name="android:windowBackground">@null< /item>

  17. < item name="android:backgroundDimEnabled">false< /item>

  18. < /style>

  19. < /resources>

  < resources>

  < mce:style name="dialog" parent="@android:style/Theme.Dialog">< !--

  < item name="android:windowFrame">@null< /item>

  < item name="android:windowIsFloating">true< /item>

  < item name="android:windowIsTranslucent">false< /item>

  < item name="android:windowNoTitle">true< /item>

  < item name="android:background">@android:color/black< /item>

  < item name="android:windowBackground">@null< /item>

  < item name="android:backgroundDimEnabled">false< /item>

  -->< /mce:style>< style name="dialog" parent="@android:style/Theme.Dialog" mce_bogus="1"> < item name="android:windowFrame">@null< /item>

  < item name="android:windowIsFloating">true< /item>

  < item name="android:windowIsTranslucent">false< /item>

< item name="android:windowNoTitle">true< /item>

  < item name="android:background">@android:color/black< /item>

  < item name="android:windowBackground">@null< /item>

  < item name="android:backgroundDimEnabled">false< /item>

  < /style>

  < /resources>

  调用时,使用AlerDialog的接口类,Dialog 接口编写如下代码:

  Java代码

  1. Dialog dialog = new Dialog(SetActivity.this, R.style.dialog);

  2. dialog.setContentView(R.layout.test);

  3. dialog.show();

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android中通过view方式获取当前Activity的屏幕截... iis7站长之家
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3