【问题标题】:How to retrieve a part of the data from Firebase Android如何从 Firebase Android 检索部分数据
【发布时间】:2018-01-02 21:41:54
【问题描述】:

联系人片段

ListView usersList;
TextView noUsersText;
ArrayList<String> al = new ArrayList<>();
int totalUsers = 0;
ProgressDialog mProgressDialogue;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_contacts, container, false);

    usersList = (ListView)rootView.findViewById(R.id.usersList);
    noUsersText = (TextView)rootView.findViewById(R.id.noUsersText);

    mProgressDialogue = new ProgressDialog(getActivity());
    mProgressDialogue.setMessage("Loading...");
    mProgressDialogue.show();

    String url = "https://messageplus-cd647.firebaseio.com/Users.json";

    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
        @Override
        public void onResponse(String s) {
            doOnSuccess(s);
        }
    },new Response.ErrorListener(){
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            System.out.println("" + volleyError);
        }
    });

    RequestQueue rQueue = Volley.newRequestQueue(getActivity());
    rQueue.add(request);

    usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            UserDetails.chatWith = al.get(position);
            Intent intent = new Intent(getActivity(), Chat.class);
            startActivity(intent);
        }
    });
    return rootView;
}

doOnSuccess 方法

    public void doOnSuccess(String s){
    try {
        JSONObject obj = new JSONObject(s);

        Iterator i = obj.keys();
        String key = "";

        while(i.hasNext()){
            key = i.next().toString();

            if(!key.equals(UserDetails.phonenumber)) {
                al.add(key);
            }

            totalUsers++;
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    if(totalUsers <=1){
        noUsersText.setVisibility(View.VISIBLE);
        usersList.setVisibility(View.GONE);
    }
    else{
        noUsersText.setVisibility(View.GONE);
        usersList.setVisibility(View.VISIBLE);
        usersList.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(),
                android.R.layout.simple_list_item_1 , al));
    }

    mProgressDialogue.dismiss();
}

} 我的数据库结构 - http://ibb.co/eMGhWb 我只想显示用户名。我如何做到这一点。 使用当前代码,当我打开片段时,它只是说“正在加载......”并且没有加载任何东西......我是否必须对导出 json 文件或任何东西做任何事情?请帮助我还是个初学者

【问题讨论】:

    标签: android database firebase firebase-realtime-database fetch


    【解决方案1】:

    要查询 Firebase 数据库,您只需要创建一个 DatabaseReference,附加一个侦听器并像这样遍历 DataSnapshot 对象:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersRef = rootRef.child("Users");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ArrayList<String> arrayList = new ArrayList<>();
            ListView listView = (ListView) findViewById(R.id.list_view);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, arrayList);
    
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String name = ds.child("Name").getValue(String.class);
                arrayList.add(name);
            }
            listView.setAdapter(adapter);
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    usersRef.addListenerForSingleValueEvent(eventListener);
    

    输出只会是用户的名字。

    【讨论】:

    • 我可以获取在列表视图而不是日志中显示它的代码吗?
    • 无法解析构造函数 'ArrayAdapter(匿名 com.google.firebase.database.ValueEventListener, int, int, java.util.ArrayList)
    • this 更改为getApplicationContext()。请参阅我的更新答案。有效吗?
    • 虽然它是 getActivity...因为我正在使用片段...无论如何,非常感谢您与我交谈...干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    相关资源
    最近更新 更多