java - Android Studio 无法在没有 Cast 的情况下构建,但应用程序会因 Cast 而崩溃

标签 java android firebase firebase-realtime-database

我目前正在构建一个用于从 Firebase 检索数据的 Android 应用。它显示来自其他 child 的 child 。当我删除 Actor 时它无法构建,或者应用程序因 Actor 而崩溃。这是错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{app.name/app.name.retrieve}: java.lang.ClassCastException: android.widget.ListView cannot be cast to 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) {

                }
            });
        }
    }

如何在构建失败的情况下移除强制转换?

最佳答案

改变这个:

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

关于java - Android Studio 无法在没有 Cast 的情况下构建,但应用程序会因 Cast 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48564892/

相关文章:

android - 如何在Android中使多个元素水平填充屏幕

java - Unity Android 构建错误 WIN32 异常 ZipAlign

ios - 在 Firebase 中更改存储元数据中的值

swift - Firebase 无法导入桥接头

java - Java 中的字符串构建性能

java - 从 Java 调用 MySQL 查询 - 配置 "WHERE"参数

android - 使用 viewpager 和抽屉导航从左向右滑动

java.lang.String android.net.Uri.toString() 在空对象引用上,LogCat 在第 202 行显示此错误

java - java中的音频噪声去除

java - 为什么优先级队列中的键应该是不可变的?