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