Android Studio无法在不使用Cast的情况下构建,但是应用程序与Cast崩溃

时间:2018-02-01 14:19:06

标签: android firebase firebase-realtime-database

我目前正在为Android构建一个从Firebase检索数据的应用。它显示来自其他孩子的孩子。当我删除演员表或应用程序与演员表崩溃时,它都无法构建。这是错误:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {app.name/app.name.retrieve}:java.lang.ClassCastException:android.widget.ListView无法强制转换为java.util.List

这是我的代码:

package app.name;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;
import java.util.List;

public class datab extends AppCompatActivity {
        private ArrayList<String> child = new ArrayList<>();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
        @Override
        protected void onStart() {
            super.onStart();
            setContentView(R.layout.activity_datab);
            DatabaseReference database = FirebaseDatabase.getInstance().getReference().child("child");
            final ListView view = findViewById(R.id.l);


            final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.list_content, (List) view);
//Here is the cast
            view.setAdapter(child);

            database.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    String value = dataSnapshot.getValue(String.class);
                    adapter.add(value);
                    adapter.notifyDataSetChanged();
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    }

如何在没有构建失败的情况下删除演员表?

2 个答案:

答案 0 :(得分:1)

改变这个:

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.list_content, (List) view);

到此:

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, child);
view.setAdapter(adapter);

onChildAdded(..){

中更改此内容
  adapter.add(value);

到此:

  child.add(value);

add()是ArrayList中的一个方法。

点击此处了解详情:https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

答案 1 :(得分:0)

您无法将ListView投射到ListArrayAdapter构造函数需要Context个实例以及resourceIdList或数组< / p>

您应该将列表传递给适配器,并将适配器设置为listview

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1 , child);
view.setAdapter(adapter)