5

在 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()

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 中,第三个参数是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. Result,后台计算结果的类型
于 2012-11-02T07:55:05.940 回答