2014-12-22 2 views
1
import java.io.BufferedReader; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.util.EntityUtils; 

import android.util.Log; 

public class GetPostEx { 

public String getInternetData() throws Exception{ 

    //String source_prog; 
    //int lang_number; 
    //BufferedReader in = null; 
    String ret=null; 
    try{ 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost request = new HttpPost("Some server link"); 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4); 
     nameValuePairs.add(new BasicNameValuePair("source", "print 1")); 
     nameValuePairs.add(new BasicNameValuePair("lang", "5")); 
     nameValuePairs.add(new BasicNameValuePair("testcases", "[\"1\"]")); 
     nameValuePairs.add(new BasicNameValuePair("api_key", "Some key")); 
     request.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     Log.e("error", "before HTTPResponse"); 
     HttpResponse response = client.execute(request); 
     Log.e("error", "Aftr HTTPResponse"); 
     ret = EntityUtils.toString(response.getEntity()); 
     }catch (Exception e){ 
      //Log.e("error","error!!"); 
     e.printStackTrace(); 
    } 
    return ret; 
} 

} 

그리고 난 내 GetPostEx 클래스를 호출 오전 곳에서 다른 활동 (AndroidHTTPRequestsActivity)에 사용되는 코드는 다음과 같습니다 - 나는 서버에서 일부 HTTP 응답을 필요로 안드로이드 응용 프로그램을 만들려고 노력하고HttpResponse response = client.execute (request) 행 다음에 furthur 실행이 중단되는 이유는 무엇입니까?

GetPostEx test = new GetPostEx(); 
    try{ 
     returned = test.getInternetData(); 
} catch(Exception e){ 
      Log.e("error", "yo") ; 
      e.printStackTrace(); 
} 

API를 사용하여. 이것은 내 HTTP 응답을 얻기위한 코드입니다.하지만 실행 후 실행이 중지됩니다. HttpResponse response = client.execute (request); logcat은이 행 다음에 오류가 표시되지만 위 행은 오류가 표시됩니다. 나는 그 이유를 알 수 없다.

12 ~ 22 14 : 18 : 58.658 : E/오류 (1335) : HttpResponse에

12 ~ 22 14시 18분 전 - :

다음 줄

는 로그 캣에서 스택 추적 정보입니다 : 59.448 : W/System.err (1335) : android.os.NetworkOnMainThreadException

12-22 14 : 18 : 59.448 : W/System.err (1335) : android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork StrictMode.java:1145)

12-22 14:18:59 .458 : W/System.err (1335) : java.net.InetAddress.lookupHostByName (InetAddress.java:385)

12-22 14 : 18 : 59.458 : W/System.err (1335) : at java.net.InetAddress.getAllByNameImpl (InetAddress.java:236)

12-22 14 : 18 : 59.458 : java.net.InetAddress.getAllByName에서 (InetAddress.java:214 (1335)를 System.err/W)

12-22 14 : 18 : 59.458 (1335)를 System.err/W : org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:137 AT)

12 22 14 : 18 : 59.458 : System.err (1335) : org.apache.htt에서 p.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java:164)

12-22 14 : 18 : 59.458 : System.err에/W (1335)에 org.apache.http.impl.conn.AbstractPooledConnAdapter .open (AbstractPooledConnAdapter.java:119)

12-22 14 : 18 : 59.478 : W/System.err (1335) : org.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java : 360)

12-22 14 : 18 : 59.478 :) 1,335 (System.err에/W : org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:555)에서

12 -22 14 : 18 : 59.478 : W/System.err (1335) : org. apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:487)

12-22 14 : 18 : 59.478 : W/System.err (1335) : org.apache.http.impl.client .AbstractHttpClient.execute (AbstractHttpClient.java:465)

12-22 14 : 18 : 59.478 : W/System.err (1335) : com.us.onlinecompilr.GetPostEx.getInternetData (GetPostEx.java:37)

12-22 14 : 18 : 59.478 : W/System.err (1335) : com.us.onlinecompilr.AndroidHTTPRequestsActivity.onCreate (AndroidHTTPRequestsActivity.자바 29)

12-22 14 : 18 : 59.478 :) 1,335 (System.err에/W : android.app.Activity.performCreate (Activity.java:5243)에서

12-22 14 : 18 : 59.478 : W/System.err (1335) : android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087)

12-22 14 : 18 : 59.478 : W/System.err (1335) : android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2140)에서

12-22 14 : 18 : 59.488 : android.app.ActivityThread.handleLaunchActivity에서 (ActivityThread.java : System.err에 (1335)/W : 2226)

,515,

12-22 14 : 18 : 59.488 : android.app.ActivityThread.access $ 700 (ActivityThread.java:135)

12-22 14 : 18 : 59.488를 System.err (1335)/W : W/System.err (1335) : android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1397)

12-22 14 : 18 : 59.488 : W/System.err (1335) : android (Handler.java:102)

12-22 14 : 18 : 59.488 : W/System.err

12-22 14 : 18 : 59.488 : W/System.err (133 5) : android.app.ActivityThread.main (ActivityThread.java : 4998)

12-22 14 : 18 : 59.488 : W/System.err (1335) : java.lang.reflect.Method.invokeNative에서 (원시 메소드)

12-22 14 : 18 : 59.488 : System.err에/W (1335) : java.lang.reflect.Method.invoke (Method.java:515)에서

12-22 14 : 18 : 59.488 : W/System.err (1335) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:777)

12-22 14 : 18 : 59.488 : W /System.err(1335) : at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:593)

12-22 14 : 18 : 59.488 :

12-22 14 dalvik.system.NativeStart.main (원시 메소드)에서 : 18 : System.err에 (1335)/W 59.588 : I/안무가 (1335) : 641 프레임을 건너 뜁니다! 응용 프로그램이 주 스레드에서 너무 많은 작업을하고있을 수 있습니다.

12-22 14 : 19 : 03.278 : I/Choreographer (1335) : 33 프레임 건너 뛰기! 응용 프로그램이 주 스레드에서 너무 많은 작업을하고있을 수 있습니다.

12-22 14 : 19 : 06.188 : I/Choreographer (1335) : 112 frames 건너 뛰기! 응용 프로그램이 주 스레드에서 너무 많은 작업을하고있을 수 있습니다.

+0

시도 내가 유 말했듯이 코드를 수정하고 또한 스택 추적 정보를 준 너무 – Rohit5k2

+0

아니라 catch 블록을 넣어이 http://developer.android.com/reference/android/os/AsyncTask.html

또 다른 좋은 예입니다 참조하십시오. –

+0

문제는 메인 스레드에서 네트워크 호출을하는 것입니다. AsyncTask를 사용하여 네트워크 호출. 당신이 오류를 참조하십시오 2-22 14 : 18 : 59.448 : System.err (1335) : android.os.NetworkOnMainThreadException – Rohit5k2

답변

0

실행 메소드에서 예외가 발생할 수 있습니다. 따라서 실행중인 Log 문은 실행되지 않습니다.

Android 용 코드를 작성한 것으로 확인되었습니다. MANIFEST 파일에 인터넷 권한이 있는지 확인하십시오. catch 블록을 추가하고 예외 스택 추적을 확인하십시오.

+0

나는 또한 그렇게 느낀다. 그런데 그것을 바로 잡는 방법? –

+0

이미 매니페스트에 인터넷 사용 권한이 추가되었습니다. –

+0

스택 추적을 추가해야합니다. 그렇지 않으면 문제를 추측하기 어려울 수 있습니다. – Jay