2013-11-15 54 views
0

我正在實現顯示對話框,當互聯網脫機時,當我運行我的應用程序時出現「FATAL Exception main」和ClassCastException,當我點擊按鈕並且應用程序崩潰時。有人能告訴我我做錯了什麼嗎?感謝您使用Advanced。創建對話框用於檢查Android中的Internet連接

這裏是我的代碼如何檢查啓用互聯網與否:

public class AndroidDetectInternetConnectionActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button btnStatus = (Button) findViewById(R.id.btn_check); 

     btnStatus.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 


       if (!isOnline()) 
       { 
        showNoConnectionDialog(this); 

       } 
      } 

     }); 

    } 

    public static void showNoConnectionDialog(OnClickListener onClickListener) 
    { 
     final Context ctx = (Context) onClickListener; 
     AlertDialog.Builder builder = new AlertDialog.Builder(ctx); 
     builder.setCancelable(true); 
     builder.setMessage(R.string.no_connection); 
     builder.setTitle(R.string.no_connection_title); 
     builder.setPositiveButton(R.string.settings_button_text, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) 
      { 

       ctx.startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); 
      } 
     }); 

     builder.setNegativeButton(R.string.cancel_button_text, new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int which) 
      { 
       return; 
      } 
     }); 

     builder.setOnCancelListener(new DialogInterface.OnCancelListener() 
     { 
      public void onCancel(DialogInterface dialog) { 
       return; 
      } 
     }); 

     builder.show(); 
    } 

    public boolean isOnline() 
    { 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) 
     { 
      return true; 
     } 
     return false; 
    } 

} 

//這是我的日誌貓堆棧跟蹤

11-15 11:57:19.115: D/AndroidRuntime(453): Shutting down VM 
11-15 11:57:19.115: W/dalvikvm(453): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
11-15 11:57:19.122: E/AndroidRuntime(453): FATAL EXCEPTION: main 
11-15 11:57:19.122: E/AndroidRuntime(453): java.lang.ClassCastException: com.example.detectinternetconnection.AndroidDetectInternetConnectionActivity$1 
11-15 11:57:19.122: E/AndroidRuntime(453): at com.example.detectinternetconnection.AndroidDetectInternetConnectionActivity.showNoConnectionDialog(AndroidDetectInternetConnectionActivity.java:99) 
11-15 11:57:19.122: E/AndroidRuntime(453): at com.example.detectinternetconnection.AndroidDetectInternetConnectionActivity$1.onClick(AndroidDetectInternetConnectionActivity.java:64) 
11-15 11:57:19.122: E/AndroidRuntime(453): at android.view.View.performClick(View.java:2485) 
11-15 11:57:19.122: E/AndroidRuntime(453): at android.view.View$PerformClick.run(View.java:9080) 
11-15 11:57:19.122: E/AndroidRuntime(453): at android.os.Handler.handleCallback(Handler.java:587) 
11-15 11:57:19.122: E/AndroidRuntime(453): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-15 11:57:19.122: E/AndroidRuntime(453): at android.os.Looper.loop(Looper.java:123) 
11-15 11:57:19.122: E/AndroidRuntime(453): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-15 11:57:19.122: E/AndroidRuntime(453): at java.lang.reflect.Method.invokeNative(Native Method) 
11-15 11:57:19.122: E/AndroidRuntime(453): at java.lang.reflect.Method.invoke(Method.java:507) 
11-15 11:57:19.122: E/AndroidRuntime(453): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-15 11:57:19.122: E/AndroidRuntime(453): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-15 11:57:19.122: E/AndroidRuntime(453): at dalvik.system.NativeStart.main(Native Method) 
11-15 11:57:24.892: I/Process(453): Sending signal. PID: 453 SIG: 9 

回答

2

改變這一行

final Context ctx = (Context) onClickListener; 

到低於一個

final Context ctx = AndroidDetectInternetConnectionActivity.this; 

基本上,您正試圖將onClickListener轉換爲Contex,這是不正確的,不能被鑄造。 要麼你直接使用ActivityName.this無論你需要上下文實例,或定義static Context ctx作爲一個類變量,並在onCreate()只通過添加此行來初始化它ctx =this還記得在使用它之前初始化它。

享受

+0

我用你的代碼行,但它顯示 「在靜態情況下不能用這個。」 – tazeenmulani

+0

使用我在編輯答案中建議的內容,我用粗體表示,以便更好地理解它。 – AAnkit

+0

我仍然有同樣的錯誤。 – tazeenmulani

0

您基本問題是由線產生的:

最終上下文CTX =(上下文)onClickListener;

這根本不是一個上下文,所以試圖迫使它成爲不起作用。

我相信你想做的事是通過上下文(或活動)這個函數(而不是你現在經過當地不願透露姓名的OnClickListener類)

最簡單的解決辦法是簡單的不及格任何東西給構造函數,並使用AndroidDetectInternetConnectionActivity.this來訪問你的有效上下文。

2

有兩種方法可以解決這個問題。

1)showNoConnectionDialog(this);,後來: public static void showNoConnectionDialog(Context ctx) ...

2)showNoConnectionDialog();,後來:public void showNoConnectionDialog() { Context ctx = AndroidDetectInternetConnectionActivity.this