在AsyncTask doInBackground中调用旧方法调用

时间:2013-02-11 12:49:26

标签: android

我是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

提前致谢。

2 个答案:

答案 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) {

    }

}