我是Android编程的新手,我在Android 2.2中编写了我的应用程序。但是当我尝试在Android 3或更高版本中运行我的应用时,我收到如下错误:
android.os.NetworkOnMainThreadException
在我的Android 2.2中,我有一个这样的方法:
public JSONObject makeServiceCall(String url, Map<String, String> params)
正在执行网络呼叫操作。调查谷歌我发现我需要将此代码移至AsyncTask
doInBackground
类。
但我在更改doInBackground
的参数方面遇到了麻烦,因为它需要Object...
varags,我的方法需要两个参数String,Map<String,String>
。
我可以在doInBackground
内进行任何工作来调用原始makeServiceCall
。
提前致谢。
答案 0 :(得分:1)
您可以使用自定义AsyncTask
的构造函数发送多个变量,然后您不需要在execute()
方法中发送变量。像这样的东西:
private class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{
private String mString = null;
Map<String, String> mMap;
public MyAsyncTask(String s, Map<String, String> map) {
//assign values to class fields
this.mMap= map;
this.mString = s;
}
@Override
protected Boolean doInBackground(Void... params) {
//access class fields here.
}
}
在您的任何其他活动或其他类中使用如下:
new MyAsyncTask(yourString, yourMap).execute();
答案 1 :(得分:0)
尝试使用Constructor
。
new Download(str1,str2).execute();
public class Download extends AsyncTask<Void, Void, String> {
ProgressDialog mProgressDialog;
public Download(String st1,String str2) {
String STR1 = str1;
String STR2 = str2;
}
protected void onPreExecute() {
mProgressDialog = ProgressDialog
.show(context, "", "Please wait...");
}
protected String doInBackground(Void... params) {
//Call ur method use str1,str2
return 0;
}
protected void onPostExecute(String result) {
}
}