代码编译正常 - 问题是显示来自服务器firebase的数据
我只需要一般表中的一个表。
实施例
Firebase数据库:
CLIENTE --> NAME: <--- ONLY SHOW THIS DATA
TELEPHONE:
etc...
CODE:
MainClass Show List Viewer。
public class ShowClienteFragment extends Fragment {
ArrayList<ShowCliente> myList = new ArrayList<>();
ArrayList<ShowCliente> mKeys = new ArrayList<>();
private ListView newListView;
private DatabaseReference gDatabase;
public ShowClienteFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gDatabase = FirebaseDatabase.getInstance().getReference();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_show_cliente, container, false);
newListView = view.findViewById(R.id.lvCliente);
final ArrayAdapter<ShowCliente> arrayAdapter = new ArrayAdapter<>(getActivity(),android.R.layout.simple_list_item_1, myList);
newListView.setAdapter(arrayAdapter);
gDatabase.child("cliente").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ShowCliente show = dataSnapshot.getValue(ShowCliente.class);
myList.add(show);
//ShowCliente key = dataSnapshot.getKey();
//mKeys.add(key);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
// String data = dataSnapshot.getValue(String.class);
//String key = dataSnapshot.getKey();
// int index = mKeys.indexOf(key);
// arrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return view;
}
}
构造函数类
public class ShowCliente {
private String razonsoc;
public ShowCliente() {
}
public String getRazonsoc() {
return razonsoc;
}
public void setRazonsoc(String razonsoc) {
this.razonsoc = razonsoc;
}
}
答案 0 :(得分:1)
对于数据库中的每个项目,您执行以下操作:
ShowCliente show = dataSnapshot.getValue(ShowCliente.class);
myList.add(show);
这意味着您从JSON数据中解码ShowCliente
,然后将其添加到ListView
显示的列表中。 ListView
尽职尽责地执行您要求它执行的操作:它会获取每个ShowCliente
对象并显示它。
由于它不知道如何显示ShowCliente
,因此会显示ShowCliente.toString()
,默认显示对象的哈希码。
您有两种方法可以获得所需的行为:
覆盖toString()
以返回您想要的内容。您可以通过向toString()
添加ShowCliente
实施来完成此操作:
public String toString() {
return razonsoc.toString();
}
不要将ShowCliente
添加到列表中,而只是添加要显示的值。为此,请在onChildAdded
中更改添加到列表中的内容:
myList.add(show.getRazonsoc());