2012-08-19 4 views
0

엑스트라을 가지고이 여기 내 첫 번째 게시물, 그리고 내가 잘 할 희망과 내가 편집하기 위해 노력하고있어 ...java.lang.RuntimeException가 : 의도 android.os.NetworkOnMainThreadException

을 서비스를 시작할 수 없습니다 오픈 소스 업데이터 (YAOS 업데이터). 연결하려고하면 오류가 발생합니다.

나는 더 잘 설명하려고 노력할 것이다.

모든 파일을 나열하는 데 사용되는 JSON에 값을 추가했습니다. 각 파일의 새 값은 urlArchivo이며 파일의 전체 URL을 포함합니다.

Log.d("Dexafree", "Intentando conectar a: " +urlArchivo); 

이의 정확한 전체 URL을 반환

package org.yaosupdater.services; 


import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 

import org.yaosupdater.R; 

import android.annotation.TargetApi; 
import android.app.DownloadManager; 
import android.app.DownloadManager.Query; 
import android.app.DownloadManager.Request; 
import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

@TargetApi(16) 
public class DownloadService extends Service{ 

private DownloadManager dm; 
private String nombre; 
private String archivo; 
private String urlArchivo; 
private String[] mirrors; 
private long enqueue; 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onStart(Intent intent, int startid){ 
    super.onStart(intent, startid); 
    dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
    Bundle bundle = intent.getExtras(); 
    nombre = (String) bundle.get("nombre"); 
    Log.d("Dexafree", "Nombre: " +nombre); 
    archivo = (String) bundle.get("archivo"); 
    Log.d("Dexafree", "Archivo: " +archivo); 
    urlArchivo = (String) bundle.getString("urlArchivo"); 
    Log.d("Dexafree", "urlArchivo: " +urlArchivo); 
    mirrors = (String[]) bundle.get("mirrors"); 
    URL url; 
    int j = 0; 
    boolean found = false; 
    while((j < mirrors.length)&&(!found)){ 
     try { 
      url = new URL(urlArchivo); 
      Log.d("Dexafree", "Intentando conectar a: " +urlArchivo); 
      //url = new URL(urlArchivo); 
      //Log.d("Dexafree", "Intentando conectar a: " +urlArchivo); 
      URLConnection urlCon = url.openConnection(); 
      Log.d("Dexafree", "Conexion abierta a: " +urlCon); 
      Log.d("Dexafree", "Debe ser igual a: " + urlArchivo); 
      InputStreamReader is = new InputStreamReader(urlCon.getInputStream()); 
      found = true; 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      Log.d("MIUIEsUpdater", "El archivo " +urlArchivo +" no se encontró."); 
      found = false; 
     } 
     j++; 
    } 
    j--; 

변수 urlArchivo에서, 로그 캣에, 내 말은, 올바른 URL을 가져옵니다

코드의 일부이다 파일,하지만 다음 FC를 보여주는 FC

08-19 14:51:40.417: E/Trace(4134): error opening trace file: No such file or directory (2) 
08-19 14:51:40.449: D/Dexafree(4134): Nombre: MODEM KF1 
08-19 14:51:40.453: D/Dexafree(4134): Archivo: Modem_KF1.zip 
08-19 14:51:40.453: D/Dexafree(4134): urlArchivo: http://content.wuala.com/contents/elitemovil/Galaxy_S/GT-I9000/carpetaprueba/Modem_KF1.zip 
08-19 14:51:40.453: D/Dexafree(4134): Intentando conectar a: http://content.wuala.com/contents/elitemovil/Galaxy_S/GT-I9000/carpetaprueba/Modem_KF1.zip 
08-19 14:51:40.453: D/Dexafree(4134): Conexion abierta a: libcore.net.http.HttpURLConnectionImpl:http://content.wuala.com/contents/elitemovil/Galaxy_S/GT-I9000/carpetaprueba/Modem_KF1.zip 
08-19 14:51:40.453: D/Dexafree(4134): Debe ser igual a: http://content.wuala.com/contents/elitemovil/Galaxy_S/GT-I9000/carpetaprueba/Modem_KF1.zip 
08-19 14:51:40.457: D/AndroidRuntime(4134): Shutting down VM 
08-19 14:51:40.457: W/dalvikvm(4134): threadid=1: thread exiting with uncaught exception (group=0x40edb300) 
08-19 14:51:40.500: E/AndroidRuntime(4134): FATAL EXCEPTION: main 
08-19 14:51:40.500: E/AndroidRuntime(4134): java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=org.yaosupdater/.services.DownloadService (has extras) }: android.os.NetworkOnMainThreadException 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2507) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.app.ActivityThread.access$1900(ActivityThread.java:130) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.os.Looper.loop(Looper.java:137) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at dalvik.system.NativeStart.main(Native Method) 
08-19 14:51:40.500: E/AndroidRuntime(4134): Caused by: android.os.NetworkOnMainThreadException 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at org.yaosupdater.services.DownloadService.onStart(DownloadService.java:73) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.app.Service.onStartCommand(Service.java:450) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2490) 
08-19 14:51:40.500: E/AndroidRuntime(4134):  ... 10 more 

나는 sol에 필요한 모든 정보를 게시했으면 좋겠다. 이 문제. 더 자세한 정보가 필요하면 알려주십시오.

답변

2

안드로이드는 android.os.NetworkOnMainThreadException 발생

응용 프로그램의 주 스레드에 네트워킹 작업을 수행하려고 할 때 throw되는 예외 때문에 ....

이것은 Honeycomb SDK 또는 을 타겟팅하는 애플리케이션에서만 발생합니다. 이전 SDK 버전을 대상으로하는 응용 프로그램은 기본 이벤트 루프 스레드에서 네트워킹을 허용하지만 크게는 입니다.

네트워킹 작업을 위해 별도의 스레드를 생성하십시오.

잠재적으로 긴 같은 네트워크 또는 데이터베이스 작업, 또는 자식 스레드에서

주를 수행해야 비트 맵 크기 조정 등의 계산 비용 계산 등의 작업을 실행하는 것을에서 실행되는 다른 응용 프로그램 객체 등의 서비스, 메인 그들의 호스팅 프로세스의 스레드. 즉, 서비스가 인 경우 (예 : MP3 재생) 또는 CPU 집약적 인 작업 (예 : MP3 재생) 또는 차단 (네트워킹과 같은 ) 작업 인 경우 에 해당 스레드를 생성해야합니다.

Source1Source2Source3

당신이 직접이 문제를 조사하지만, 어 있었다 - 그것은 다음 번을한다.

+0

우선, 답변 해 주셔서 감사합니다. 하지만이 파일은 별도의 파일입니다.이 파일은 주 .java 파일이 아닙니다 ... 나는 다음과 같이 말합니다 : S – dexafree

+0

주 스레드에서 실행되는 경우 아무 것도 변경되지 않습니다. – nullpotent

+0

흠은 자신의 스레드에서 실행해야하는 서비스가 아닙니다. – sherpya

관련 문제