我制作了一个返回字符串的 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 块。