저는 안드로이드를 처음 접했고 서버에 충돌하여 json 응답을 얻는 테스트 응용 프로그램을 개발했습니다. 여기NetworkOnMainThreadException AsyncTask의 자극
public class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected void onPostExecute(String result) {
ResultMainVO resultVO = new Gson().fromJson(result, ResultMainVO.class);
System.out.println("test" + resultVO);
}
@Override
protected String doInBackground(String... urls) {
InputStream is = null;
StringBuilder builder = new StringBuilder();
try {
URL url = new URL(urls[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestProperty("Accept", "*/*");
conn.setDoInput(true);
conn.connect();
is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return builder.toString();
}
}
가 나는 또한의 AndroidManifest.xml에 권한이
을 파일 - 추가 한은 - 내 주요 활동 -public class MainPageActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome_layout);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
new DownloadWebpageTask().doInBackground("http://49.139.144.194:8080/ServerForMyAndroid/MusicServlet");
return false;
}
};
searchView.setOnQueryTextListener(queryTextListener);
return super.onCreateOptionsMenu(menu);
}
}
그리고 AsyncTask를 클래스입니다
나는 아래 excep를 얻는다. 기 나는 02-22 21 emulator-
에 응용 프로그램을 실행할 때 : 49 : 41.989 : E는/AndroidRuntime (734) : 치명적인 예외 : 주를 02-22 21 : 49 : 41.989 : E/AndroidRuntime (734) : android.os.NetworkOnMainThreadException 02-22 21 : 49 : 41.989 : E/AndroidRuntime (734) : android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1084)에서
실제로, 호출하는 (아마도 UI) 스레드에서 실행하므로 백그라운드 메서드를 직접 호출하면 안됩니다. –
고마워요. 어떻게 든 나는 이것을 놓쳤다! –