5

Android アプリでは、JSONObject をdoInBackground()メソッドからメソッドに返したいと考えていonPostExecute()ます。
コードは次のとおりです。

private class AddAsyncTask extends AsyncTask<String, Void, String>
     {
         JSONObject jsonObjRecv;
         String result;

    @Override
    protected JSONObject doInBackground(JSONObject... params) {
        AssetObj assetObj = new AssetObj();
        assetObj.setAssetName(txtname.getText().toString());
        assetObj.setMobileNo(txtmobile.getText().toString());
        assetObj.setOwnerId(myApp.getOwnerId());
        assetObj.setStartTime(startTime.getText().toString());
        assetObj.setEndTime(endTime.getText().toString());
        assetObj.setInterval(interval.getText().toString());
        JSONObject jsonObjRecv = SyncService.AddNewAssetRequest(assetObj);
        return jsonObjRecv;
     }
     protected void onPostExecute(JSONObject obj){
                    if(obj != null)
                    {
                        //do something
                    }

このコードを試してみましたが、エラーが発生しました。JSONObject をdoInBackground()メソッドからメソッドに返すことは可能onPostExecute()ですか?

4

4 に答える 4

5

編集:

これはあなたを助けることができます、

private class AddAsyncTask extends AsyncTask<String, Void, JSONOnject>
 {
     JSONObject jsonObjRecv;
     String result;

@Override
protected JSONObject doInBackground(String... params) {
    AssetObj assetObj = new AssetObj();
    assetObj.setAssetName(txtname.getText().toString());
    assetObj.setMobileNo(txtmobile.getText().toString());
    assetObj.setOwnerId(myApp.getOwnerId());
    assetObj.setStartTime(startTime.getText().toString());
    assetObj.setEndTime(endTime.getText().toString());
    assetObj.setInterval(interval.getText().toString());
    JSONObject jsonObjRecv = SyncService.AddNewAssetRequest(assetObj);
 }
 protected void onPostExecute(JSONObject obj){
            if(obj != null)
            {
                //do something
            }

これは明らかに、

private class AddAsyncTask extends AsyncTask<What type of input you need to pass to doInBackground(), Void, What type of return value you need to return to onPostExcute()>

おそらく、メソッド宣言で戻り値とパラメーターを変更する必要はありません。

次の行を作成するだけです

private class AddAsyncTask extends AsyncTask<String, Void, JSONOnject>

メソッドは、あなたが言及したパラメータと戻り値の型に従って自動的に作成されます

private class AddAsyncTask extends AsyncTask<String, Void, JSONOnject>
于 2012-11-02T07:54:07.170 に答える
2

AsyncTask<T1, T2, T3>パスT3として_JSONObject

于 2012-11-02T07:54:00.963 に答える
2

よし、これをよく見て、

private class AddAsyncTask extends AsyncTask<String, Void, String>

AsyncTask の 3 番目のパラメータはString、 に変更しJSONObjectます。

お気に入り、

private class AddAsyncTask extends AsyncTask<String, Void, JSONObject> 
于 2012-11-02T07:54:43.367 に答える
2

それ以外の

private class AddAsyncTask extends AsyncTask<String, Void, String>

への変更

private class AddAsyncTask extends AsyncTask<String, Void, JsonObject>

実際のコード

private class AddAsyncTask extends AsyncTask<String, Void, JSONOnject>
 {
     JSONObject jsonObjRecv;
     String result;

@Override
protected JSONObject doInBackground(JSONObject... params) {
    AssetObj assetObj = new AssetObj();
    assetObj.setAssetName(txtname.getText().toString());
    assetObj.setMobileNo(txtmobile.getText().toString());
    assetObj.setOwnerId(myApp.getOwnerId());
    assetObj.setStartTime(startTime.getText().toString());
    assetObj.setEndTime(endTime.getText().toString());
    assetObj.setInterval(interval.getText().toString());
    JSONObject jsonObjRecv = SyncService.AddNewAssetRequest(assetObj);
 }
 protected void onPostExecute(JSONObject obj){
            if(obj != null)
            {
                //do something
            }
}
}

AsyncTask < パラメータ、進行状況、結果 >

  1. Params、実行時にタスクに送信されるパラメーターのタイプ。
  2. 進行状況、バックグラウンド計算中に発行された進行状況単位のタイプ。
  3. 結果、バックグラウンド計算の結果の型
于 2012-11-02T07:55:05.940 に答える