Android 致命异常:尝试调用接口方法';int java.util.List.size()';在空对象引用getItemCount上
我只是尝试使用recyclerview显示上传到Firebase存储的所有图像。每次我运行我的应用程序测试我的应用程序崩溃的所有内容时,当我检查Logcat时,它总是告诉我Android 致命异常:尝试调用接口方法';int java.util.List.size()';在空对象引用getItemCount上,android,firebase,android-recyclerview,firebase-storage,Android,Firebase,Android Recyclerview,Firebase Storage,我只是尝试使用recyclerview显示上传到Firebase存储的所有图像。每次我运行我的应用程序测试我的应用程序崩溃的所有内容时,当我检查Logcat时,它总是告诉我尝试在com.myapp.yoody.AdapterOne.getItemCount上的空对象引用上调用接口方法“int java.util.List.size()”。我只是想知道它所指的空对象是什么。是不是说它没有连接到firebase?或者是什么?几天来,我一直在努力让这件事运作起来,但我什么都没有。请帮帮我。我希望我的问
尝试在com.myapp.yoody.AdapterOne.getItemCount上的空对象引用上调用接口方法“int java.util.List.size()”。我只是想知道它所指的空对象是什么。是不是说它没有连接到firebase?或者是什么?几天来,我一直在努力让这件事运作起来,但我什么都没有。请帮帮我。我希望我的问题听起来不会令人困惑。下面是我的代码。提前谢谢
//Profilepage (The page where the images are supposed to display)
FirebaseAuth firebaseAuth;
FirebaseUser firebaseUser;
TextView name;
DatabaseReference databaseReference;
StorageReference storageReference;
private Context mccontext=ProfileActivity.this;
RecyclerView recyclerView;
AdapterOne adapter1;
String uid;
// Folder path for Firebase Storage.
ImageView imageView;
//List<ImageUploadInfo> list=new ArrayList<>();
ArrayList<ImageUploadInfo> imagesList;
// Folder path for Firebase Storage.
String Storage_Path = "Images/";
// Root Database Name for Firebase Database.
public static final String Database_Path = "Images";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
recyclerView=findViewById(R.id.recyclerView);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setHasFixedSize(true);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
overridePendingTransition(R.anim.slide_right, R.anim.slide_left);
adapter1=new AdapterOne(mccontext,imagesList);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter1);
imagesList=new ArrayList<>();
adapter1.notifyDataSetChanged();
//databaseReference=FirebaseDatabase.getInstance().getReference("Users");
uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
// Assign FirebaseStorage instance to storageReference.
storageReference = FirebaseStorage.getInstance().getReference();
// Assign FirebaseDatabase instance with root database name.
databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);
// Adding Add Value Event Listener to databaseReference.
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren() ){
ImageUploadInfo imageUploadInfo=postSnapshot.getValue(ImageUploadInfo.class);
imagesList.add(imageUploadInfo);
}
adapter1 = new AdapterOne(getApplicationContext(), imagesList);
recyclerView.setAdapter(adapter1);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
//My Adapter class
public class AdapterOne extends RecyclerView.Adapter<AdapterOne.ViewHolder> {
Context context;
List<ImageUploadInfo> imagesList;
public AdapterOne(Context c, List<ImageUploadInfo> TempList) {
imagesList = TempList;
context = c;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ImageUploadInfo imageUploadInfo = imagesList.get(position);
Glide.with(context).load(imageUploadInfo.getImageUrl()).into(holder.imageView);
}
@Override
public int getItemCount() {
return imagesList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView=(ImageView) itemView.findViewById(R.id.imageview);
}
}
}
//UploadInfo class
public class ImageUploadInfo {
// public String imageName;
public String imageURL;
public ImageUploadInfo() {} // default constructor that takes no arguments
public ImageUploadInfo( String url) {
this.imageURL= url;
}
public String getImageUrl() {
return imageURL;
}
public void setImageURL(String imageURL) {
this.imageURL = imageURL;
}
}
//CardView class
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
android:orientation="vertical"
>
<GridLayout
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_marginTop="0dp"
android:alignmentMode="alignMargins"
android:columnCount="1"
android:paddingTop="20dp"
android:columnOrderPreserved="false"
android:rowCount="3">
<!-- 3 -->
<!-- 4 -->
<androidx.cardview.widget.CardView
android:layout_width="350dp"
android:layout_height="320dp"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
android:layout_marginLeft="6dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="10dp"
app:cardCornerRadius="0dp"
app:cardElevation="0dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:id="@+id/imageview"
/>
<!--
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/imagename"
android:text="Image Name"
/>
-->
</androidx.cardview.widget.CardView>
</GridLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
//Profilepage(图像应该显示的页面)
FirebaseAuth FirebaseAuth;
FirebaseUser FirebaseUser;
文本视图名称;
数据库参考数据库参考;
StorageReference-StorageReference;
私有上下文mccontext=ProfileActivity.this;
回收视图回收视图;
适配器1;
字符串uid;
//Firebase存储的文件夹路径。
图像视图图像视图;
//列表=新的ArrayList();
ArrayList图像列表;
//Firebase存储的文件夹路径。
字符串存储_Path=“Images/”;
//Firebase数据库的根数据库名称。
公共静态最终字符串数据库\u Path=“Images”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
recyclerView=findViewById(R.id.recyclerView);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(此);
recyclerView.setHasFixedSize(true);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u NOSENSOR);
覆盖转换(右动画幻灯片,左动画幻灯片);
adapter1=新适配器(mccontext、imagesList);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(适配器1);
imagesList=newarraylist();
adapter1.notifyDataSetChanged();
//databaseReference=FirebaseDatabase.getInstance().getReference(“用户”);
uid=FirebaseAuth.getInstance().getCurrentUser().getUid();
//将FirebaseStorage实例分配给storageReference。
storageReference=FirebaseStorage.getInstance().getReference();
//使用根数据库名称分配FirebaseDatabase实例。
databaseReference=FirebaseDatabase.getInstance().getReference(数据库路径);
//将增值事件侦听器添加到databaseReference。
databaseReference.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot postSnapshot:DataSnapshot.getChildren()){
ImageUploadInfo ImageUploadInfo=postSnapshot.getValue(ImageUploadInfo.class);
imagesList.add(imageUploadInfo);
}
adapter1=新适配器(getApplicationContext(),imagesList);
recyclerView.setAdapter(适配器1);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
}
//我的适配器类
公共类AdapterOne扩展了RecyclerView.Adapter问题是,在将列表发送到适配器后,您需要初始化列表。所以适配器试图在不存在的列表上执行其方法。在将其发送到适配器之前移动初始通道
请发布数据库结构在将其传递给适配器之前是否尝试初始化imagesList
?adapter1=newadapterOne(getApplicationContext(),imagesList)代码>只需调试这一行并检查imageList
是否不为空。@Ashish我刚刚发布了我的数据库structure@MohamedMohsin我想我确实明白了。很抱歉我回复晚了。我确实修复了,但我的图像仍然无法显示