我有一段代码,使用了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 是一个 long 类型,其包含在我的先前类中选择的联系人的 ID。这个先前的类是通过从数据库中获取所有联系人进行填充的 ListActivity。当我在这个类中接收到数据(通过意图)时,我想要恢复先前类中选择的单个联系人的数据,但在这种情况下,代码以这种方式出现: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 });
} /
帮助解答以下三个问题,谢谢。
Long != long
。 - Raghav Sood