【问题标题】:How to return JSONObject from doInBackground() method to onPostExecute() method on AsyncTask?如何将 JSONObject 从 doInBackground() 方法返回到 AsyncTask 上的 onPostExecute() 方法?
【发布时间】:2026-01-01 10:15:02
【问题描述】:

在 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() 方法?

【问题讨论】:

    标签: java android


    【解决方案1】:

    已编辑:

    这对你有帮助,

    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>
    

    【讨论】:

    • 感谢您对私有类 AddAsyncTask 扩展 AsyncTask 的解释 在 AsyncTask 在这里您解释了我们为什么使用 First String 和 last String ,中间泛型类型的目的是什么?如果它有虚空以外的......请解释一下......
    • gud qtn dude, AsyncTask protected void onProgressUpdate(Integer...progress_value) { setProgressPercent(progress_value[0]); } 整数值表示进度百分比或大小或其他我们希望显示为进度消息的内容。你还没有实现 onProgressUpdate() 方法,所以我不想通过添加 Dis 让你感到困惑。所以我离开了它。做得好伙计...
    【解决方案2】:

    对于AsyncTask&lt;T1, T2, T3&gt;,将T3 传递为JSONObject

    【讨论】:

      【解决方案3】:

      好的,现在仔细看看这个,

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

      在你的 AsyncTask 第三个参数是String 所以把它改成JSONObject

      喜欢,

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

      【讨论】:

        【解决方案4】:

        代替

        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. Result,后台计算结果的类型

        【讨论】: