gpt4 book ai didi

android - 将 AsyncTask 与数据库一起使用

转载 作者:搜寻专家 更新时间:2023-10-30 23:21:41 26 4
gpt4 key购买 nike

我有以下代码:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen_database);
db=new DBAdapter(this);
InitTask init_task=new InitTask();
init_task.execute(db);
}

public class InitTask extends AsyncTask <DBAdapter, Void, List<GeoPoint>> {
List<GeoPoint> geoPointsArray = new ArrayList<GeoPoint>();
DBAdapter db;
int latitude;
int longitude;
GeoPoint p;
protected List<GeoPoint> doInBackground(DBAdapter...adapters) {
try{
db.openDataBase();
Cursor c=db.getAllData();
if (c.moveToFirst()) {
do{
longitude=Integer.parseInt(c.getString(0));
latitude=Integer.parseInt(c.getString(1));
p = new GeoPoint(latitude,longitude);
geoPointsArray.add(p);
} while(c.moveToNext());
}
c.close();
db.close();
} catch(Exception e) {
Log.d("Eroare","doInBackground",e);
}
return geoPointsArray;
}

protected void onPostExecute(List<GeoPoint> geoPointsArray {
super.onPostExecute(geoPointsArray);
for (int i=0;i<geoPointsArray.size();i++) {
Log.d("Lista",geoPointsArray.get(i).toString());
}
}
}

doInBackground 中,我尝试从数据库读取数据,在我的 onPostExecute() 中,我尝试显示数据,但我什么也没得到,我确信我在数据库中有一些东西。

最佳答案

因为我没有看到你对 AsyncTask Params,Progress,Result 的声明,这很难调试,但我可以看到两个问题1) 你的 doInBackground 与原型(prototype) doInBackground(Params...) 不匹配2) 当线程化的 doInBackground 在 onPostExecute 中返回时,我看不到实际对 geoPointsArray 做任何事情的代码。为了回答您的问题,您在 onPostExecute 回到了 GUI 线程。

我有一些代码 here ,这可能有帮助也可能没有帮助。

编辑:考虑将 db 作为参数传递

new AsynchTask<DataBase?,Void,List<GeoPoint>>

然后注释掉所有非数据库代码。将数据库代码包装在 try catch Exception e 中。在异常时写入 Log.d(TAG,"doInBackground",e)。然后在 onPostExecute 中检查列表以查看 doInBackground 中的线程可能通过调用 Log.d(TAG,new Boolean(myList.isEmpty()).toString()) 返回什么

关于android - 将 AsyncTask 与数据库一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com