Android – AsyncTask类和Execute方法

Android – AsyncTask类和Execute方法,第1张

概述我有使用AsyncTask类的代码,用于使用数据库中的多个联系人填充listView. @Override protected void onResume() { super.onResume(); new MyTask().execute((Object[]) null); } // end method onResume 1.-为什么我传递这个 我有使用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中的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方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1122974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存