@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中的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> deleteTask = new AsyncTask<Long,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 }); } /
帮助解决这三个问题并表示感谢.
解决方法 AsyncTask的格式为AsyncTask< Param,Progress,Return>使用Param类型执行.#1
可以编写execute(null).这样做会导致IntelliJ IDEA中的var-arg方法警告混淆’null’参数.此警告指出它未包装为单元素数组.因此,在这种情况下,由于Param是Object,所以execute((Object [])null用于抑制警告.
由于变量参数参数不必传递给它们,因此可以使用execute().
#2& #3
在这种情况下,Param是Long,因此execute方法的形式为execute(Long …).没有变量参数语法糖,这与execute(Long [])相同.因此,新的Long [] {rowID}显式创建了具有单个元素(rowID)的Long数组.由于rowID很长,Java编译器会自动将该整数“包装”(包装)成Long对象 – 相当于编写新的Long(rowID).
由于execute方法使用变量参数,因此您不需要直接分配Long数组 – Java编译器将为您执行此 *** 作 – 因此您只需编写execute(rowID)即可.也就是说,Java编译器正在将execute(rowID)扩展为execute(new Long [] {new Long(rowID)}).
因此,#2和#3是等价的.
总结以上是内存溢出为你收集整理的Android – AsyncTask类和Execute方法全部内容,希望文章能够帮你解决Android – AsyncTask类和Execute方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)