当前位置: 首页 > 知识库问答 >
问题:

运行时异常在 AsyncTask 中查询 sqlite 数据库时

班安平
2023-03-14

我一直在尝试一个应用程序,其中我使用AsyncTask从sqlite表中检索数据。它有时工作起来没有那么多问题。但是当它失败时,Logcat看起来像这样

07-24 16:06:20.477: E/AndroidRuntime(950): 致命异常: 异步任务 #1

07-24 16:06:20.477: E/AndroidRuntime(950): java.lang.RuntimeException: 执行 doInBackground() 时出错

E/Android runtime(950):at Android . OS . async task $ 3 . done(async task . Java:278)

07-24 16:06:20.477: E/AndroidRuntime(950): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)

E/Android runtime(950):at Java . util . concurrent . future task . set exception(future task . Java:124)

07-24 16:06:20.477: E/AndroidRuntime(950): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)

07-24 16:06:20.477: E/AndroidRuntime(950): at java.util.concurrent.FutureTask.run(FutureTask.java:137)

E/Android runtime(950):at Android . OS . async task $ serial executor $ 1 . run(async task . Java:208)

E/Android runtime(950):at Java . util . concurrent . threadpoolexecutor . run worker(threadpoolexecutor . Java:1076)

E/Android runtime(950):at Java . util . concurrent . threadpoolexecutor $ worker . run(threadpoolexecutor . Java:569)

07-24 16:06:20.477: E/AndroidRuntime(950): 由 java.lang.NullPointerException 引起

07-24 16:06:20.477: E/AndroidRuntime(950): at com.brionsoftwares.android.pilgrimhelper.test.PilgrimDao.getPilgrim(PilgrimDao.java:21)

07-24 16:06:20.477: E/AndroidRuntime(950): at com.brionsoftwares.android.pilgrimhelper.PilgrimSearchActivity$DataQuery.doInBackground(PilgrimSearchActivity.java:45)

07-24 16:06:20.477: E/AndroidRuntime(950): at com.brionsoftwares.android.pilgrimhelper.PilgrimSearchActivity$DataQuery.doInBackground(PilgrimSearchActivity.java:1)

E/Android runtime(950):at Android . OS . async task $ 2 . call(async task . Java:264)

E/Android runtime(950):at Java . util . concurrent . future task$sync . inner run(future task . Java:305)

E/Android运行时(950):...还有5个

异步任务

protected Void doInBackground(String... params) {
        List<Pilgrim> pilgrimList=PilgrimDao.getPilgrim(pilgrimDatabase.getSqlLiteDatabase(), params);
        ArrayList<Map<String, String>> list = buildData(pilgrimList);
        String[] from={"Name","District"};
        int[] to={android.R.id.text1, android.R.id.text2};
        simpleAdapter= new SimpleAdapter(getApplicationContext(), list, R.layout.simple_list_item_2, from, to);
        return null;

    }

    @Override
    protected void onPostExecute(Void result) {
        mProgressBar.setVisibility(View.GONE);
        mListView.setAdapter(simpleAdapter);
        mListView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                Toast.makeText(PilgrimSearchActivity.this, "Select", Toast.LENGTH_LONG).show();

            }

        });
        super.onPostExecute(result);
    }



}

PilgrimDao.getPilgrim方法

public static List<Pilgrim> getPilgrim(SQLiteDatabase database, String[] params) {
    List<Pilgrim> shippers = new LinkedList<Pilgrim>();
    String selection="Name = ?";
    Cursor cursor = database.query(TABLE, COLUMNS, selection, params, null,null, null);          //line 21
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        Pilgrim pilgrim= new Pilgrim();
        pilgrim.setName(cursor.getString(0));
        pilgrim.setDistrict(cursor.getString(1));
        shippers.add(pilgrim);
        cursor.moveToNext();
    }
    cursor.close();
    Log.v(PilgrimSearchActivity.TAG,"PilgrimDao returning " + shippers.size() + " shippers");
    return shippers;
}

为什么线程会退出?我可以做些什么改变来使这段代码顺利运行?

共有1个答案

滑弘扬
2023-03-14
public static List<Pilgrim> getPilgrim(SQLiteDatabase database, String[] params) {
 List<Pilgrim> shippers = new LinkedList<Pilgrim>();
 String selection="Name = ?";
 try{
   Cursor cursor = database.query(TABLE, COLUMNS, selection, params, null,null,null);          //line 21
   cursor.moveToFirst();
   while (!cursor.isAfterLast()) {
     Pilgrim pilgrim= new Pilgrim();
     pilgrim.setName(cursor.getString(0));
     pilgrim.setDistrict(cursor.getString(1));
     shippers.add(pilgrim);
     cursor.moveToNext();
    }
 }catch (Exception e)
 {
   e.printStackTrace();//this will print in your logcat any possible exception.
 }
 cursor.close();
 Log.v(PilgrimSearchActivity.TAG,"PilgrimDao returning " + shippers.size() + " shippers");
 return shippers;
};
 类似资料:
  • 问题内容: 在我的SQLite数据库管理器中,我可以查询以下内容: 这个查询从2012年7月的名为“ tripmileagetable”的表中返回了里程表总和,但是我想在android查询中编写此代码。 但是我不知道如何在database.query()方法中建立此查询,有什么可以帮助吗? 问题答案:

  • 在我的SQLite数据库管理器中,我可以查询以下内容: 此查询返回2012年7月名为“tripmileagetable”的表中里程表列的总和,但我想在android查询中编写此代码。 但是我不知道如何在database.query()方法中建立这个查询,有人能帮忙吗?

  • 我试图键入代码,以便在数据已经在sqlite中时禁用按钮。但是我发现了这个错误!你能帮我找到解决方案吗? 这是我犯的一个错误 E/AndroidRuntime:致命异常:主进程:com。实例提交文件4MadeGDK2019,PID:16246Android系统。数据库sqlite。SQLiteException:没有这样的专栏:Joker(代码1):,编译时:从android上的movie_fav

  • asynctask用于使事情异步化并从DB返回请求的值。我已经创建了一个接口,并在异步任务中初始化了它,这样我就可以从db返回结果,但它在NPE中失败了。 在活动中,我调用了repository并传递了序列化的数据,如下所示: 和存储库中: dao类: logcat中的错误: 我希望注销找到的会话名称,但却得到了NPE。有人能帮我执行房间查询异步,使用一个实体字段作为搜索字符串返回整个实体从一个列

  • 我有一个,我试图将其转换为String[],以便查询数据库,但我得到了,我不知道问题出在哪里? 将arraylist转换为String[]: 然后我使用游标查询: arraylist和String[]从索引0到34都必须有35个元素 我不明白问题出在哪里?