但是当我单击任何选项时,应用程序崩溃了。
Logcat:-
Process: com.example.alertdemo, PID: 6678
java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference
at com.example.alertdemo.MainActivity.setLanguage(MainActivity.java:24)
at com.example.alertdemo.MainActivity$2.onClick(MainActivity.java:64)
at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6715)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
这里是代码:
package com.example.alertdemo; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { SharedPreferences sharedPreferences; public void setLanguage(String language){ sharedPreferences.edit().putString("language", language).apply(); TextView textView = (TextView) findViewById(R.id.textView1); textView.setText(language); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.main_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){ case R.id.English: setLanguage("English"); return true; case R.id.Spanish: setLanguage("Spanish"); return true; default: return false; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.getSharedPreferences("com.example.alertdemo", Context.MODE_PRIVATE); new AlertDialog.Builder(this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("Choose Language") .setMessage("Choose your Language") .setPositiveButton("English", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setLanguage("English"); } }) .setNegativeButton("Spanish", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setLanguage("Spanish"); } }).show(); } }
public void setLanguage(String language)
{
SharedPreferences sharedPreferences = getSharedPreferences("name", Context.MODE_PRIVATE);
sharedPreferences.edit().putString("language", language).apply();
TextView textView = (TextView) findViewById(R.id.textView1);
textView.setText(language);
}