问题描述
所以在管理应用程序中,我想添加功能以从 firebase 数据库和存储中删除图像(图库) 所以我为此做了一个布局并设置了功能,但对于布局管理器,我收到了运行时错误
这里是日志
java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setLayoutManager(androidx.recyclerview.widget.RecyclerView$LayoutManager)' on a null object reference
at com.jkstudio.collageadmin.gallery.gallery_list$3.onDataChange(gallery_list.java:129)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7590)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
图库适配器 包 com.jkstudio.collageadmin.gallery;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.jkstudio.collageadmin.FullImageView;
import com.jkstudio.collageadmin.R;
import java.util.List;
public class galleryAdapter extends RecyclerView.Adapter<galleryAdapter.galleryViewAdapter>
{
private Context context;
private List<galleryData> list;
private DatabaseReference Drefrance,DRef;
private StorageReference Srafrance,SRef;
public galleryAdapter(Context context,List<galleryData> list)
{
this.context = context;
this.list = list;
}
@Override
public galleryViewAdapter onCreateViewHolder(@NonNull ViewGroup parent,int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.gallrey_imageitem_layout,parent,false);
return new galleryViewAdapter(view);
}
@Override
public void onBindViewHolder(@NonNull galleryViewAdapter holder,int position)
{
try {
Glide.with(context).load(list.get(position)).into(holder.gallery_imageView);
holder.gallery_imageView.setonClickListener(v ->
{
Intent intent = new Intent(context,FullImageView.class);
intent.putExtra("imageurl_pass",list.get(position).getDurl());
context.startActivity(intent);
});
} catch (Exception e) {
e.printstacktrace();
}
holder.deletebtn.setonClickListener(v ->
{
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setMessage("delete this Image ?");
dialog.setCancelable(true);
dialog.setPositiveButton("confirm",(dialog1,which) ->
{
Srafrance = FirebaseStorage.getInstance().getReference().child("gallery");
SRef=Srafrance.child(list.get(position).getSfilename());
SRef.delete().addOnSuccessListener(unused ->
{
Toast.makeText(context,"image delete-cloud",Toast.LENGTH_SHORT).show();
}).addOnFailureListener(e ->
{
Toast.makeText(context,"image delete-cloud Failed",Toast.LENGTH_SHORT).show();
}) ;
Drefrance = FirebaseDatabase.getInstance().getReference().child("gallery");
DRef = Drefrance.child(list.get(position).getCategory());
DRef.removeValue()
.addOnCompleteListener(task ->
{
Toast.makeText(context,"Deleted",Toast.LENGTH_SHORT).show();
}).addOnFailureListener(e ->
{
Toast.makeText(context,"SEOmeting went wrong -Srefrance-DN",Toast.LENGTH_SHORT).show();
});
try {
notifyItemRemoved(position);
} catch (Exception e) {
e.printstacktrace();
}
});
dialog.setNegativeButton("Cancle",(Idialog,which) ->
{
Idialog.cancel();
});
AlertDialog Adialog = null;
try {
Adialog = dialog.create();
} catch (Exception e) {
e.printstacktrace();
}
if(dialog != null)
{
dialog.show();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class galleryViewAdapter extends RecyclerView.ViewHolder
{
ImageView gallery_imageView;
Button deletebtn;
public galleryViewAdapter(@NonNull View itemView)
{
super(itemView);
gallery_imageView = itemView.findViewById(R.id.gallery_imageView);
deletebtn = itemView.findViewById(R.id.gallery_delete_btn);
}
}
}
回收者视图所在的gallery_list
package com.jkstudio.collageadmin.gallery;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
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 com.google.firebase.database.ValueEventListener;
import com.jkstudio.collageadmin.R;
import java.util.ArrayList;
public class gallery_list extends AppCompatActivity {
RecyclerView gallery_recyclerview1;
RecyclerView gallery_recyclerview2;
RecyclerView gallery_recyclerview3;
RecyclerView gallery_recyclerview4;
RecyclerView gallery_recyclerview5;
galleryAdapter adapter;
private DatabaseReference Drefrance,DbRef;
ArrayList<galleryData> list;
@Override
protected void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Drefrance = FirebaseDatabase.getInstance().getReference().child("gallery");
gallery_recyclerview1 = findViewById(R.id.gallery_recyclerview1);
gallery_recyclerview2 = findViewById(R.id.gallery_recyclerview2);
gallery_recyclerview3 = findViewById(R.id.gallery_recyclerview3);
gallery_recyclerview4 = findViewById(R.id.gallery_recyclerview4);
gallery_recyclerview5 = findViewById(R.id.gallery_recyclerview5);
getCategory1();
getCategory2();
getCategory3();
getCategory4();
getCategory5();
}
private void getCategory1()
{
Drefrance.child("placement").addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
{
for (DataSnapshot Dsnapshot : snapshot.getChildren())
{
galleryData data = Dsnapshot.getValue(galleryData.class);
list.add(data);
}
adapter = new galleryAdapter(gallery_list.this,list);
gallery_recyclerview1.setLayoutManager(new GridLayoutManager(gallery_list.this,3));
gallery_recyclerview1.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error)
{ Toast.makeText(gallery_list.this,error.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
private void getCategory2()
{
Drefrance.child("events").addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
{
for (DataSnapshot Dsnapshot : snapshot.getChildren())
{
galleryData data = Dsnapshot.getValue(galleryData.class);
list.add(data);
}
adapter = new galleryAdapter(gallery_list.this,list);
gallery_recyclerview2.setLayoutManager(new GridLayoutManager(gallery_list.this,3));
gallery_recyclerview2.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error)
{ Toast.makeText(gallery_list.this,Toast.LENGTH_SHORT).show();
}
});
}
private void getCategory3()
{
Drefrance.child("festivals").addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
{
for (DataSnapshot Dsnapshot : snapshot.getChildren())
{
galleryData data = Dsnapshot.getValue(galleryData.class);
list.add(data);
}
adapter = new galleryAdapter(gallery_list.this,list);
gallery_recyclerview3.setLayoutManager(new GridLayoutManager(gallery_list.this,3));
gallery_recyclerview3.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error)
{ Toast.makeText(gallery_list.this,Toast.LENGTH_SHORT).show();
}
});
}
private void getCategory4()
{
Drefrance.child("achivements").addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
{
for (DataSnapshot Dsnapshot : snapshot.getChildren())
{
galleryData data = Dsnapshot.getValue(galleryData.class);
list.add(data);
}
adapter = new galleryAdapter(gallery_list.this,list);
gallery_recyclerview4.setLayoutManager(new GridLayoutManager(gallery_list.this,3));
gallery_recyclerview4.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error)
{ Toast.makeText(gallery_list.this,Toast.LENGTH_SHORT).show();
}
});
}
private void getCategory5()
{
Drefrance.child("sports").addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
{
for (DataSnapshot Dsnapshot : snapshot.getChildren())
{
galleryData data = Dsnapshot.getValue(galleryData.class);
list.add(data);
}
adapter = new galleryAdapter(gallery_list.this,list);
gallery_recyclerview5.setLayoutManager(new GridLayoutManager(gallery_list.this,3));
gallery_recyclerview5.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error)
{ Toast.makeText(gallery_list.this,Toast.LENGTH_SHORT).show();
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.nestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:animationCache="true"
tools:context=".gallery.gallery_list">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginVertical="8dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/gallery_category1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:fontFamily="@font/overpassbold"
android:text="placements"
android:textColor="#3f3b3b"
android:textSize="22dp"
/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginVertical="4dp"
android:background="#828080" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/gallery_recyclerview1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginVertical="8dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/gallery_category2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:fontFamily="@font/overpassbold"
android:text="events"
android:textColor="#3f3b3b"
android:textSize="22dp"
/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginVertical="4dp"
android:background="#828080" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/gallery_recyclerview2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginVertical="8dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/gallery_category3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:fontFamily="@font/overpassbold"
android:text="festivals"
android:textColor="#3f3b3b"
android:textSize="22dp"
/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginVertical="4dp"
android:background="#828080" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/gallery_recyclerview3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginVertical="8dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/gallery_category4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:fontFamily="@font/overpassbold"
android:text="Achivements"
android:textColor="#3f3b3b"
android:textSize="22dp"
/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginVertical="4dp"
android:background="#828080" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/gallery_recyclerview4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginVertical="8dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/gallery_category5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:fontFamily="@font/overpassbold"
android:text="Sports"
android:textColor="#3f3b3b"
android:textSize="22dp"
/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginVertical="4dp"
android:background="#828080" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/gallery_recyclerview5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.nestedScrollView>
图库项目布局的 Xml
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/gallery_image_item_card"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="1dp"
android:orientation="vertical"
>
<ImageView
android:id="@+id/gallery_imageView"
android:layout_width="wrap_content"
android:layout_height="90dp"
android:layout_gravity="center"
android:scaleType="fitXY"
app:srcCompat="@drawable/noimg" />
<com.google.android.material.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/gallery_delete_btn"
android:text="delete"
android:textSize="12dp"
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
解决方法
您在 Gallery_list 活动中缺少 setContentView(R.layout.gallery_list);。在 super.onCreate(savedInstanceState); 活动的 oncreate 之后添加这个。