簡體   English   中英

如何從doInBackground()方法返回JSONObject到AsyncTask上的onPostExecute()方法?

[英]How to return JSONObject from doInBackground() method to onPostExecute() method on AsyncTask?

在Android應用程序中,我想從doInBackground()方法返回JSONObject到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
                    }

我試過這段代碼我得到了錯誤。 是否可以從doInBackground()方法返回JSONObject到onPostExecute()方法?

編輯:

這可以幫到你,

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>

對於AsyncTask<T1, T2, T3>T3傳遞為JSONObject

好的,現在仔細看看,

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

在AsyncTask中,第三個參數是String因此將其更改為JSONObject

喜歡,

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

代替

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. 結果,后台計算結果的類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM