2014-01-06 2 views
1

Im используя нижеприведенный метод, чтобы перейти на страницу настроек, если GPS не включен. Но это исключает исключениеnull.Исключение Null при использовании AlertDialog для входа пользователя на страницу настроек

public void showSettingsAlert() { 
    try { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 

     alertDialog.setTitle("GPS Settings"); 

     alertDialog.setMessage("Please enable GPS. Do you want to go to settings menu?"); 

     // On pressing Settings button 
     alertDialog.setPositiveButton("Settings", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        mContext.startActivity(intent); 
       } 
      } 
     ); 

     // on pressing cancel button 
     alertDialog.setNegativeButton("Cancel", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      } 
     ); 

     // Showing Alert Message 
     alertDialog.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Не мог бы кто-нибудь помочь мне.

+2

столб StackTrace – Raghunandan

+0

сообщение LogCat и сообщить номер строки, где вы получаете нулевой –

+0

** Где ** это бросить 'NullReferenceException'? Вы знаете, как использовать logcat? если вы можете найти сообщения об ошибках и опубликовать хотя бы последнюю строку, где возникло исключение –

ответ

1

использовать следующую строку

AlertDialog alertDialog = alertDialogBuilder.create(); 

добавить эту строку к вашему коду

public void showSettingsAlert() { 
    try { 
     AlertDialog.Builder alertDialogBuilder= new AlertDialog.Builder(mContext); 

     alertDialogBuilder.setTitle("GPS Settings"); 

     alertDialogBuilder 
       .setMessage("Please enable GPS. Do you want to go to settings menu?"); 

     // On pressing Settings button 
     alertDialogBuilder.setPositiveButton("Settings", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         Intent intent = new Intent(
           Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         mContext.startActivity(intent); 
        } 
       }); 

     // on pressing cancel button 
     alertDialog.setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 

//added this line 
    AlertDialog alertDialog = alertDialogBuilder.create(); 

     // Showing Alert Message 
     alertDialog.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

вы должны опубликовать только один анс, если оба они одинаковы. –

+0

скромное принятие ваших предложений. но, пожалуйста, не уменьшайте мою точку зрения, я новичок в stackoverflow.it был только для его лучшего понимания, желаю вам очень счастливого нового года-2014 сэр :) –

+0

вы должны расширить этот ответ, добавив содержимое своего другого ответа и удалите другой, поскольку вы не должны публиковать несколько ответов на вопрос. –

1

я думаю, что у не инициализирует переменную mContext так инициализировать его текущей деятельности как mContext = это;

0

Я нашел решение. R & D по этой проблеме указывает, что вызов службы AlertDialog из службы не является хорошей практикой. Поэтому я создаю новую активность с темой @android: style/Theme.DeviceDefault.Dialog как окно оверлея системы из Сервиса и вызывая страницу настроек при нажатии кнопки OK этого макета с помощью кода ниже.

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    this.startActivity(intent); 
    this.finish(); 

Я называю это мероприятие другим своим сервисом.

  Intent intent; 
      intent = new Intent(this, 
        SettingsAlertActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      this.startActivity(intent);