SQLiteDatabase db = helper.getReadableDatabase();
Cursor cur = db.query("i", null, null, null, null, null, null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(Main.this, R.layout.list, cur, new String[]{"_id", "name", "favourite"}, new int[]{R.id.textView1, R.id.textView2, R.id.textView3}, 0);
ListView.setAdapter(adapter);红米Note5Plus(RAM:4GB)可正常运行,
红米Note3(RAM:3GB)闪退。
已定位到问题出现在以上代码。个人考虑是,读取(或查询)数据库可能比较费时,
需在线程中执行。
请问以上代码如何修改为在子线程中执行呢?不胜感激!

解决方案 »

  1.   


       new Thread{
            @Override
            public void run() {
         SQLiteDatabase db = helper.getReadableDatabase();
    Cursor cur = db.query("i", null, null, null, null, null, null);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(Main.this, R.layout.list, cur, new String[]{"_id", "name", "favourite"}, new int[]{R.id.textView1, R.id.textView2, R.id.textView3}, 0);
    ListView.setAdapter(adapter);
                
            }
        }.start();
      

  2.   


    子线程不能更新UI线程控件,ANR……
      

  3.   


    子线程不能更新UI线程控件,ANR……
    Handler通知一下就行了
      

  4.   

    大兄弟,你去把《疯狂学Android 》 ,《第一行代码》都看一下,demo照着打一下,基础必须学好,要不然以后问题很多  
      

  5.   


    子线程不能更新UI线程控件,ANR……
    Handler通知一下就行了请问如何用Handler通知啊?谢谢!
      

  6.   

    创建一个handler
    子线程更新数据完后
    handler.sendMessage 通知然后handler里的方法进行操作数据ui
      

  7.   

    private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
             if(msg.what==0x110){
    ListView.setAdapter(adapter);
    }
            }
        }; new Thread{
            @Override
            public void run() {
         SQLiteDatabase db = helper.getReadableDatabase();
    Cursor cur = db.query("i", null, null, null, null, null, null);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(Main.this, R.layout.list, cur, new String[]{"_id", "name", "favourite"}, new int[]{R.id.textView1, R.id.textView2, R.id.textView3}, 0);
    handler.sendEmptyMessage(0x110);
            }
        }.start();
      

  8.   


    The local variable adapter may not have been initialized
      

  9.   


    The local variable adapter may not have been initialized大哥 adapter没初始化啊,这你都不知道,你得把adapter定义全局的