2014-01-14 3 views
1

아파치 HTTPClient를 사용하여 일부 문자열 데이터를 가져 오는 간단한 방법을 썼지 만, 휴대 전화에서 실행할 때 빈 화면을 반환합니다. 텍스트 영역에 데이터를 표시하려고합니다. 매니페스트에 인터넷 사용 권한이 있습니다. 아무도 내가 잘못하고있는 것을 지적 할 수 있습니까? 안드로이드 앱의 HTTP 클라이언트가 빈 화면을 반환합니다.

public String getInternetData() throws Exception 
{ 
    BufferedReader in = null; 
    String data = null; 
    try 
    { 
     HttpClient client = new DefaultHttpClient(); 
     URI website = new URI("http://www.yahoo.com"); 
     HttpGet request = new HttpGet(); 
     request.setURI(website); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String l = ""; 
     String nl = System.getProperty("line.separator"); 
     while((l=in.readLine())!=null){ 
      sb.append(l+nl); 
     } 
     in.close(); 
     data = sb.toString(); 
     return data; 
    }finally{ 
     if(in !=null){ 
      try{ 
       in.close(); 
       return data; 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
완전성에 대해

, 나는 내가 데이터를 확인하는 데 사용하는 코드를 추가하고있다.

public class MainActivity extends Activity { 

TextView httpStuff; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    httpStuff = (TextView) findViewById(R.id.tvHttp); 
    GetMethodEx test = new GetMethodEx(); 
    String returned; 
    try { 
     returned = test.getInternetData(); 
     httpStuff.setText(returned); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 
+0

HttpClient가 Http를 통해 다운로드하는 방법 일 뿐이라는 것을 알고 있습니까? 웹뷰를 찾고 있다고 생각합니다 – Codeman

+0

데이터를 표시하는 코드를 보여주십시오. – wyoskibum

+0

예. 나는 그 목적을 이해한다고 믿는다. 이미 webviews를 멋지게 사용할 수 있습니다. 그러나 그것은 내가 여기서 찾고있는 것이 아닙니다. 이 메서드를 실행하면 내 메서드의 데이터 문자열이 비어서는 안되며 일부 텍스트가 표시되어야한다고 생각합니다. 그러나 나는 그렇게하지 않는다. 그래서 나는 내가 무엇을 잘못하고 있는지 궁금해하고있다. – Ammar

답변

1

당신은 아마 UI 스레드 오류에 네트워크를 받고, 그것을 시도 캐치에 있기 때문에, 응용 프로그램의 밤은 당신 만 백그라운드 스레드에서 네트워크 작업을 호출 가정, 또는이다 AsyncTasks된다

충돌 그

에 좋은 당신의 HTTP 클라이언트 요청 데이터를 아무 문제가 없다, 문제는 실제로

는이 방법

를 다시 작성하려고 당신의에서 onCreate 방법에 달려있다3210
public class MainActivity extends Activity { 

TextView httpStuff; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    httpStuff = (TextView) findViewById(R.id.tvHttp); 


    AsyncTask<Void,Void,String>getDataTask = new AsyncTask<Void,Void,String>(){ 
     @Override 
     protected String doInBackground(Void... params){ 
     GetMethodEx test = new GetMethodEx(); 
     String returned = test.getInternalData(); 
     return returned; 

     } 
     @Override 
     protected void onPostExecute(String returned){ 
     httpStuff.setText(returned); 
} 

} 



} 
     getDataTask.execute(); 
} 
+0

예. 방금 나 자신을 알아 냈어. 답변과 의견에 감사드립니다. – Ammar

관련 문제