簡體   English   中英

Android Studio 在沒有 Cast 的情況下無法構建,但應用程序在 Cast 時崩潰

[英]Android Studio Fails to Build Without Cast, But App Crashes With Cast

我目前正在為 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) {

                }
            });
        }
    }

如何在不構建失敗的情況下刪除演員表?

改變這個:

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

您不能將ListViewListArrayAdapter構造函數采用Context實例和resourceId以及List或數組

您應該將列表傳遞給您的適配器,並將適配器設置為列表視圖

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM