2012-06-15 1 views
0

Привет, я пытаюсь установить простую связь для загрузки источника веб-страницы через приложение Android, чтобы впоследствии использовать его в сочетании с моим api. Мой код ниже показывает, что нет ошибок, но во время выполнения приложения завершается, когда этот код запущен. Когда я закомментируйте BufferReader линии приложение продолжается в нормальном режиме, так что проблема должна быть с этой строки кода:BufferReader Android

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

И реветь я получил полный фрагмент кода, из которого я использую его.

 currentCustomer.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      try { 
       URL url = null; 
       url = new URL("http:www.google.com"); 
       URLConnection conn = url.openConnection(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
       String line = ""; 
       while((line = reader.readLine()) != null) { 
        tv.append(line); 
       } 
      } catch(Exception e) { 

      } 

     } 
    }); 

Любая помощь будет оценена :)

И вот трассировки стека:

06-15 16:15:50.911: D/dalvikvm(925): GC_FOR_ALLOC freed <1K, 4% free 7249K/7495K, paused 59ms 
06-15 16:15:51.049: D/dalvikvm(925): GC_CONCURRENT freed <1K, 4% free 7249K/7495K, paused 5ms+4ms 
06-15 16:15:51.159: V/TLINE(925): new: [email protected]f50 
06-15 16:15:51.489: V/TLINE(925): new: [email protected] 
06-15 16:15:55.019: W/System.err(925): java.lang.NullPointerException 
06-15 16:15:55.039: W/System.err(925): at  org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.hashCode(HttpConnection.java:296) 
06-15 16:15:55.039: W/System.err(925): at java.util.HashMap.get(HashMap.java:302) 
06-15 16:15:55.039: W/System.err(925): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:73) 
06-15 16:15:55.039: W/System.err(925): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292) 
06-15 16:15:55.049: W/System.err(925): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274) 
06-15 16:15:55.049: W/System.err(925): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1038) 
06-15 16:15:55.049: W/System.err(925): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:523) 
06-15 16:15:55.049: W/System.err(925): at com.kylemcbride.SqueakyClean.SqueakyCleanActivity$1.onClick(SqueakyCleanActivity.java:48) 
06-15 16:15:55.049: W/System.err(925): at android.view.View.performClick(View.java:3100) 
06-15 16:15:55.049: W/System.err(925): at android.view.View$PerformClick.run(View.java:11644) 
06-15 16:15:55.059: W/System.err(925): at android.os.Handler.handleCallback(Handler.java:587) 
06-15 16:15:55.059: W/System.err(925): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-15 16:15:55.069: W/System.err(925): at android.os.Looper.loop(Looper.java:126) 
06-15 16:15:55.069: W/System.err(925): at android.app.ActivityThread.main(ActivityThread.java:3997) 
06-15 16:15:55.069: W/System.err(925): at java.lang.reflect.Method.invokeNative(Native Method) 
06-15 16:15:55.069: W/System.err(925): at java.lang.reflect.Method.invoke(Method.java:491) 
06-15 16:15:55.080: W/System.err(925): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
06-15 16:15:55.080: W/System.err(925): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
06-15 16:15:55.080: W/System.err(925): at dalvik.system.NativeStart.main(Native Method) 

ответ

1

Вы пытаетесь загрузить URL:

http:www.google.com 

Обратите внимание на отсутствие косых черт. Это не настоящий адрес.

1

Вы должны использовать StringBuilder для конкатенации строки при получении данных из веб-источника. Конкатенация строки каждый раз замедляет установленную скорость соединения. Вот ссылка на StringBuilder: http://developer.android.com/reference/java/lang/StringBuilder.html

EDITED Кроме того, при выполнении сетевых операций, чтение и запись из базы данных или запущенных служб. Подобно тому, как вы пытаетесь получить данные из веб-источника, рекомендуется выполнять такие задачи в отдельном потоке, вместо этого выполняться в основном потоке (также как поток пользовательского интерфейса). Если вы не используете отдельный поток для этого, вам всегда придется сталкиваться с исключениями и сбоями приложений. Лучшее решение для работы, которую вы выполняете, вы должны использовать AsynchTask. Оформить заказ эти ссылки:

Смотрите раздел Рабочий Thread:
http://developer.android.com/guide/components/processes-and-threads.html
Посмотрите, что AsynchTask может предложить:
http://developer.android.com/reference/android/os/AsyncTask.html