我的问题是如何动态地将参数传递给AsyncTask.我是怎么做到的
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.daily_download);
SharedPreferences myPrefs = this.getSharedPreferences("myLogedPrefs",MODE_WORLD_READABLE);
strBusinessUnit = myPrefs.getString("BusinessUnit", "");
strExecutive = myPrefs.getString("Executive", "");
strTerritoryCode = myPrefs.getString("TerritoryCode", "");
tableListGrid = (GridView)findViewById(R.id.dailydownloadgrid);
tableListGrid.setAdapter(new TableListImageAdapter(this));
tableListGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position,long id) {
if (position == 0) {
dailyDownTable = "LoadTarget";
jsonFilter = "Target1";
new DailyDownldAsyncTask().execute();
}
}
});
}
public class DailyDownldAsyncTask extends AsyncTask<Void, Integer, Void> {
// private final ProgressDialog dialog = new ProgressDialog(DailyDownloadActivity.this);
int myProgress;
@Override
protected void onPostExecute(Void result) {
//if (this.dialog.isShowing()) {
// this.dialog.dismiss();
//}
//Toast.makeText(DailyDownloadActivity.this,"Download successfully",Toast.LENGTH_SHORT).show();
}
@Override
protected void onPreExecute() {
// this.dialog.setMessage("Downloading Table Data.......");
// this.dialog.show();
// myProgress = 0;
}
@Override
protected Void doInBackground(Void... params) {
new DownlaodTableActivity().loadDailyDownloadData(dailyDownTable,jsonFilter,strBusinessUnit, strBusinessUnit,strTerritoryCode);
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
// dialog.setProgress(values[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
我评论'ProgressDialog'并运行代码我也得到错误这里loadDailyDownloadDatadailyDownTable,jsonFilter,strBusinessUnit, strBusinessUnit,strTerritoryCode)方法我想传递参数.
当我运行此代码时,我收到错误:
08-19 09:22:15.521: ERROR/AndroidRuntime(457): FATAL EXCEPTION: AsyncTask #2
08-19 09:22:15.521: ERROR/AndroidRuntime(457): java.lang.RuntimeException: An error occured while executing doInBackground()
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at android.os.AsyncTask$3.done(AsyncTask.java:200)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.lang.Thread.run(Thread.java:1019)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at android.os.Handler.<init>(Handler.java:121)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at android.app.Activity.<init>(Activity.java:680)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at com.xont.controller.syn.DownlaodTableActivity.<init>(DownlaodTableActivity.java:62)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at com.xont.controller.admin.DailyDownloadActivity$DailyDownldAsyncTask.doInBackground(DailyDownloadActivity.java:83)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at com.xont.controller.admin.DailyDownloadActivity$DailyDownldAsyncTask.doInBackground(DailyDownloadActivity.java:1)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at android.os.AsyncTask$2.call(AsyncTask.java:185)
08-19 09:22:15.521: ERROR/AndroidRuntime(457): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
Run Code Online (Sandbox Code Playgroud)
请帮我 ....
提前致谢
似乎您需要首先阅读AsyncTask的文档.http://developer.android.com/reference/android/os/AsyncTask.html
崩溃问题:
请记住,doInBackground将在后台线程中执行.您看到的崩溃问题是DownlaodTableActivity在后台线程中实例化,这在Android框架中是不可能的.(与参数传递无关)所有活动必须在主UI线程中实例化.如果您已在UI线程中实例化它,则将调用Looper.prepare().
解决方案:将loadDailyDownloadData移动到不依赖于DownlaodTableActivity的其他类.如果要在DownlaodTableActivity中更新UI,请在下载数据后在UI线程中执行此操作.
参数传递:
strBusinessUnit = myPrefs.getString("BusinessUnit", "");
strExecutive = myPrefs.getString("Executive", "");
strTerritoryCode = myPrefs.getString("TerritoryCode", "");
... ...
new DailyDownldAsyncTask().execute(dailyDownTable, jsonFilter, strBusinessUnit, strExecutive, strTerritoryCode);
... ...
public class DailyDownldAsyncTask extends AsyncTask<String, Integer, Void> {
// private final ProgressDialog dialog = new ProgressDialog(DailyDownloadActivity.this);
int myProgress;
... ...
@Override
protected Void doInBackground(Void... params) {
dailyDownloadData(params[0],params[1],params[2], params[3],params[4];
return null;
}
... ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8907 次 |
| 最近记录: |