Пытается прочитать и проанализировать некоторые данные json в моем приложении. Я реализовал Parser класс, расширяющий AsyncTask следующим образом:NetworkOnMainThreadException
public class JSONParser extends AsyncTask<Void, Void, String> {
private String strUrl;
private List<NameValuePair> params;
private String result;
private String response;
public static final String RESULT_SUCCESS = "success";
public static final String RESULT_FAILED = "failed";
public JSONParser(String strUrl, List<NameValuePair> params) {
this.strUrl = strUrl;
this.params = params;
}
private void parse() {
try {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(strUrl);
// Add parameters
if (params != null) {
httppost.setEntity(new UrlEncodedFormEntity(params));
}
// Execute HTTP Post Request
HttpResponse httpResponse = httpclient.execute(httppost);
// return by response
result = RESULT_SUCCESS;
this.response = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
} catch (Exception e) {
result = RESULT_FAILED;
this.response = null;
e.printStackTrace();
}
}
@Override
public String doInBackground(Void... params) {
parse();
return response;
}
public String getResult() {
return result;
}
public String getResponse() {
return response;
}
}
Он хорошо работает в более поздних версиях андроида, но, к сожалению, она бросает в более старых версиях NetworkOnMainThreadException
. Я искал и обнаружил, что должен использовать режим Strict в своем приложении, но производительность потоков стала очень плохой! когда я нажимаю кнопку синтаксического анализа, она зависает! Вы можете помочь мне с более лучшим решением?
Как вы инициализируете JSONParser? Какие методы вы называете? Я тебе подскажу. Это не 'новый JSONParser (strurl, params) .execute();' – stealthjong
JsonParser parser = new JsonParser (strUrl, params); parser.doInBackground(); –
@MahmoudElshamy '' Never '' explicity invoke doInBackground(). Это не должно быть вызвано вручную. – Jitsu