2014-09-04 2 views
-2

내 응용 프로그램에서 일부 json 데이터를 읽고 구문 분석하려고합니다. 나는 다음과 같이 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 파서 = 새 JsonParser (strUrl, params); parser.doInBackground(); –

+1

@MahmoudElshamy 'Never'explicity는 doInBackground()를 호출합니다. 수동으로 호출하지 않아도됩니다. – Jitsu

답변

3

클래스를 다음과 같이 부르면 문제가 해결됩니다!

new JSONParser().execute(); 
+0

작동합니다, 고맙습니다. –

관련 문제