【问题标题】:Unable to retrieve data from firebase databse in 2 activities无法在 2 个活动中从 Firebase 数据库中检索数据
【发布时间】:2019-10-26 02:30:12
【问题描述】:

这是 JSON:

{

  "users" : {
    "QTJ1xqpKP5TojSUnbvJkYl6XOWI2" : {
      "Collection" : {
        "-LrOoIXnTA5OgItNyq7x" : {
          "movie" : "x",
          "Name" : "xxxxxx",
          "id" : "-LrOoIXnTA5OgItNyq7x"
        },
        "-LrOp480npJrLLvuJPIE" : {
          "movie" : "xsss",
          "Name" : "yyy",
          "id" : "-LrOp480npJrLLvuJPIE"
        }
      },
      "contributionCounter" : 0,
      "id" : "-LrOoFF3paOUttLnriwU",
      "inventoryCounter" : 0,
      "password" : "123456",
      "reqCollection" : {
        "-LrP3gCtIM7UDhaDuA5U" : {
          "movie" : "y",
          "Name" : "xReq",
          "id" : "-LrP3gCtIM7UDhaDuA5U"
        }
      },
      "requestCounter" : 0,
      "username" : "x"
    }
  }
}

我正在尝试获取 MainActivity.java 中的 child_1 数据和 RequesList.java 中的 child_2 数据。问题是,安装应用程序后,我能够在所需活动中检索 child_2 数据,但它没有在我的主要活动中显示 child_1 的数据。同样,在重新启动应用程序后,每次它都会在主要活动中显示 child_1 数据(这是必需的),但它不再显示 child_2 数据。

这是我的 MainActivity.java

公共类 MainActivity 扩展 AppCompatActivity {

FirebaseAuth mAuth;
FirebaseRecyclerAdapter  firebaseRecyclerAdapter;
private FirebaseDatabase mFirebasedatabase;


private DatabaseReference myRef;

private RecyclerView rv;

public  void  add(View view)
{
    Intent i = new Intent(getApplicationContext(), Add.class);
    startActivity(i);
}

public void reqSearch(View view)
{
    Intent i = new Intent(getApplicationContext(), Requestt.class);
    startActivity(i);

}

private void firebaseCollectionSearch() {

    Toast.makeText(this, "clicked", Toast.LENGTH_SHORT).show();
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
   Query searchQuery ;
   searchQuery=myRef.child(user.getUid()).child("Collection").orderByChild("Name");

    FirebaseRecyclerOptions<Collection> options =
            new FirebaseRecyclerOptions.Builder<Collection>()
                    .setQuery(searchQuery, Collection.class)
                    .build();

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter(

            options
    ) {
        @Override
        protected void onBindViewHolder(@NonNull CollectionViewHolder holder, final int position, @NonNull final Collection model) {

            holder.setDetails(model.getName(),model.getRName());

            Log.i("request: ",model.getRName());

            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(MainActivity.this, model.getId(), Toast.LENGTH_SHORT).show();




                }
            });

        }

        @NonNull
        @Override
        public RequestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.collection_list, parent, false);

            return new CollectionViewHolder(view);


        }


    };

    rv.setAdapter(firebaseRecyclerAdapter);
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mFirebasedatabase = FirebaseDatabase.getInstance();
    myRef = mFirebasedatabase.getReference("users");
    mAuth = FirebaseAuth.getInstance();
    rv = (RecyclerView)findViewById(R.id.CollectionListRecyclerView);
    rv.setHasFixedSize(true);
    rv.setLayoutManager(new LinearLayoutManager(this));

    firebaseCollectionSearch();



    ImageButton img = (ImageButton)findViewById(R.id.profile);
    img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

           // Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_LONG).show();
            Intent i = new Intent(getApplicationContext(), ProfileActivity.class);
            startActivity(i);

        }
    });



   // BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.bottomnavigation);
    //navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);



}

public static class CollectionViewHolder extends RecyclerView.ViewHolder{

    View mView;
    public CollectionViewHolder(@NonNull View itemView) {
        super(itemView);

        mView = itemView;
    }

    public void setDetails(String name, String rName)
    {
        TextView s_name = (TextView)mView.findViewById(R.id.SNameSingle);
        TextView r_name = (TextView)mView.findViewById(R.id.RNameSingle);


        s_name.setText(name);
        r_name.setText(rName);


    }




}

@Override
protected void onStart() {
    super.onStart();
    firebaseRecyclerAdapter.startListening();


    if (mAuth.getCurrentUser() == null) {
        finish();
        startActivity(new Intent(this, LoginActivity.class));
    }




}

@Override
protected void onStop() {
    super.onStop();
    firebaseRecyclerAdapter.stopListening();
}

}

这是我的 RequestList.java

public class RequestList extends AppCompatActivity {

FirebaseAuth mAuth;
FirebaseRecyclerAdapter firebaseRecyclerAdapter;
private FirebaseDatabase mFirebasedatabase;
private DatabaseReference myRef;
FirebaseUser user;

private RecyclerView rv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_request_list);

    mFirebasedatabase = FirebaseDatabase.getInstance();
    myRef = mFirebasedatabase.getReference("users");
    myRef.keepSynced(true);
    mAuth = FirebaseAuth.getInstance();
    user = FirebaseAuth.getInstance().getCurrentUser();
    rv = (RecyclerView)findViewById(R.id.reqListRecyclerView);
    rv.setHasFixedSize(true);
    rv.setLayoutManager(new LinearLayoutManager(this));

    firebaseRequestSearch();


}

private void firebaseRequestSearch() {


    Query searchQuery =myRef.child(user.getUid()).child("reqCollection");


    FirebaseRecyclerOptions<Requests> options =
            new FirebaseRecyclerOptions.Builder<Requests>()
                    .setQuery(searchQuery, Requests.class)
                    .build();

    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Requests,RequestListViewHolder>(

            options
    ) {
        @Override
        protected void onBindViewHolder(@NonNull RequestList.RequestListViewHolder holder, final int position, @NonNull final Requests model) {

            holder.setDetails(model.getName(),model.getRName());

            Log.i("req: ",model.getRName());


            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(RequestList.this, model.getId(), Toast.LENGTH_SHORT).show();




                }
            });

        }

        @NonNull
        @Override
        public RequestList.RequestListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.req_list_layout, parent, false);

            return new RequestList.RequestListViewHolder(view);


        }


    };

    rv.setAdapter(firebaseRecyclerAdapter);

}

public static class RequestListViewHolder extends RecyclerView.ViewHolder {

    View mView;

    public RequestListViewHolder(@NonNull View itemView) {
        super(itemView);

        mView = itemView;
    }

    public void setDetails(String name, String rName)
    {
        TextView s_name = (TextView)mView.findViewById(R.id.reqNameSingle);
        TextView r_name = (TextView)mView.findViewById(R.id.reqRNameSingle);


        s_name.setText(name);
        r_name.setText(rName);

    }



}

@Override
protected void onStart() {
    super.onStart();
   firebaseRecyclerAdapter.startListening();


    if (mAuth.getCurrentUser() == null) {
        finish();
        startActivity(new Intent(this, LoginActivity.class));
    }


}

@Override
protected void onStop() {
    super.onStop();
    firebaseRecyclerAdapter.stopListening();
}

}

【问题讨论】:

  • 请不要描述您的数据库的外观,而是将您的数据库结构添加为 JSON 文件或至少作为屏幕截图。
  • 您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。
  • 添加了 JSON。对不起,我之前没有添加它。

标签: android database firebase-realtime-database android-recyclerview backend


【解决方案1】:

你没有在你的MainActivity初始化myRefsearchQuery初始化之前添加这些行

mFirebasedatabase = FirebaseDatabase.getInstance();
myRef = mFirebasedatabase.getReference("users");
Query searchQuery;
searchQuery=myRef.child(user.getUid()).child("Collection").orderByChild("Name");

希望它能解决问题。

【讨论】:

  • 感谢您的回复,但它并没有解决我的问题。
猜你喜欢
  • 2018-07-09
  • 1970-01-01
  • 2018-09-04
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2019-11-28
相关资源
最近更新 更多