2013-05-18 9 views
1

У меня есть кнопка сохранения, которая загружает диалоговый интерфейс с запросом на сохранение имени. Когда вы нажимаете кнопку «Готово», предполагается создать sharedpreferences с некоторыми строками в нем, но вместо этого он просто говорит, что, к сожалению, программа остановилась. Как я могу это исправить? О, и я просто хочу сказать, что я новичок в андроиде. Я изучаю все это, когда создаю приложение.Приложение продолжает останавливаться, когда я нажимаю кнопку

public void save(View view){ 

    LayoutInflater li = LayoutInflater.from(Calculate.this); 
    View pView = li.inflate(R.layout.prompt, null); 

    AlertDialog.Builder adb = new AlertDialog.Builder(Calculate.this); 
    adb.setView(pView); 

    final EditText name = (EditText) findViewById(R.id.etPrompt); 

    adb.setCancelable(false); 
    adb.setPositiveButton("Done", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      n = name.getText().toString(); 
      try { 
       details = getSharedPreferences(n,MODE_PRIVATE); 
       editor = details.edit(); 
       editor.putString("ebp", ebp.getText().toString()); 
       editor.putString("fb", fb.getText().toString()); 
       editor.putString("sv", sv.getText().toString()); 
       editor.putString("pv", pv.getText().toString()); 
       editor.putString("sl", sl.getText().toString()); 
       editor.putString("cl", cl.getText().toString()); 
       editor.commit(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 

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

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 

     } 
    }); 

    AlertDialog ad = adb.create(); 
    ad.show(); 


} 

Logcat

05-18 20:54:28.300: E/AndroidRuntime(16575): FATAL EXCEPTION: main 

05-18 20:54:28.300: E/AndroidRuntime(16575): java.lang.NullPointerException 

05-18 20:54:28.300: E/AndroidRuntime(16575): at     com.TBJsoft.enclosurecalculator.Calculate$1.onClick(Calculate.java:103) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at android.os.Handler.dispatchMessage(Handler.java:99) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at android.os.Looper.loop(Looper.java:137) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at android.app.ActivityThread.main(ActivityThread.java:5041) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at java.lang.reflect.Method.invokeNative(Native Method) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at java.lang.reflect.Method.invoke(Method.java:511) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 

05-18 20:54:28.300: E/AndroidRuntime(16575): at dalvik.system.NativeStart.main(Native Method) 

ответ

0

Вы должны использовать ваш Activities context, чтобы получить доступ к SharedPreferences внутри вашего AlertDialog. Таким образом, вы можете инициализировать их вне AlertDialog или изменить его на

details = Caluclate.this.getSharedPreferences(n,MODE_PRIVATE); // assuming that Calculate is the name of your `Activity` 

Если это не помогает, то пожалуйста, напишите LogCat поэтому мы знаем, где его грохот

Редактировать

Изменить

final EditText name = (EditText) findViewById(R.id.etPrompt); 

в

final EditText name = (EditText) pView.findViewById(R.id.etPrompt); 
+0

Эй, я попытался добавить Calcualte.this, и он не работал, но я отправил logcat. Я только опубликовал те, которые были красными. – ThatBoiJo

+0

Что находится на линии 103? – codeMagic

+0

Это ... n = name.getText(). ToString(); – ThatBoiJo

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