我真的很难从数据库中收集数据。我正在使用实时数据库,我正在将这些值添加到一个可以单击的列表中。
当我单击列表上的用户时,我需要获取用户名值来创建聊天ID。这是我的问题,以获得键内的值。我现在的做法似乎行不通。
这是我的数据库
我需要取给“name”的值。
这是我的密码
package br.sosqueen.com.sosqueen;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Iterator;
public class UserMessageListFragment extends Fragment {
private ProgressDialog progressDialog;
private final String TAG = "UsersMessageLis";
private ArrayList<String> arrayList = new ArrayList<>();
private int totalUsers = 0;
private ListView usersList;
private TextView noUsersText;
public static UserMessageListFragment newInstance() {
return new UserMessageListFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_user_message_list, container, false);
usersList = view.findViewById(R.id.usersList);
noUsersText = view.findViewById(R.id.noUsersText);
progressDialog = new ProgressDialog(getContext());
progressDialog.setMessage("Carregando...");
progressDialog.show();
//String url = "https://sosqueen-6b80b.firebaseio.com/users.json";
String url = "https://sosqueen-6b80b.firebaseio.com/usuarios.json";
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
doOnSuccess(response);
}
}, new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error on trying to do request");
}
});
RequestQueue rQueue = Volley.newRequestQueue(getContext());
rQueue.add(request);
usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
UserDetails.chatWith = arrayList.get(position);
startActivity(new Intent(getContext(), Chat.class));
}
});
return view;
}
public void doOnSuccess(String response) {
try {
JSONObject object = new JSONObject(response);
Iterator iterator = object.keys();
String key = "";
while(iterator.hasNext()) {
key = iterator.next().toString();
if(! key.equals(UserDetails.username)) {
arrayList.add(key);
}
totalUsers++;
}
} catch (JSONException e) {
e.printStackTrace();
}
checkIfThereIsAnUser(totalUsers);
}
public void checkIfThereIsAnUser(int totalUsers) {
if(totalUsers <=1){
noUsersText.setVisibility(View.VISIBLE);
usersList.setVisibility(View.GONE);
}
else{
noUsersText.setVisibility(View.GONE);
usersList.setVisibility(View.VISIBLE);
usersList.setAdapter(new ArrayAdapter<>(getContext(), R.layout.my_list, arrayList));
}
progressDialog.dismiss();
}
}
您想创建一个ChildEventListener并将其附加到“users”分支。
当您第一次使用ChildEventListener
连接到分支时,OnChildAdded
将为每个返回子数据分支快照的子成员触发。
就个人而言,我会存储整个数据快照结果,并在列表中呈现它时,呈现snapshot.get值(“名称”)而不是分支Key。
否则,您将需要存储分支键和名称对,然后通过DatabaseRef OnValue查询查找额外的数据信息。
或者,您可以基于某些分支值(启用. indexon
属性)创建查询,例如“ciudad”和基于本地名称的过滤器。
我正在尝试获取我的用户名,并在应用程序打开时向他/她问好。但我无法根据某个用户的uid获取数据。当我运行应用程序时,祝酒词从未真正出现。 数据库结构 密码
我想从Firebase实时数据库中获取整个JSON数组。从实时数据库中提取数组并将其存储在自定义类的ArrayList中。
我正在寻找一种方法,以数组[]或字符串等格式从Firebase实时数据库获取数据。 我的数据库如下所示:链接到数据库的图像 或者:
我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(
我有一个带有此模式的数据库: 我测试了这段代码,但我无法从数据库中获得任何消息。我会感谢你的帮助。