2012-07-07 8 views
0

나는 안드로이드에 GET 요청을하는 코드를 작성하지만이 같은 오류 : Android에서 HttpGet의 문제를 해결하는 방법은 무엇입니까?

07-07 21:12:39.674: E/AndroidRuntime(2409):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 

그래서 내가 AsyncTask를를 사용할 필요가 읽어 보시기 바랍니다. 나는 그것을했다. 한 번은 잘 작동했지만 다음에 앱을 실행하면 오류가 다시 발생합니다.

이 내 코드입니다 : 내가 잘못했다거나 내가 무엇을 가지고이 문제를 해결하기 위해 무엇

package app.teksty; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 


import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 



public class MainActivity extends Activity { 


    private class HttpGetRequest extends AsyncTask<String, Integer, Void> 
    { 

     private InputStream content; 

     @Override 
     protected Void doInBackground(String... params) { 

       String url = params[0]; 
       Log.i("[GET REQUEST]", "STARTED"); 
       try { 
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpResponse response = httpclient.execute(new HttpGet(url)); 
        content = response.getEntity().getContent(); 
       } catch (Exception e) { 
        Log.e("[GET REQUEST]", "Network exception", e); 
       } 

       return null; 

     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      BufferedReader r = new BufferedReader(new InputStreamReader(content)); 
      StringBuilder respond = new StringBuilder(); 
      String line; 
      try { 

       while ((line = r.readLine()) != null) { 
        respond.append(line); 
       } 

       Log.i("[GET REQUEST]", respond.toString()); 

      } catch (IOException e) { 

       Log.e("[GET REQUEST]", "", e); 
      } 

     } 


    } 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     new HttpGetRequest().execute("http://www.google.pl"); 

     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


} 

?

+0

더. 가능한 경우 빨간색 오류 텍스트의 전체 덩어리를 표시하십시오. 해결책은 오류의 유형 (오류가 발생한 곳이 아닌)에 전적으로 의존 할 수 있습니다. – Eric

답변

3

Inputstream에서 작업하는 동안 주 스레드에서 작업하고 있으며 네트워크에서 작동하는 것으로 간주됩니다. doInBackground() 핸들러의 전체 내용을 읽고 괜찮을 것입니다.

0

onPostExecute() 메서드는 기본 UI 스레드에서 실행됩니다. UI 요소를 사용하지 않으므로 UI ​​스레드에 모든 명령문을 포함시켜야합니다. 그냥 return 문 앞에 모든 문을 doInBackground()으로 옮기고 작동하면 시도하십시오.

6

당신의 방법 onCreate()이 코드를 넣어보십시오 :

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

그러나 이것은 단지 빌드 SDK 버전 9 작동하고 당신은 오류 출력을 더 보여줄 필요가

+0

당신은 새로운 trictMode를 잊었습니까? – Advanced

관련 문제