Я понимаю, что эта проблема была затронута много раз, но я ничего не пытаюсь работать для меня. Я все еще получаю ошибки при попытке доступа к SharedPreferences
.Ошибка getSharedPreferences в классе неактивности
Из основной деятельности (McsHome) Я запускаю различные диалоги, чтобы помочь пользователю добавить местоположение.
Первый Диалог ниже, это просто всплывает сообщение о том, местоположение должно быть добавлено (PopupMessage.java):
public class PopupMessage extends DialogFragment {
String message = "";
AddLocation addLocation;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
addLocation = new AddLocation();
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(message)
.setPositiveButton("Add Location", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
addLocation.show(getFragmentManager(), "PopupMsgFragment");
}
})
.setNegativeButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//
};
});
// Create the AlertDialog object and return it
return builder.create();
}
}
Это дает пользователю возможность добавить место, когда эта кнопка щелкают другое диалоговое окно всплывает (AddLocation.java):
public class AddLocation extends DialogFragment {
EditText mcsDomain;
EditText friendlyName;
EditText password;
ProcessLocation addLoc;
String message = "";
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View layout = inflater.inflate(R.layout.add_location_dialog, null); // Pass null as the parent view because its going in the dialog layout
mcsDomain = (EditText) layout.findViewById(R.id.mcsDomain);
friendlyName = (EditText) layout.findViewById(R.id.friendlyName);
password = (EditText) layout.findViewById(R.id.password);
builder.setView(layout)
.setTitle("Add/Update Location")
// Add action buttons
.setPositiveButton("Add/Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// Passes the chosen location parameters to the ProcessLocation class
addLoc.processLocation(mcsDomain.getText().toString(),friendlyName.getText().toString(),password.getText().toString());
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
AddLocation.java использует схему XML, которая включает в себя 3 EditText поля. Значения этих данных передаются третьему классу ProcessLocation.java, который включает в себя метод processLocation()
.
public class ProcessLocation {
SharedPreferences domainToName;
SharedPreferences nameToDomain;
public void processLocation(String domain, String name, String password) {
domainToName = getSharedPreferences("domainToName", MODE_PRIVATE);
nameToDomain = getSharedPreferences("nameToDomain", MODE_PRIVATE);
// final Editor domainEdit = domainToName.edit();
// final Editor nameEdit = nameToDomain.edit();
if (nameToDomain.contains(name)) {
System.out.println("Name Doesn't Exist");
}
}
}
Я получаю сообщение об ошибке на MODE_PRIVATE
, я считаю, связанной с контекстом. Я играю с контекстом часами без везения (или понимания). Я знаю, что я вывожу пару диалогов подряд. Если я добавлю «extends Activity», ошибка исчезнет, но затем приложение сработает при попытке getSharedPreferences
.
От просмотра других сообщений, я уверен, что это связано с передачей контекста из моей активности McSHome.java, но все, что я пробовал, потерпело неудачу.
Какая ошибка? – ToYonos
Вы попробовали this.MODE_PRIVATE или getActivity(). MODE_PRIVATE? – Lukos
Попробуйте Context.MODE_PRIVATE, капитал C и импортируйте файл android.content.Context; – zgc7009