Я создал класс разбора JSON, который возвращает строку. когда я устанавливаю текст текстового вида на строку, он печатает '[email protected]'Функция json parsing возвращает странное имя пакета
Что происходит не так?
Heres синтаксический класс
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();
Я не знаю, почему им получать странный ответ. Благодаря
EDIT:
Так, так как я хотел выход в виде фрагмента, я только закончил с использованием
How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?
вернуть JSON строку фрагмента вызова, чтобы я мог управлять ею из там.
EDIT 2:
OMG !! это было так легко. Я потратил столько времени на это! Поэтому для всех, у кого есть эта проблема, все, что вам нужно сделать, это добавить .get() в конце вызова.
So: String jsonString = new JSONParser().execute(jsonURL).get();
был мой звонок, и все получилось! Мне даже не нужен блок onPostExecute в моей асинтете.
Что возвращает метод 'execute'? – superEb
, когда я не помещаю .toString(), он дает мне ошибку, говоря, что он получает 'android.os.AsyncTask' –
См. Мой ответ ниже , почему вы используете AsyncTask, если вы хотите получить результат синхронно? –