2011-02-04 5 views
1

날씨 데이터를 다운로드하는 동안 사용자가 모든 연결 범위를 벗어나 응용 프로그램이 멈추고 충돌이 발생하면 충돌하는 날씨 응용 프로그램이 있습니다. MainActivity 내에서 BroadcastReceiver를 구현하여 연결 변경이있을 때이를 감지했습니다. onStart에 등록하고 onStop에서 등록을 취소합니다. 이 때 모든 메시지를 취소하고 사용자에게 연결이 끊어 졌음을 알리는 대화 상자를 표시하려고합니다. 핸들러를 취소하기 위해 수신기가 호출되지 않는 것 같습니다. 수신자에게 우선권을 위임 할 수있는 방법이 있습니까?모든 연결이 끊기고 내 응용 프로그램이 손상됩니다. Android

나는 포함하는 어떤 코드를 잘 모르겠지만, 아래에있는 내 코드는 수신 처리를위한 것입니다이 내

case ACCUWX.Messages.CONNECTIVITY_CHANGE: 
       Log.d("!#!#@!#[email protected][email protected]#[email protected]!#[email protected]!", "CONNECTIVITY CHANGE MSG"); 
       if (!isNetworkReachable()){ 
        Log.d("@!$#@$#[email protected][email protected]!$#", "network not reachable in CONNECTIVITY CHANGE MA MSG"); 
        if (mLocationSearchDialog != null) mLocationSearchDialog.dismiss(); 
        if (mProgressDialog != null) mProgressDialog.dismiss(); 
        showConnectivityAlertDialog(); 
       } 
       break; 

그리고에서

,이 방법 : 메시지 처리기 여기에서

public BroadcastReceiver mReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("#########", "mReciver onReceive MA"); 
     if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
      Log.d("#####", "connectivity action MA mReceiver"); 

      if (mHandler != null) { 
       mHandler.removeMessages(ACCUWX.Messages.DATA_LOADED_FROM_DATABASE); 
       mHandler.removeMessages(ACCUWX.Messages.DATAFEED_DOWNLOAD_COMPLETE); 
       mHandler.removeMessages(ACCUWX.Messages.DATAFEED_DOWNLOAD_FAILED); 
       mHandler.removeMessages(ACCUWX.Messages.DATAFEED_DOWNLOAD_FROM_GPS); 
       mHandler.removeMessages(ACCUWX.Messages.GPS_TIMEOUT_OCCURRED); 
       mHandler.removeMessages(ACCUWX.Messages.LOCATION_CODE_FAILED_FROM_COORDS); 
       mHandler.removeMessages(ACCUWX.Messages.LOCATION_CODE_FOUND_FROM_COORDS); 
       mHandler.removeMessages(ACCUWX.Messages.LOCATION_SEARCH_COMPLETE); 
       mHandler.removeMessages(ACCUWX.Messages.LOCATION_SEARCH_FAILED); 
       mHandler.sendEmptyMessage(ACCUWX.Messages.CONNECTIVITY_CHANGE); 
      } 
     } 

    } 

};  

을 연결 상태를 감지하기 위해 호출되었습니다.

private boolean isNetworkReachable() { 
    Log.d("#########", "isNetworkReachable MA"); 
    boolean airplaneMode = false; 
    boolean mobileConnected; 
    boolean wifiConnected; 
    NetworkInfo wifi, mobile; 
    boolean result = false; 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

    try { 
     int airplaneValue = Settings.System.getInt(this.getContentResolver(), Settings.System.AIRPLANE_MODE_ON); 
     airplaneMode = (airplaneValue != 0); 
    } catch (SettingNotFoundException e) { 
     e.printStackTrace(); 
    } 

    mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    mobileConnected = mobile.isConnected(); 
    wifiConnected = wifi.isConnected(); 

    Log.d("##########", "airplaneMode in MA " + airplaneMode); 
    Log.d("##########", "mobileConnected in MA " + mobileConnected); 
    Log.d("##########", "wifiConnected in MA " + wifiConnected); 

    if (airplaneMode) 
     result = false; 
    else { 
     if (mobileConnected || wifiConnected) 
      result = true; 
    } 
    return result; 
} 

어떻게하면 내 응용 프로그램 이온이 부서져서 사용자에게 연결이 끊어 졌다는 것을 알리십시오.

내 오류 로그가 일치하지 않습니다.

02-04 08:01:02.889: ERROR/AndroidRuntime(6565): FATAL EXCEPTION: main 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565): java.lang.RuntimeException: Unable to start receiver com.accuweather.android.simpleweatherlite.dellstreak.widget.WidgetProvider: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.app.ActivityThread.access$3200(ActivityThread.java:125) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.os.Looper.loop(Looper.java:123) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at dalvik.system.NativeStart.main(Native Method) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.view.ViewRoot.setView(ViewRoot.java:509) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.app.Dialog.show(Dialog.java:241) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at com.accuweather.android.simpleweatherlite.dellstreak.widget.WidgetProvider.showConnectivityAlertDialog(WidgetProvider.java:127) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at com.accuweather.android.simpleweatherlite.dellstreak.widget.WidgetProvider.onReceive(WidgetProvider.java:174) 
02-04 08:01:02.889: ERROR/AndroidRuntime(6565):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810)

다른 : 당신은 내가 말할 수있는 근처에하는 BroadcastReceiver에서 대화 상자를 표시하려고하기 때문에

02-04 07:40:07.330: ERROR/AndroidRuntime(6316): FATAL EXCEPTION: main 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316): java.lang.ArrayIndexOutOfBoundsException 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at com.accuweather.android.simpleweatherlite.dellstreak.MainActivity$10.handleMessage(MainActivity.java:2067) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at android.os.Looper.loop(Looper.java:123) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
02-04 07:40:07.330: ERROR/AndroidRuntime(6316):  at dalvik.system.NativeStart.main(Native Method) 
+0

앱이 충돌 할 때 로그에 오류가 있습니까? –

+0

두 가지 오류가 발생했습니다. – taraloca

+0

첫 번째 로그 세트를 찾았습니다. 나는 비 활동에서 대화 상자를 표시하려고 노력하고있다. – taraloca

답변

0

첫 번째 스택 추적은 여기에 두 개의 별도의 보고서입니다.

두 번째 스택 추적은 자신의 코드에서 나옵니다. 여기에서 어레이의 끝에서 실행됩니다.

관련 문제