-1

私はAndroidプログラミングが初めてで、Android 2.2でアプリをコーディングしました。しかし、Android 3 以降でアプリを実行しようとすると、次のようなエラーが発生します。

    android.os.NetworkOnMainThreadException

私のAndroid 2.2には、次のようなメソッドがあります。

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

これはネットワーク通話操作を実行しています。Google を調べると、このコードをAsyncTaskのクラスに移動する必要があることがわかりましdoInBackgroundた。

しかし、私のメソッドが 2 つのパラメーターdoInBackgroundを取るObject...varag を使用するため、パラメーターを変更するのに問題があります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 に答える