我有使用 AsyncTask 类的代码,用于使用数据库中的多个联系人填充 listView。
@Override
protected void onResume()
{
super.onResume();
new MyTask().execute((Object[]) null);
} // end method onResume
1.-我为什么要传递这个:(Object[]) null)
作为参数?
请参阅 AsyncTask 代码:
private class MyTask extends AsyncTask<Object, Object, Cursor>
{
//used for database conection purpose
ConectToDatabase databaseConnector =
new ConectToDatabase(ThisClass.this);
@Override
protected Cursor doInBackground(Object... params)
{
databaseConnector.open();
return databaseConnector.getMyContacts();
}
// use the Cursor returned from the doInBackground method
@Override
protected void onPostExecute(Cursor result)
{
//My cursorAdadper defined in early code
contactAdapter.changeCursor(result);
databaseConnector.close();
}
}
另一个 AsyncTask 问题:
delete.execute(new Long[] { rowID });
2.- 为什么我要传递这个:(new Long[] { rowID })
作为参数而不是简单的(rowId)?
rowID 是一个长类型,其中包含我在上一课中选择的联系人的 ID。那是 ListActivity 中的extendend。以前的课程由我在数据库中获得的所有联系人填充。当我在这个类中(通过意图)发送数据时,我想恢复在我之前的类中选择的单个联系人的数据,但在这种情况下,代码以这种方式出现:new LoadMyContact().execute(rowID);
位于 onResume 方法中。
3.- 为什么我只传递:(rowID)
作为参数?
delete.execute(new Long[] { rowID });
在菜单内,当用户确认删除联系人时,我们执行该语句,删除的代码将是这样的(我们在里面点击按钮):
@Override
public void onClick(DialogInterface dialog, int button)
{
final ConectToDataBase databaseConnector =
new ConectToDataBase(MySecondClass.this);
AsyncTask<Long, Object, Object> deleteTask =
new AsyncTask<Long, Object, Object>()
{
@Override
protected Object doInBackground(Long... params)
{
databaseConnector.deleteContact(params[0]);
return null;
}
@Override
protected void onPostExecute(Object result)
{
finish();
delete.execute(new Long[] { rowID });
}
}; // end new AsyncTask
delete.execute(new Long[] { rowID });
} /
帮助解决这三个问题,谢谢。