Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 RecyclerView-won';不显示来自json字符串的项_Java_Android_Android Recyclerview - Fatal编程技术网

Java RecyclerView-won';不显示来自json字符串的项

Java RecyclerView-won';不显示来自json字符串的项,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在创建一个购物列表,并希望通过Json字符串将其保存在firebase中。如果我从json字符串中检索ArrayList,它不会在我的Recyclerview中显示项目,但是如果我创建了一个包含项目的虚拟列表,它会显示项目。两个ArrayList看起来都一样,所以我认为适配器不是问题所在。我只是正确地学习了如何用C语言编程,并且一直在使用Android Studio的教程,所以可能我只是做了一些一般性的错误。 这是片段 public class EinkaufslisteFragment e

我正在创建一个购物列表,并希望通过Json字符串将其保存在firebase中。如果我从json字符串中检索ArrayList,它不会在我的Recyclerview中显示项目,但是如果我创建了一个包含项目的虚拟列表,它会显示项目。两个ArrayList看起来都一样,所以我认为适配器不是问题所在。我只是正确地学习了如何用C语言编程,并且一直在使用Android Studio的教程,所以可能我只是做了一些一般性的错误。 这是片段

public class EinkaufslisteFragment extends Fragment {


    public EinkaufslisteFragment() {
        // Required empty public constructor
    }
    private String userID;
    private FirebaseUser user;

    private View myFragmentView;

    private RecyclerView einkaufslisteView;
    private EinkaufslisteAdapter einkaufslisteAdapter;

    private ArrayList<ZutatClass> einkaufsliste;
    private String jsonEinkaufsliste;

    private DatabaseReference mDatabaseRefEinkaufsliste;

    private Spinner einheiten_spinner;
    private EditText editTextZutat;
    private EditText editTextAnzahl;
    private Button buttonAdd;

    private ArrayList<ZutatClass> dummyList;
    private ZutatClass zutat1;
    private ZutatClass zutat2;
    private ZutatClass zutat3;
    private ZutatClass zutat4;
    private ZutatClass zutat5;
    private ZutatClass zutat6;
    private ZutatClass zutat7;
    private ZutatClass zutat8;
    private ZutatClass zutat9;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        myFragmentView = inflater.inflate(R.layout.fragment_einkaufsliste, container, false);

        //User
        user = FirebaseAuth.getInstance().getCurrentUser();
        userID = user.getUid();

        mDatabaseRefEinkaufsliste = FirebaseDatabase.getInstance().getReference(userID + "/einkaufsliste");

        //Liste für Tests erstellen

        zutat1 = new ZutatClass("Zucker", "","EL");
        zutat2 = new ZutatClass("Mehl","500","g");
        zutat3 = new ZutatClass("Wasser","100","ml");
        zutat4 = new ZutatClass("Bananen","4","Stk");
        zutat5 = new ZutatClass("Salz","2","TL");
        zutat6 = new ZutatClass("Backpulver","1","Packung");
        zutat7 = new ZutatClass("Pfeffer","","Priese");
        zutat8 = new ZutatClass("hallo","10","g");
        zutat9 = new ZutatClass("mehr Zucker","20","g");

        dummyList = new ArrayList<ZutatClass>();
        einkaufsliste = new ArrayList<ZutatClass>();

        dummyList.add(zutat1);
        dummyList.add(zutat2);
        dummyList.add(zutat3);
        dummyList.add(zutat4);
        dummyList.add(zutat5);
        dummyList.add(zutat6);
        dummyList.add(zutat7);
        dummyList.add(zutat8);
        dummyList.add(zutat9);
        // dummyListe fertig



        einkaufsliste = new ArrayList<ZutatClass>();

        //Recyclerview
        einkaufslisteView = myFragmentView.findViewById(R.id.recyclerViewEinkaufsliste);
        einkaufslisteView.setHasFixedSize(true);
        einkaufslisteView.setLayoutManager(new LinearLayoutManager(getActivity()));
        einkaufslisteAdapter = new EinkaufslisteAdapter(getActivity(),dummyList);      //works
     // einkaufslisteAdapter = new EinkaufslisteAdapter(getActivity(),einkaufsliste);   // doesn't work...
        einkaufslisteView.setAdapter(einkaufslisteAdapter);



        //implementation
        editTextAnzahl = myFragmentView.findViewById(R.id.einkaufsliste_edittext_zutat);
        editTextZutat = myFragmentView.findViewById(R.id.einkaufsliste_edittext_anzahl);
        buttonAdd = myFragmentView.findViewById(R.id.einkaufsliste_button_add);






        //Spinner
        einheiten_spinner = (Spinner) myFragmentView.findViewById(R.id.einkaufsliste_spinner_einheiten2);

        ArrayAdapter adapter = new ArrayAdapter<String>(getActivity(),
                R.layout.spinner_text,getResources().getStringArray(R.array.einheiten));
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        einheiten_spinner.setAdapter(adapter);


        mDatabaseRefEinkaufsliste.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                einkaufsliste.clear();
                jsonEinkaufsliste = snapshot.getValue(String.class);
                loadEinkaufsliste();

                einkaufslisteAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

        //OnClick
        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //TODO und so
            }
        });
        // Inflate the layout for this fragment
        return myFragmentView;
    }

    private void loadEinkaufsliste() {
        if (jsonEinkaufsliste == null) {
            jsonEinkaufsliste = new String();
        } else {
            Gson gson = new Gson();
            Type type = new TypeToken<ArrayList<ZutatClass>>() {
            }.getType();
            einkaufsliste = gson.fromJson(jsonEinkaufsliste, type);
            if (einkaufsliste == null) {
                einkaufsliste = new ArrayList<>();
            }
        }
    }
公共类EinkaufsListFragment扩展了片段{
公共EinkaufslisteFragment(){
//必需的空公共构造函数
}
私有字符串用户标识;
私有FirebaseUser用户;
私有视图myFragmentView;
private RecyclerView EinkaufsListView;
专用eInkaufsListAdapter eInkaufsListAdapter;
私人ArrayList einkaufsliste;
私有字符串jsonEinkaufsliste;
私有数据库引用mdatabaserefeinkaufslite;
私人纺纱机einheiten_纺纱机;
私有EditText-editTextZutat;
私人编辑文本编辑ANZAHL;
私人按钮按钮;
私人ArrayList dummyList;
私人zutat1类;
私人ZutatClass zutat2;
私人zutat3级;
私人zutat4级;
私人zutat5级;
私人zutat6级;
私人zutat7级;
私人zutat8级;
私人zutat9级;
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
myFragmentView=充气机。充气(R.layout.fragment\u einkaufslite,容器,false);
//使用者
user=FirebaseAuth.getInstance().getCurrentUser();
userID=user.getUid();
mdatabaserefeinkaufslite=FirebaseDatabase.getInstance().getReference(userID+“/einkaufslite”);
//李斯特·弗尔·厄斯泰伦
zutat1=新的ZutatClass(“Zucker”、“EL”);
zutat2=新ZutatClass(“Mehl”、“500”、“g”);
zutat3=新ZutatClass(“Wasser”、“100”、“ml”);
zutat4=新ZutatClass(“巴纳南”、“4”、“Stk”);
zutat5=新ZutatClass(“Salz”、“2”、“TL”);
zutat6=新ZutatClass(“Backpulver”、“1”、“Packung”);
zutat7=新ZutatClass(“Pfeffer”、“Priese”);
zutat8=新ZutatClass(“你好”、“10”、“g”);
zutat9=新ZutatClass(“mehr Zucker”、“20”、“g”);
dummyList=newarraylist();
einkaufsliste=newarraylist();
添加(zutat1);
添加(zutat2);
添加(zutat3);
dummyList.add(zutat4);
dummyList.add(zutat5);
dummyList.add(zutat6);
dummyList.add(zutat7);
dummyList.add(zutat8);
dummyList.add(zutat9);
//杜米利斯特费尔蒂格酒店
einkaufsliste=newarraylist();
//回收视图
eInkaufsListView=myFragmentView.findViewById(R.id.RecycleWebInkaufsList);
eInkaufsListView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getActivity());
EinkaufsListAdapter=新的EinkaufsListAdapter(getActivity(),dummyList);//有效
//EinkaufsListAdapter=新的EinkaufsListAdapter(getActivity(),einkaufsliste);//不工作。。。
setAdapter(eInkaufsListAdapter);
//实施
editTextAnzahl=myFragmentView.findViewById(R.id.einkaufslite\u edittext\u zutat);
editTextZutat=myFragmentView.findViewById(R.id.einkaufslite\u edittext\u anzahl);
ButtonAd=myFragmentView.findViewById(R.id.einkaufslite\u button\u add);
//纺纱机
einheiten_微调器=(微调器)myFragmentView.findViewById(R.id.Einkaufslite_微调器_einheiten2);
ArrayAdapter=新的ArrayAdapter(getActivity(),
R.layout.spinner_text,getResources().getStringArray(R.array.einheiten));
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
einheiten_spinner.setAdapter(适配器);
mdatabaserefeinkaufslite.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
eInkaufslite.clear();
jsonEinkaufsliste=snapshot.getValue(String.class);
loadeInkaufslite();
eInkaufsListAdapter.notifyDataSetChanged();
}
@凌驾
已取消公共void(@NonNull DatabaseError){
Toast.makeText(getActivity(),error.getMessage(),Toast.LENGTH_SHORT).show();
}
});
//OnClick
ButtonAd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//待办事项
}
});
//为该碎片膨胀布局
返回myFragmentView;
}
私有void loadeInkaufslite(){
if(jsonEinkaufsliste==null){
jsonEinkaufsliste=新字符串();
}否则{
Gson Gson=新的Gson();
Type=newtypetoken


因此,我通过将我的“einkaufsliste”中的项目添加到dummyList中使其工作,现在它工作了。但我仍然不确定它为什么不工作

        mDatabaseRefEinkaufsliste.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                dummyList.clear();
                jsonEinkaufsliste = snapshot.getValue(String.class);
                loadEinkaufsliste();
                for(int n=0;n<=einkaufsliste.size()-1;n++){  // added this for loop
                    dummyList.add(einkaufsliste.get(n));
                }
                einkaufslisteAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
mdatabaserefeinkaufslite.addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
dummyList.clear();
jsonEinkaufsliste=snapshot.getValue(String.class);
loadeInkaufslite();
对于(int n=0;n
        mDatabaseRefEinkaufsliste.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                dummyList.clear();
                jsonEinkaufsliste = snapshot.getValue(String.class);
                loadEinkaufsliste();
                for(int n=0;n<=einkaufsliste.size()-1;n++){  // added this for loop
                    dummyList.add(einkaufsliste.get(n));
                }
                einkaufslisteAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });