尝试在空对象引用[重复]上调用接口方法'android.content.SharedPreferences $ Editor android.content.SharedPreferences.edit()'

问题描述 投票:-1回答:1
我一直在尝试创建一个应用程序,用户可以在其中设置语言并将其存储在共享首选项中。用户可以通过菜单进一步更改首选项。语言首选项将显示在文本视图中。

但是当我单击任何选项时,应用程序崩溃了。

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(); } }

java android nullreferenceexception
1个回答
0
投票
尝试一下。

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); }

© www.soinside.com 2019 - 2024. All rights reserved.