Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从SharedReferences获取字符串?_Java_Android_Sharedpreferences_Getstring - Fatal编程技术网

Java 无法从SharedReferences获取字符串?

Java 无法从SharedReferences获取字符串?,java,android,sharedpreferences,getstring,Java,Android,Sharedpreferences,Getstring,我正在创建一个列表,使用共享首选项将值存储并保持为字符串。我想存储事件(某些事件)的时间 我的代码看起来像 package com.defcomdevs.invento16; import android.content.Context; import android.content.SharedPreferences; import android.support.annotation.Nullable; import android.util.Log; import java.lang.r

我正在创建一个列表,使用共享首选项将值存储并保持为字符串。我想存储事件(某些事件)的时间

我的代码看起来像

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;
    }
}
在这里呢

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;
}
public List getdata(){
List grid_data=new ArrayList();
int[]图标={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[]text=getResources().getStringArray(R.array.Items);
字符串[]时间=设置计时(上下文);
Log.d(“Midhun”,时间[1]);
对于(int i=0;i
这与下面的行有关

editor.putString(eventslist[i++], strings[i++]);
在这里,你要做两次i++。 这意味着您没有引用正确的数组元素 结果是跑出了边界

您可能应该使用for循环来执行上述操作。
实际上,您可以将整个数组“保存”到SharedReferences

,因为它在getTimings()中抛出NullPointerException,所以您应该查找一个为null的对象,并调用它的方法。因此,候选人可能是:c1(上下文类型),事件列表我的共享偏好,,多亏了Mike M

问题

1.首先,我的适配器实例化中的getdata()是在实例化setTimings之前完成的,因此在该方法中为null

2.其次,我将字符串数组分配给未初始化的字符串数组
eventslist


3.正如William Ku所指出的那样,我曾两次使用i++,因此出现了越界。

“这表明错误在
getTimings()
方法中”-不,您的错误是说
setTimings
setTimings
类的其他实例为空。@MikeM。我在构造函数中给出了一些日志语句。但是控制台没有显示这些语句。似乎流没有到达那里。原因可能是什么。不知道。在实例化和使用
setTimings
@MikeM时,您没有发布足够的代码。我已经添加了相应的代码。在实例化
设置计时之前,您能找出适配器实例化中调用的
getdata()
有什么问题吗?因此在该方法中它是空的。谢谢,先生,我已经纠正了这个问题,但仍然由于相同的错误而崩溃
editor.putString(eventslist[i++], strings[i++]);