0

我制作了一个返回字符串的 JSON 解析类。当我将 textview 的文本设置为字符串时,它会打印 'com.test.app.JSONParser@41eddbf8'

怎么了?

这是解析类

import android.os.AsyncTask;
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Created by Vaibhav on 8/9/13.
 */
public class JSONParser extends AsyncTask<String, Void, String>{
    protected String doInBackground(String... url) {
        DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
        HttpGet httpget = new HttpGet(url[0]);
        //httppost.setHeader("Content-type", "application/json");

        InputStream inputStream = null;
        String result;
        try {
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();

        inputStream = entity.getContent();
        // json is UTF-8 by default
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();

        String line;
        while ((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
        }
        result = sb.toString();
        return result;
        } catch (Exception e) {
        Log.d("com.test.app.JSONParser", "JSON ERROR:" + e.toString());
        return null;
    }
    finally {
        try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
    }
}
}

我把这个函数称为

String jsonString = new JSONParser().execute(jsonURL).toString();

我不知道为什么我会得到奇怪的反应。谢谢

编辑:

所以因为我想要片段中的输出,所以我最终使用了

由于 AsyncTask 是一个单独的类,如何将 OnPostExecute() 的结果获取到主要活动?

将 json 字符串返回给调用片段,以便我可以从那里操作它。

编辑2:

我的天啊!!这太容易了。我在这上面浪费了很多时间!因此,对于遇到此问题的其他任何人,您需要做的就是在通话结束时添加 .get() 。

所以:String jsonString = new JSONParser().execute(jsonURL).get();是我的电话,它奏效了!我什至不需要在我的异步任务中使用 onPostExecute 块。

4

2 回答 2

1

当您调用 execute 时,该doInBackground方法不会返回其结果,而是将结果传递给该onPostExecute方法。看起来您使用AsyncTask不正确。通常你会做一些onPostExecute需要主线程的结果。

你看到的是类的toString输出,因为当你调用时JSONParseranAsyncTask会返回。thisexecute

于 2013-08-10T00:57:43.020 回答
0

您正在打印一个对象,其toString方法很可能不会被覆盖以打印漂亮的输出。

如果JSONParser是您自己的类,则覆盖 toString 方法以所需的方式打印输出。如果 JSONParse 不是您的课程,那么您需要找到如何从 api 文档正确打印输出。

于 2013-08-10T00:54:34.727 回答