2012-08-22 246 views
1

我正在嘗試使用BroadcastReceiver構建此網絡連接。當連接不存在時,它會顯示一個警告對話框,告訴用戶重試連接。我無法讓這部分工作。它說「The constructor AlertDialog.Builder(ConnectionDetector) is undefined」和「The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (ConnectionDetector, String, int)」。我想我搞砸了我的代碼。最後一個問題是如何做一個重試按鈕?這裏很適合Android。由於Android網絡連接狀態

import android.app.AlertDialog; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.DialogInterface; 
    import android.content.Intent; 
    import android.net.ConnectivityManager; 
    import android.widget.Toast; 



    /** 
    * This broadcast receiver is awoken after boot and registers the service that 
    * checks for new photos from all the known contacts. 
    */ 


    public class ConnectionDetector extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 



    boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,false); 

    if(noConnectivity){ 

      Toast.makeText(context, "Internet Connection Required" , Toast.LENGTH_LONG).show(); 


      AlertDialog.Builder builder = new AlertDialog.Builder(context); 
      builder.setCancelable(true); 
      // builder.setIcon(R.drawable.dialog_question); 
      builder.setTitle("Title"); 
      builder.setInverseBackgroundForced(true); 
      builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
       } 
      }); 
      builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 

     //System.exit(0); 
     //Show Warning Message 
     //Close Application the way i suggested 
    } 

    } 

    } 

logcat的:應用程序崩潰

08-22 13:56:31.899: E/AndroidRuntime(29026): FATAL EXCEPTION: main 
    08-22 13:56:31.899: E/AndroidRuntime(29026): java.lang.RuntimeException: Unable to start receiver com.example.androidhive.ConnectionDetector: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2140) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.access$1500(ActivityThread.java:127) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.os.Handler.dispatchMessage(Handler.java:99) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.os.Looper.loop(Looper.java:137) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.main(ActivityThread.java:4512) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at java.lang.reflect.Method.invokeNative(Native Method) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at java.lang.reflect.Method.invoke(Method.java:511) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at dalvik.system.NativeStart.main(Native Method) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.ViewRootImpl.setView(ViewRootImpl.java:693) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.Dialog.show(Dialog.java:278) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at com.example.androidhive.ConnectionDetector.onReceive(ConnectionDetector.java:52) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2133) 
    08-22 13:56:31.899: E/AndroidRuntime(29026): ... 10 more 
+0

錯誤的標題,不是你要求的。 –

回答

1

它,因爲你試圖傳遞錯誤的上下文

更換

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

通過

AlertDialog.Builder builder = new AlertDialog.Builder(context); 

而且

更換

Toast.makeText(this, "Internet Connection Required" , Toast.LENGTH_LONG).show(); 

通過

Toast.makeText(context, "Internet Connection Required" , Toast.LENGTH_LONG).show(); 
+0

Hello Vipul,當我輸入代碼時,我的應用程序崩潰。請指導我 –