2013-07-19 4 views
0

Мне сложно определить, что проблема в моем коде. Я застрял в этой части, и отладчик как-то загадочен. Пожалуйста, смотрите прилагаемый код: Файла манифеста имеетОтладка проблем в http-соединении

<uses-permission android:name="android.permission.INTERNET"/> 

Далее код для начала, я пометил исключение две попытки/уловы с System.out «Exception 1» и «2 Exception "для Quicky идентификации в LogCat

package com.example.httpexample; 

import android.os.Bundle; 
import android.widget.TextView; 
import android.app.Activity; 

public class HttpExample extends Activity { 

TextView httpStuff; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.httpex); 

    httpStuff = (TextView) findViewById(R.id.tvHttp); 
    GetMethodEx test = new GetMethodEx(); 
    String returned; 
    try { 
     returned = test.getInternetData(); 
     httpStuff.setText(returned); 
    } catch (Exception e) { 
     System.out.println("Exception 1"); 
     e.printStackTrace(); 
    } 
    } 
} 

второй блок кода является фактический класс HTTP

package com.example.httpexample; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URI; 

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; 

public class GetMethodEx { 

public String getInternetData() throws Exception{ 
    BufferedReader in = null; 
    String data = null; 
    try{ 
     HttpClient client = new DefaultHttpClient(); 
     URI website = new URI("http://google.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) { 
       System.out.println("Exception 2"); 
       e.printStackTrace(); 
      } 
     } 
    } 
    } 
} 

Моя проблема заключается в том, что я не могу определить что проблема с использованием отладчика я смотрю не в том месте, есть ли там больше информации ??? Вот немного выхода logcat, который я получаю сразу после исключения, но опять же я не знаю, как его толковать, или если в другом месте больше информации, спасибо заранее за помощь!

07-19 21:37:30.916: I/System.out(4987): Exception 1 
07-19 21:37:30.916: W/System.err(4987): android.os.NetworkOnMainThreadException 
07-19 21:37:30.936: W/System.err(4987):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
07-19 21:37:30.936: W/System.err(4987):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
07-19 21:37:30.936: W/System.err(4987):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
07-19 21:37:30.947: W/System.err(4987):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
07-19 21:37:30.947: W/System.err(4987):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
07-19 21:37:30.956: W/System.err(4987):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
07-19 21:37:30.966: W/System.err(4987):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
07-19 21:37:30.966: W/System.err(4987):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
07-19 21:37:30.966: W/System.err(4987):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
07-19 21:37:30.976: W/System.err(4987):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
07-19 21:37:30.976: W/System.err(4987):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
07-19 21:37:30.986: W/System.err(4987):  at com.example.httpexample.GetMethodEx.getInternetData(GetMethodEx.java:22) 
07-19 21:37:30.986: W/System.err(4987):  at com.example.httpexample.HttpExample.onCreate(HttpExample.java:21) 
07-19 21:37:30.996: W/System.err(4987):  at android.app.Activity.performCreate(Activity.java:5104) 
07-19 21:37:30.996: W/System.err(4987):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
.. 
.. 
.. and more 

ответ

0

Here is an article об исключении, которое вы получаете.

Вы также можете добавить строки кода Log.d (String, String) в свой код, чтобы следить за каждым шагом и видеть, где именно вы застреваете. Первый аргумент - это тег, второй - это строка, которую вы определяете, какой LogCat вернет вам, когда она попадет на эту строку кода.

Это очень полезно. Я готов поспорить, что в статье есть ваш ответ.

Редактировать, чтобы добавить developer doc, похоже, что действие сети в главной теме является виновником.

Edit # 2 для исправления: TechBlogIsTech Article

Edit # 3 больше на AsyncTask от developer docs.

Окончательный Редактировать для получения дополнительной информации о LogCat debug log writing.

+0

Вы были правы, это связано с StrictMode, что заставляет вас не использовать основной поток для дополнительных задач, спасибо. – user2566468

Смежные вопросы