Я создаю список, который хранит и сохраняет значения как строку, используя общие настройки. Я хочу хранить время событий (некоторые события).Не удалось получить строки из SharedPreferences?
Мой код выглядит
package com.defcomdevs.invento16;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.Nullable;
import android.util.Log;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
/**
* Created by midhun on 18/11/15.
*/
public class SetTimings {
// context to hold the calling activity
static Context c;
String[] event_times;
// declare file name and mode of access
public static String MY_PREFS = "MY_PREFS";
private SharedPreferences mySharedPreferences = new SharedPreferences() {
@Override
public Map<String, ?> getAll() {
return null;
}
@Nullable
@Override
public String getString(String key, String defValue) {
return null;
}
@Nullable
@Override
public Set<String> getStringSet(String key, Set<String> defValues) {
return null;
}
@Override
public int getInt(String key, int defValue) {
return 0;
}
@Override
public long getLong(String key, long defValue) {
return 0;
}
@Override
public float getFloat(String key, float defValue) {
return 0;
}
@Override
public boolean getBoolean(String key, boolean defValue) {
return false;
}
@Override
public boolean contains(String key) {
return false;
}
@Override
public Editor edit() {
return null;
}
@Override
public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
}
@Override
public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
}
};
int prefMode = c.MODE_PRIVATE;
public static String[] eventslist = new String[50];
public SetTimings(Context context, String[] strings) {
int i = 0;
Log.d("Midhun", strings[1]);
this.c = context;
eventslist = c.getResources().getStringArray(R.array.Items);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.putString(eventslist[i++], strings[i++]);
editor.apply();
Log.d("Midhun", mySharedPreferences.getString(eventslist[2], "null"));
}
public String[] getTimings(Context c1) {
eventslist = c1.getResources().getStringArray(R.array.Items);
for (int i = 0; i < eventslist.length; i++) {
event_times[i] = String.valueOf(mySharedPreferences.getString(eventslist[i], ""));
}
return event_times;
}
}
я называю класс и конструктор вроде этого:
setTimings= new SetTimings(this,this.getResources().getStringArray(R.array.Items));
и доступ строки, как это:
String[] time= setTimings.getTimings(this);
Проблема Когда я запускаю свое приложение, он падает.
Log Report:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] com.defcomdevs.invento16.SetTimings.getTimings(android.content.Context)' on a null object reference
Это показывает, ошибка в getTimings()
методы, я попытался с некоторыми вопросами о SO но не работаю для меня.
Пожалуйста Выделите мой error.And любезно передаст solution.Thanks
Редактировать код, в котором я использовал setTimings
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=this;
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setLogo(R.mipmap.ic_launcher);
setSupportActionBar(toolbar);
getTheAccountName=new GetTheAccountName();
final Context context=this;
adapter = new MyAdapter(this, getdata());
recyclerView = (RecyclerView) findViewById(R.id.recycler);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
mcollapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
mcollapsingToolbar.setTitle("INVENTO '16");
mcollapsingToolbar.setExpandedTitleColor(getResources().getColor(R.color.transparent));
mcollapsingToolbar.setCollapsedTitleTextColor(getResources().getColor(R.color.white));
fab_menu_titlescreen= (FloatingActionMenu) findViewById(R.id.menu_item);
fab_map = (FloatingActionButton) findViewById(R.id.map);
fab_register = (FloatingActionButton) findViewById(R.id.register);
fab_reminder = (FloatingActionButton) findViewById(R.id.reminder);
fab_refresh = (FloatingActionButton) findViewById(R.id.refresh);
String userName=getTheAccountName.getUsername(context);
String userId=getTheAccountName.getuserId(context);
//username= (TextView) findViewById(R.id.userNameText);
//username.setText(userName);
userid= (TextView) findViewById(R.id.userNameText);
userid.setText(userId);
Log.d("Midhun", "before");
String[] t= this.getResources().getStringArray(R.array.time);
//pass the time parameters to the class
setTimings= new SetTimings(this,t); //used setTimings
Log.d("Midhun","after");
и здесь
public List<ListItems> getdata() {
List<ListItems> grid_data = new ArrayList<>();
int[] icons = {R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100, R.drawable.hackbttn100};
String[] texts = getResources().getStringArray(R.array.Items);
String[] time= setTimings(context);
Log.d("Midhun",time[1]);
for (int i = 0; i < icons.length && i < texts.length; i++) {
ListItems current = new ListItems();
current.iconId = icons[i];
current.IconName = texts[i];
current.ItemTime = time[i];
grid_data.add(current);
}
return grid_data;
}
«Это показывает, что ошибка находится в' getTimings() 'method" - Нет, ваша ошибка говорит о том, что 'setTimings' или какой-либо другой экземпляр класса SetTimings равен null. –
@MikeM. Я дал несколько операторов журнала внутри costructer. Но консоль не показывает эти утверждения. Кажется, что поток не достигает этого. Какая может быть причина. – Midhun0407
Не знаю. Вы не разместили достаточно кода, в котором вы создаете экземпляр и используете 'setTimings'. –