2014-09-04 4 views
-2

Пытается прочитать и проанализировать некоторые данные 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 в своем приложении, но производительность потоков стала очень плохой! когда я нажимаю кнопку синтаксического анализа, она зависает! Вы можете помочь мне с более лучшим решением?

+1

Как вы инициализируете JSONParser? Какие методы вы называете? Я тебе подскажу. Это не 'новый JSONParser (strurl, params) .execute();' – stealthjong

+0

JsonParser parser = new JsonParser (strUrl, params); parser.doInBackground(); –

+1

@MahmoudElshamy '' Never '' explicity invoke doInBackground(). Это не должно быть вызвано вручную. – Jitsu

ответ

3

Звоните вам класс, как этот, он решит вашу проблему !!

new JSONParser().execute(); 
+0

Он работает, спасибо –

Смежные вопросы