-1

我对 android 编程非常陌生,我在 Android 2.2 中编写了我的应用程序。但是当我尝试在 Android 3 或更高版本中运行我的应用程序时,我收到如下错误:

    android.os.NetworkOnMainThreadException

在我的 android 2.2 中,我有一个这样的方法:

public JSONObject makeServiceCall(String url, Map<String, String> params)

它正在执行网络调用操作。查看谷歌我发现我需要将此代码移动AsyncTaskdoInBackground.

但是我在更改参数时遇到了麻烦,doInBackground因为它需要Object...可变参数,我的方法需要两个参数String,Map<String,String>

我可以在里面做任何工作doInBackground来调用我的原始makeServiceCall.

提前致谢。

4

2 回答 2

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(); 
于 2013-02-11T12:57:22.197 回答
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) {

    }

}
于 2013-02-11T12:57:29.737 回答