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; 
} 

} 

и код, используемый в другой деятельности (AndroidHTTPRequestsActivity), откуда я звоню мой класс GetPostEx является: -Почему выполнение furthur останавливается после строки ответа HttpResponse = client.execute (request)?

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

Я пытаюсь сделать приложение для Android, который нуждается в некоторой HTTP Response от сервера используя API. Это мой код для получения ответа HTTP. Но выполнение останавливается после строки HttpResponse response = client.execute (request); Логарифм не отображает ошибку после этой строки, тогда как отображаемая над ней отображается. Я не могу понять причину этого.

следующие строки подробности трассировки стека в LogCat: -

12-22 14: 18: 58,658: Е/об ошибках(): тысяча триста тридцать-пять до HTTPResponse

12-22 14:18 : 59.448: W/System.err (1335): android.os.NetworkOnMainThreadException

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

12-22 14:18:59 .458: W/System.err (1335): at 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: Вт/System.err (1335): в java.net.InetAddress.getAllByName (InetAddress.java:214)

12-22 14: 18: 59,458: Вт/System.err (1335): в org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:137)

12- 22 14: 18: 59.458: W/System.err (1335): at org.apache.htt p.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java:164)

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

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

12-22 14: 18: 59,478: Вт/System.err (1335): в org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:555)

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

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

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

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

12-22 14: 18: 59,478: Вт/System.err (1335): в android.app.Activity.performCreate (Activity.java:5243)

12-22 14: 18: 59.478: W/System.err (1335): at 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: Вт/System.err (1335): в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java: 2226)

12-22 14: 18: 59,488: Вт/System.err (1335): в android.app.ActivityThread.access $ 700 (ActivityThread.java:135)

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

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

12-22 14: 18: 59.488: W/System.err (1335): at android.os.Looper.loop (Looper.java:137)

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

12-22 14: 18: 59.488: W/System.err (1335): at java.lang.reflect.Method.invokeNative (Родной метод)

12-22 14: 18: 59,488: Вт/System.err (1335): в java.lang.reflect.Method.invoke (Method.java:515)

12-22 14: 18: 59.488: W/System.err (1335): at 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: Вт/System.err (1335): в dalvik.system.NativeStart.main (нативный метод)

12-22 14: 18: 59.588: I/Choreographer (1335): пропустили 641 кадр! Приложение может делать слишком много работы над своей основной нитью.

12-22 14: 19: 03.278: I/Хореограф (1335): Пропустили 33 кадра! Приложение может делать слишком много работы над своей основной нитью.

12-22 14: 19: 06.188: I/Хореограф (1335): пропущено 112 кадров! Приложение может делать слишком много работы над своей основной нитью.

+0

попытка положить поймать блок слишком – Rohit5k2

+0

хорошо я изменил код, как у сказал и дал подробности трассировки стека также. –

+0

Проблема в том, что вы делаете сетевой вызов в основном потоке. Используйте AsyncTask для выполнения сетевого вызова. см. сообщение об ошибке 2-22 14: 18: 59.448: W/System.err (1335): android.os.NetworkOnMainThreadException – Rohit5k2

ответ

1

Ваша ошибка ясно

2-22 14:18:59.448: W/System.err(1335): android.os.NetworkOnMainThreadException

Это просто означает, что вы делаете сетевые вызовы на главном потоке (UI потока).

Используйте AsynTask для осуществления сетевых вызовов. посмотреть http://developer.android.com/reference/android/os/AsyncTask.html

Другой хороший пример http://www.javasrilankansupport.com/2012/11/asynctask-android-example-asynctask-in.html

0

Может случиться, что исключение выбрано в методе выполнения. Следовательно, приведенный ниже оператор Log не будет выполнен.

Я вижу, что вы написали этот код для Android. Проверьте, есть ли у вас разрешение INTERNET в файле MANIFEST. Добавьте блок catch и посмотрите на исключение stacktrace.

+0

Я тоже так чувствую. Но как это исправить? –

+0

Уже добавлено разрешение INTERNET в манифесте. –

+0

Вам нужно добавить трассировку стека, иначе было бы сложно угадать проблему. – Jay