2015-08-30 63 views
1

我的應用使用導航抽屜。我的應用程序將與以下錯誤崩潰:127startActivity()在加載adView後返回NPE mob

08-30 16:44:30.079 22176-22176/com.imincode.meniti W/System.err﹕ java.lang.NullPointerException 
08-30 16:44:30.089 22176-22176/com.imincode.meniti W/System.err﹕ at com.imincode.meniti.MenuGoals$2$1.onClick(MenuGoals.java:127) 
08-30 16:44:30.089 22176-22176/com.imincode.meniti W/System.err﹕ at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
08-30 16:44:30.089 22176-22176/com.imincode.meniti W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:99) 
08-30 16:44:30.089 22176-22176/com.imincode.meniti W/System.err﹕ at android.os.Looper.loop(Looper.java:137) 

線顯示下方

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     super.onCreateOptionsMenu(menu, inflater); 
MenuItem tbAddItem = menu.findItem(R.id.tbAddItem); 
     tbAddItem.setVisible(true); 
    tbAddItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(MenuItem menuItem) { 
        new AlertDialog.Builder(getActivity()) 
          .setTitle(getContext().getString(R.string.download_paid_title)) 
          .setMessage(getContext().getString(R.string.download_paid_content)) 
          .setIcon(android.R.drawable.ic_dialog_alert) 
          .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

           public void onClick(DialogInterface dialog, int whichButton) { 

    Uri uri = Uri.parse("market://details?id=com.imincode.menitiplus"); 
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); 
    goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
    try { 
     startActivity(goToMarket); //line 127 
    } catch (ActivityNotFoundException e) { 
     getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getActivity().getPackageName()))); 
    } } 
         }) 
         .setNegativeButton(android.R.string.no, null).show(); 
       return false; 
      } 
     }); 

採取注意,當以下條件滿足錯誤將只拋出:

  1. 首先,用admob加載片段
  2. 從導航抽屜中加載另一個片段。這個片段沒有任何admob。
  3. 該片段有一個按鈕來加載Play商店,如上所示。
  4. 點擊該按鈕會拋出上面提到的錯誤。
  5. 如果我不使用AlertDialog(意味着只需在視圖上創建一個按鈕並點擊它),我就可以打開Play Store,而不會出現任何問題。所以我認爲AlertDialog是罪魁禍首之一。

注意到,Play商店中可以沒有任何問題或錯誤推出,如果我沒有在打開其中有一個按鈕加載Play商店中的片段(和eventualy點擊之前加載使用AdMob的片段按鈕加載Play商店)。

順便說一句,這裏是代碼來加載其他片段上的adMob。

AdView mAdView = (AdView) rootView.findViewById(R.id.adView); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     mAdView.loadAd(adRequest); 
     mAdView.destroy(); 

回答

0

幾個小時的調試後,發現原來只是通過改變返回false返回true在AlertDialog解決了這個問題。現在一切正常。

基本上這裏的新代碼:

new AlertDialog.Builder(getContext()) 
        .setTitle(getContext().getString(R.string.download_paid_title)) 
        .setMessage(getContext().getString(R.string.download_paid_content)) 
        .setIcon(android.R.drawable.ic_dialog_alert) 
        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

         public void onClick(DialogInterface dialog, int whichButton) { 

          Uri uri = Uri.parse("market://details?id=com.imincode.menitiplus"); 
          Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); 
          goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
          try { 
           startActivity(goToMarket); 
          } catch (ActivityNotFoundException e) { 
           startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getActivity().getPackageName()))); 
          } 

         } 
        }) 
        .setNegativeButton(android.R.string.no, null).show(); 
      return true; 

正如你所看到的,最後返回從false更改爲true。不知道爲什麼這個工程雖然。