Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.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 为什么SharedReference不在这里保存?_Java_Android_Sharedpreferences - Fatal编程技术网

Java 为什么SharedReference不在这里保存?

Java 为什么SharedReference不在这里保存?,java,android,sharedpreferences,Java,Android,Sharedpreferences,我试图在SharedReferences中设置一些字符串,但当我重新启动应用程序时,首选项为空,因此在getString方法中返回“null” public class settingsView extends Fragment { DataSnapshot citiesSnap; Spinner theaterSpinner, citySpinner; String selectedCity, selectedTheater; String[] cities

我试图在SharedReferences中设置一些字符串,但当我重新启动应用程序时,首选项为空,因此在getString方法中返回“null”

public class settingsView extends Fragment {

    DataSnapshot citiesSnap;
    Spinner theaterSpinner, citySpinner;
    String selectedCity, selectedTheater;
    String[] cities = {"Bagalkot", "Belgaum", "Bellary", "Bijapur", "Chitradurga", "Davanagere", "Dharwad", "Gadag", "Hassan", "Hosapete", "Hospet", "Hubli", "Mysore", "Shimoga", "Tumkur"};
    List<String>theaters ;

    public settingsView() {
        Log.d("testing" , "settingsview constructor called");
        citiesSnap = null;
        theaterSpinner = null;
        citySpinner = null;
        selectedCity = null;
        selectedTheater = null;
        theaters = null ;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d("testing", "Called onActivityCreated");
        citySpinner = (Spinner) getActivity().findViewById(R.id.citySpinner);
        theaterSpinner = (Spinner) getActivity().findViewById(R.id.theaterSpinner);


        final SharedPreferences mSettings = this.getActivity().getPreferences(Context.MODE_PRIVATE);
        selectedCity = mSettings.getString("selectedCity", "null" );
        selectedTheater = mSettings.getString("selectedTheater", "null");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_selectable_list_item, cities);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        citySpinner.setAdapter(adapter);

        updateTheatersSpinner(selectedCity);

        if(theaters!=null)
            theaterSpinner.setSelection(theaters.indexOf(selectedTheater));


        FirebaseDatabase.getInstance().getReference("movies/karnataka").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                citiesSnap = dataSnapshot;
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


        citySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
            @Override
            public void onItemSelected(Spinner parent, View view, int position, long id) {
                updateTheatersSpinner(citySpinner.getSelectedItem().toString());
                mSettings.edit().putString("selectedCity" , citySpinner.getSelectedItem().toString()).commit();
            }
        });

        theaterSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
            @Override
            public void onItemSelected(Spinner parent, View view, int position, long id) {
                mSettings.edit().putString("selectedTheater" , theaterSpinner.getSelectedItem().toString()).commit() ;
            }
        });
    }


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.settingsview, container, false);
        return view;
    }


    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        Log.d("testing" , "On save instancestate") ;
        super.onSaveInstanceState(outState);

        SharedPreferences preferences = this.getActivity().getPreferences(Context.MODE_PRIVATE);
        preferences.edit().putString("selectedCity", selectedCity).putString("selectedTheater", theaterSpinner.getSelectedItem().toString()).commit();
    }


    public void updateTheatersSpinner(String city) {

        if (citiesSnap != null) {
            ArrayList<String> theaterlist = new ArrayList<>();

            for (DataSnapshot snapshot : citiesSnap.child(city).getChildren()) {
                theaterlist.add(snapshot.getKey());
            }

            this.theaters =  theaterlist ;

            Log.d("firebasedata", "theaterlist : " + theaterlist.toString());

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_selectable_list_item, theaterlist);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            this.theaterSpinner.setAdapter(adapter);
        }
    }
}
公共类设置视图扩展了片段{
DataSnapshot citiesSnap;
旋转器剧院旋转器,城市旋转器;
字符串selectedCity,SelectedThewer;
字符串[]城市={“巴加尔科特”、“贝尔高姆”、“贝拉里”、“比贾普尔”、“奇特拉杜加”、“达瓦盖尔”、“达瓦德”、“加达格”、“哈桑”、“霍萨佩特”、“霍斯佩特”、“胡比”、“迈索尔”、“希莫加”、“图姆库尔”};
剧院;
公共设置视图(){
d(“测试”、“设置视图构造函数调用”);
citiesSnap=null;
theaterSpinner=null;
citySpinner=null;
selectedCity=null;
SelectedThewer=null;
剧院=空;
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
Log.d(“测试”,“称为onActivityCreated”);
citySpinner=(微调器)getActivity().findViewById(R.id.citySpinner);
theaterSpinner=(Spinner)getActivity().findViewById(R.id.theaterSpinner);
最终SharedReferences mSettings=this.getActivity().getPreferences(Context.MODE\u PRIVATE);
selectedCity=mSettings.getString(“selectedCity”、“null”);
selectedthewer=mSettings.getString(“selectedthewer”、“null”);
ArrayAdapter=新的ArrayAdapter(getActivity().getApplicationContext(),android.R.layout.simple\u可选\u列表\u项,城市);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
citySpinner.setAdapter(适配器);
更新aterspinner(selectedCity);
如果(剧院!=null)
剧院微调器.setSelection(剧院.indexOf(SelectedThewer));
FirebaseDatabase.getInstance().getReference(“电影/卡纳塔克邦”).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
citiesSnap=dataSnapshot;
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
citySpinner.setOnItemSelectedListener(新微调器.OnItemSelectedListener(){
@凌驾
已选择公共空间(微调器父对象、视图、整型位置、长id){
更新aterspinner(citySpinner.getSelectedItem().toString());
mSettings.edit().putString(“selectedCity”,citySpinner.getSelectedItem().toString()).commit();
}
});
theaterSpinner.setOnItemSelectedListener(新建Spinner.OnItemSelectedListener()){
@凌驾
已选择公共空间(微调器父对象、视图、整型位置、长id){
mSettings.edit().putString(“selectedthewer”,theaterSpinner.getSelectedItem().toString()).commit();
}
});
}
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.Settings视图,容器,错误);
返回视图;
}
@凌驾
SAVEInstanceState上的公共无效(@NonNull Bundle outState){
Log.d(“测试”、“保存实例状态”);
super.onSaveInstanceState(超出状态);
SharedReferences preferences=this.getActivity().getPreferences(Context.MODE\u PRIVATE);
preferences.edit().putString(“selectedCity”,selectedCity).putString(“selectedthewer”,theaterSpinner.getSelectedItem().toString()).commit();
}
public void updateTheaterspinner(字符串城市){
如果(citiesSnap!=null){
ArrayList theaterlist=新的ArrayList();
for(DataSnapshot快照:citiesSnap.child(city.getChildren()){
添加(snapshot.getKey());
}
this.theaters=剧院列表;
Log.d(“firebasedata”,“theaterlist:+theaterlist.toString());
ArrayAdapter=新的ArrayAdapter(getActivity().getApplicationContext(),android.R.layout.simple\u可选\u列表\u项,theaterlist);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
this.theaterSpinner.setAdapter(适配器);
}
}
}

您有类字段
selectedCity
SelectedThewer
,您从不更新它们,因此它们总是
null
,但是在
onSaveInstanceState
中保存这些字段,因此当您的活动关闭时,它会将
null
写入
共享引用中的两个字段。spnner更改时,您应该更新这些字段

    citySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
        @Override
        public void onItemSelected(Spinner parent, View view, int position, long id) {
            selectedCity = citySpinner.getSelectedItem().toString(); // <--
            updateTheatersSpinner(selectedCity);
            mSettings.edit().putString("selectedCity", selectedCity).commit();
        }
    });

    theaterSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
        @Override
        public void onItemSelected(Spinner parent, View view, int position, long id) {
            selectedTheater = theaterSpinner.getSelectedItem().toString(); // <--
            mSettings.edit().putString("selectedTheater", selectedTheater).commit();
        }
    });

是否尝试使用GetDefaultSharedReferences()?保存所选城市时使用了错误的微调器(剧院)。
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    Log.d("testing" , "On save instancestate") ;
    super.onSaveInstanceState(outState);

    SharedPreferences preferences = this.getActivity().getPreferences(Context.MODE_PRIVATE);
    preferences.edit()
        .putString("selectedCity", selectedCity)
        .putString("selectedTheater", selectedTheater)
    .commit();
}