我目前正在构建一个用于从 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/