0

В настоящее время у меня есть кнопка, которая при нажатии показывает AlertDialog с 2 RadioButtons, одна для английского и другая для испанского. Когда пользователь нажимает на английский язык и подтверждает, что язык должен быть английским. Если они выбирают испанский, я хочу, чтобы это был испанский.NPE при попытке изменить локаль с помощью RadioButton Android

В настоящее время это мой код:

langBtn = (Button)findViewById(R.id.langBtn); 
      langBtn.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Toast.makeText(v.getContext(), "Change Language Button", Toast.LENGTH_SHORT).show(); 


        //Alert Dialog with 2 options English or Spanish. 
        AlertDialog.Builder alert = new AlertDialog.Builder(v.getContext()); 
        alert.setTitle("Language"); 
        alert.setMessage("Please select a language"); 

        View myView = getLayoutInflater().inflate(R.layout.language_check, null); 
        alert.setView(myView); 

        final RadioButton en = (RadioButton)v.findViewById(R.id.radioButton1); 
        final RadioButton es = (RadioButton)v.findViewById(R.id.radioButton2); 

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          if(en.isActivated()){ 
           //language change to english 
           Locale locale = new Locale("en"); 
           Locale.setDefault(locale); 
           Configuration config = new Configuration(); 
           config.locale = locale; 
           getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
           SectionsActivity.this.setContentView(R.layout.activity_sections); 
           Intent i = new Intent(getApplicationContext(), SectionsActivity.class); 
           startActivity(i); 
          }else{ 
           //language change to spanish 
           Locale locale = new Locale("es"); 
           Locale.setDefault(locale); 
           Configuration config = new Configuration(); 
           config.locale = locale; 
           getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
           SectionsActivity.this.setContentView(R.layout.activity_sections); 
           Intent i = new Intent(getApplicationContext(), SectionsActivity.class); 
           startActivity(i); 
          } 

         } 
        }); 

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          //Do Nothing 

         } 
        }); 

        alert.show(); 


       } 
      }); 

      return true; 
} 

Это мой трассировки стека:

05-15 01:28:27.334: E/AndroidRuntime(29846): FATAL EXCEPTION: main 
05-15 01:28:27.334: E/AndroidRuntime(29846): java.lang.NullPointerException 
05-15 01:28:27.334: E/AndroidRuntime(29846): at com.example.waitronproto9.SectionsActivity$11$1.onClick(SectionsActivity.java:264) 
05-15 01:28:27.334: E/AndroidRuntime(29846): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
05-15 01:28:27.334: E/AndroidRuntime(29846): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-15 01:28:27.334: E/AndroidRuntime(29846): at android.os.Looper.loop(Looper.java:137) 
05-15 01:28:27.334: E/AndroidRuntime(29846): at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-15 01:28:27.334: E/AndroidRuntime(29846): at java.lang.reflect.Method.invokeNative(Native Method) 
05-15 01:28:27.334: E/AndroidRuntime(29846): at java.lang.reflect.Method.invoke(Method.java:511) 
05-15 01:28:27.334: E/AndroidRuntime(29846): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 

Я был бы признателен за любую помощь, ребята. Благодарю.

+0

'SectionsActivity.java: 264' - Какая строка это? – Eran

+0

'\t \t \t \t \t \t \t \t, если (en.isActivated()) { ' – Javacadabra

ответ

0

В этом случае ваша проблема в том, что en - null. Возможно, ресурс, который вы используете для его инициализации, отсутствует или возвращает другой объект, чем вы ожидаете.

Попробуйте отладить и посмотреть, что - v.findViewById(R.id.radioButton1) возвращается.

Смежные вопросы