내 응용 프로그램에서 일부 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 모드를 사용해야한다는 것을 알았지 만 스레드 성능이 매우 나빠졌습니다! 구문 분석 단추를 클릭하면 멈 춥니 다! 더 나은 솔루션을 제공 할 수 있습니까?
JSONParser는 어떻게 초기화합니까? 어떤 방법으로 전화합니까? 아프다. 너에게 힌트를 줘. 새 JSONParser (strurl, params) .execute(); ' – stealthjong
JsonParser 파서 = 새 JsonParser (strUrl, params); parser.doInBackground(); –
@MahmoudElshamy 'Never'explicity는 doInBackground()를 호출합니다. 수동으로 호출하지 않아도됩니다. – Jitsu