接收数据firebase错误 - android

时间:2018-02-02 19:37:47

标签: android firebase firebase-realtime-database

Error message

代码编译正常 - 问题是显示来自服务器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;
    }
}

1 个答案:

答案 0 :(得分:1)

对于数据库中的每个项目,您执行以下操作:

  ShowCliente show  = dataSnapshot.getValue(ShowCliente.class);
  myList.add(show);

这意味着您从JSON数据中解码ShowCliente,然后将其添加到ListView显示的列表中。 ListView尽职尽责地执行您要求它执行的操作:它会获取每个ShowCliente对象并显示它。

由于它不知道如何显示ShowCliente,因此会显示ShowCliente.toString(),默认显示对象的哈希码。

您有两种方法可以获得所需的行为:

  1. 覆盖toString()以返回您想要的内容。您可以通过向toString()添加ShowCliente实施来完成此操作:

    public String toString() {
      return razonsoc.toString();
    }
    
  2. 不要将ShowCliente添加到列表中,而只是添加要显示的值。为此,请在onChildAdded中更改添加到列表中的内容:

    myList.add(show.getRazonsoc());