2016-01-06 69 views
0

我正在做一個谷歌地圖項目。我的要求是,如果我在當前活動中按下一個按鈕,它將採取谷歌地圖活動,否則它應該顯示警報對話框,顯示網絡不可用信息。如果沒有網絡,該應用會崩潰。以下是代碼:如果沒有互聯網連接,AlertDialog Box不起作用

public class HomeFragment extends Fragment { 
      protected static final Context Context = null; 

    // flag for Internet connection status 
    Boolean isInternetPresent = false; 

    // Connection detector class 
    ConnectionDetector cd;  public HomeFragment(){} 

     ImageButton button;   @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_home, container, false); 

     return rootView; 
    } 

    @Override public void onActivityCreated(Bundle savedInstanceState) {  // TODO Auto-generated method stub  super.onActivityCreated(savedInstanceState); 

     // creating connection detector class instance 
     cd = new ConnectionDetector(getActivity()); 


     button = (ImageButton) getActivity().findViewById(R.id.button); 
       button.setOnClickListener(new OnClickListener() { 
         @Override   public void onClick(View v) { 
       // TODO Auto-generated method stub 


       // get Internet status 
       isInternetPresent = cd.isConnectingToInternet(); 


       // check for Internet status 
       if (isInternetPresent) { 
        // Internet Connection is Present 
        // make HTTP requests 

        Intent i = new Intent(getActivity(), GoogleActivity.class); 
        startActivity(i);  


       } else { 
        // Internet connection is not present 
        // Ask user to connect to Internet 

        showAlertDialog(Context , "No Internet Connection" , "You don't have internet connection.", true); 

       } 

         }  }); 


      } 
     public void showAlertDialog(Context HomeFragment, String title, String message, Boolean status) { 
      AlertDialog alertDialog = new AlertDialog.Builder(HomeFragment).create(); 

      // Setting Dialog Title 
      alertDialog.setTitle(title); 

      // Setting Dialog Message 
      alertDialog.setMessage(message); 

      // Setting alert dialog icon 
      alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail); 

      // Setting OK Button 
      alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, 
        "OK", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialogInterface, int i) { 

         } 
        }); 

      // Showing Alert Message 
      alertDialog.show(); 
     } } 

logcat的

01-06 16:22:48.940: W/dalvikvm(4223): threadid=1: thread exiting with uncaught exception (group=0x40de4540) 
01-06 16:22:48.960: E/AndroidRuntime(4223): FATAL EXCEPTION: main 
01-06 16:22:48.960: E/AndroidRuntime(4223): java.lang.NullPointerException 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at com.ons.bhoomi.HomeFragment.showAlertDialog(HomeFragment.java:90) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at com.ons.bhoomi.HomeFragment$1.onClick(HomeFragment.java:77) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.view.View.performClick(View.java:4102) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.view.View$PerformClick.run(View.java:17085) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.os.Handler.handleCallback(Handler.java:615) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.os.Looper.loop(Looper.java:155) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at android.app.ActivityThread.main(ActivityThread.java:5520) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1058) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825) 
01-06 16:22:48.960: E/AndroidRuntime(4223):  at dalvik.system.NativeStart.main(Native Method) 
+1

爲了上帝的愛,格式化代碼 –

+2

請出示你的錯誤logcat,並且據我所知,你永遠不會爲變量'Context'分配一個值。代替它,調用'getActivity()'或將該值分配給'Context'變量。 – yennsarah

+0

非常感謝。它的工作。謝謝你們。我所做的改變就在這裏AlertDialog alertDialog = new AlertDialog.Builder(getActivity())。create(); – Yash

回答

2

兩個變化

  1. 變化AlertDialog alertDialog到AlertDialog.Builder alertDialog

所以這將是

AlertDialog.Builder alertDialog = new AlertDialog.Builder(HomeFragment); //Here i doubt instead of HomeFragment it should be getActivity() 
  • 呼叫alertDialog.create()那些你與對話建立完成的: - 。

    alertDialog.create()顯示();

  • +0

    'HomeFragment'很好,因爲它是一個上下文,問題是他沒有定義'Context' –

    +0

    啊我跳過了HomeFragment不是片段的名稱,而是上下文變量:(。 –

    0

    您的上下文是空初始化,添加以下代碼peice的在onActivityCreated

    Context = getActivity().getApplicationContext(); 
    
    +0

    爲什麼你會'.getApplicationContext ()'當活動已經是上下文嗎? –

    +0

    沒有問題'getActivity()'也可以正常工作) –

    0

    嘗試這種方式,

    public class HomeFragment extends Fragment { 
    
        // flag for Internet connection status 
        Boolean isInternetPresent = false; 
    
        // Connection detector class 
        ConnectionDetector cd; 
        ImageButton button; 
    
        public HomeFragment() { 
        } 
    
        @Override 
        public View onCreateView(LayoutInflater inflater, ViewGroup container, 
              Bundle savedInstanceState) { 
    
         View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
    
         return rootView; 
        } 
    
        @Override 
        public void onActivityCreated(Bundle savedInstanceState) { 
         // TODO Auto-generated method stub 
         super.onActivityCreated(savedInstanceState); 
    
         // creating connection detector class instance 
         cd = new ConnectionDetector(getActivity()); 
    
         button = (ImageButton) getActivity().findViewById(R.id.button); 
         button.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           isInternetPresent = cd.isConnectingToInternet(); 
    
           // check for Internet status 
           if (isInternetPresent) { 
            // Internet Connection is Present 
            // make HTTP requests 
    
            Intent i = new Intent(getActivity(), GoogleActivity.class); 
            startActivity(i); 
    
           } else { 
            // Internet connection is not present 
            // Ask user to connect to Internet 
    
            showAlertDialog(getActivity(), "No Internet Connection", "You don't have internet connection.", true); 
           } 
          } 
         }); 
        } 
    
    
        public void showAlertDialog(Context HomeFragment, String title, String message, Boolean status) { 
         AlertDialog alertDialog = new AlertDialog.Builder(HomeFragment).create(); 
    
         // Setting Dialog Title 
         alertDialog.setTitle(title); 
    
         // Setting Dialog Message 
         alertDialog.setMessage(message); 
    
         // Setting alert dialog icon 
         alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail); 
    
         // Setting OK Button 
         alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, 
           "OK", new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialogInterface, int i) { 
    
            } 
           }); 
    
         // Showing Alert Message 
         alertDialog.show(); 
        } 
    } 
    
    +0

    你改變了什麼,爲什麼? –

    +0

    已將getActivity()的上下文更改。 –

    相關問題