大家好,我想用handlerThread建立子线程,在子线程里面进行查询数据库中的数据操作并显示在ListView中,
请问具体怎么做啊,是在Message里面写查询语句传到HandleMessage()里面处理还是直接在HandleMessage()里面处理呢?谢谢大侠们了、求指教
请问具体怎么做啊,是在Message里面写查询语句传到HandleMessage()里面处理还是直接在HandleMessage()里面处理呢?谢谢大侠们了、求指教
解决方案 »
- 关于call 的两个问题???
- android用什么技术实现电视节目直播好?求详细指导
- PhoneGap环境搭建的问题
- android 如何用代码实现邮箱的配置
- 输出图片到SD卡上失败,为什么?
- 这是子线程在更新UI吗?????
- 大神,我又来了!!!httpclient的post方法无法获取响应消息的location字段,怎么破!!
- 请教:eclipse的android的SDK如何从4.3升级到4.4
- 求问大神使用zxing扫描识别二维码,怎么提高识别率?
- 安卓手机安装app后无法打开
- Android 音乐播放器 波普 怎么开发
- 如何获取本地SD卡文件目录结构,并远程传送,在另一台有socket连接的手机设备上显示文件结构
private Thread thread=new Thread(new Runnable() {
@Override
public void run() {
String result="查询结果";
Bundle bundle=new Bundle();
bundle.putString("result", result); //把查询结果放在Bundle对象中
Message message =new Message();
message.setData(bundle); //把bundle放在Message对象中
handler.sendMessage(message);
}
}); private Handler handler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
Bundle bundle=msg.getData(); //得到Bundle
String result=bundle.getString("result"); //取出存放在里面的数据
tvResult.setText(result); //设置查询结果显示到控件
} };
谢谢大侠,不过我是想调用数据库中的db.query()方法,这个方法是Cursor类型的,而且我是想放在ListView中
HandlerThread handerThread=new HandlerThread ("sub_hander");
handerThread.start();
MyHandler myHandler=new MyHandler(handerThread.getLooper());
msg.what=1;
Dialog d=ProgressDialog.show("参数忽略");
msg.sendtoTaiget();}}
class MyHandler extends Handler{{
public MyHandler(Looper looper){
suoer(looper);
}
public void HandleMessage(Message msg){
db=myhelper.getwriteable();
db.query();}
}
这样写可以吗?应该怎么修改啊,迷茫
db.query();
...有没有执行了这个方法呢?执行正常吗?
private Thread thread=new Thread(new Runnable() {
@Override
public void run() {
/你的处理,耗时操作在这里
db=myhelper.getwriteable();
db.query();
String result="查询结果";
Bundle bundle=new Bundle();
bundle.putString("result", result); //把查询结果放在Bundle对象中
Message message =new Message();
message.setData(bundle); //把bundle放在Message对象中
handler.sendMessage(message);
}
}); private Handler handler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
//这里就转到了UI线程,只是接受结果,不能是耗时操作
Bundle bundle=msg.getData(); //得到Bundle
String result=bundle.getString("result"); //取出存放在里面的数据
tvResult.setText(result); //设置查询结果显示到控件
} };
private ListView listView;
private ListAdapter adapter;
private Thread thread = new Thread(new Runnable() { @Override
public void run() {
Cursor cur = myhelper.getwriteable().query();
//得到查询结果后实例化adapter
adapter = new SimpleCursorAdapter(MainActivity.this,
android.R.layout.simple_list_item_2, cur, new String[] {
"改成你的", "..." }, new int[] {
android.R.id.text1, android.R.id.text2 });
handler.sendEmptyMessage(0);
}
}); private Handler handler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
switch (msg.what) {
case 0:
//标识为0 则为listView设置适配器
listView.setAdapter(adapter);
break;
default:
break;
}
} };
only the original thread that created a view hierarchy its views这些异常,我的那个程序大概思路对吧?呵呵。
我刚做安卓,谢谢大侠耐心教我。那我用你叫我的方法试一下吧,
......OnCreate(){HandlerThread handerThread=new HandlerThread ("sub_hander");
handerThread.start();
MyHandler myHandler=new MyHandler(handerThread.getLooper());
msg.what=1;
Dialog d=ProgressDialog.show("参数忽略");
msg.sendtoTaiget();
}}
class MyHandler extends Handler{{
public MyHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
Switch(msg.what){
case 1;
Database db=Mydbhelper.getWriteabledatabase
Cursor c= db.query();
String[] from={.... ...};
int[] to={......};
adapter = new SimpleCursorAdapter(MainActivity.this,
android.R.layout.wdxx, c, from,to});
ListView listview=ListView.getListview();
listview.setadapter(adapter); //就是加上这句出的异常,应该把这两句放在那里呢?
....
}}
}
}
}
@Override
public void dispatchMessage(Message msg) {
switch (msg.what) {
case 0:
//标识为0 则为listView设置适配器
listView.setAdapter(adapter);
break;
default:
break;
}
} };来接收handerThread发送过来的动作。