Мое приложение выходит из строя, когда я нажимаю кнопку, которая перенаправляет на другой веб-сайт в адаптере recycleview от firebase

# #java #android #firebase

Вопрос:

Мое приложение выходит из строя, когда я нажимаю кнопку, которая перенаправляет на другой веб-сайт в адаптере просмотра корзины из firebase.

когда я нажимаю на кнопку, приложение вылетает из-за ошибки При попытке вызвать виртуальный метод ‘void android.content.Контекст.привлекательность(android.контент.Намерение)» по нулевой ссылке на объект.

исключение нулевого объекта при попытке начать новое действие

Вот моя ошибка Logcat

 D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bestbookpricecomparison, PID: 2858
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.Context.startActivity(android.content.Intent)' on a null object reference
    at com.example.bestbookpricecomparison.Adapter.BookImagesAdapter$1.onClick(BookImagesAdapter.java:41)
    at android.view.View.performClick(View.java:7448)
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
    at android.view.View.performClickInternal(View.java:7425)
    at android.view.View.access$3600(View.java:810)
    at android.view.View$PerformClick.run(View.java:28305)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 

Здесь возникает ошибка кода адаптера RecycleView

общедоступный класс BookImagesAdapter расширяет FirebaseRecyclerAdapterImagesViewHolder> { частный контекст контекст;

 public BookImagesAdapter(@NonNull FirebaseRecyclerOptions<BookImagesModel> options, Context context) {
    super(options);
    this.context = context;
}


@Override
protected void onBindViewHolder(@NonNull ImagesViewHolder holder, int position, @NonNull BookImagesModel model) {

    Glide.with(holder.Image.getContext()).load(model.getImage()).into(holder.Image);
    holder.Amazon.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(model.getAmazon()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        
        }
    });
   
}

@NonNull
@Override
public ImagesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_book_images, parent, false);
    return new ImagesViewHolder(view);
}

public class ImagesViewHolder extends RecyclerView.ViewHolder{
    private ImageView Image;
    private Button Flipkart, Amazon;

    public ImagesViewHolder(@NonNull View itemView) {
        super(itemView);

        Image = (ImageView) itemView.findViewById(R.id.IVImages);
        Flipkart = (Button) itemView.findViewById(R.id.btnFlipkart);
        Amazon = (Button) itemView.findViewById(R.id.btnAmazon);
    }


}
 

}

Model Class

 public class BookImagesModel {
private String Image, Flipkart, Amazon;

BookImagesModel() {

}

public BookImagesModel(String image, String flipkart, String amazon) {
    Image = image;
    Flipkart = flipkart;
    Amazon = amazon;
}

public String getImage() {
    return Image;
}

public void setImage(String image) {
    Image = image;
}

public String getFlipkart() {
    return Flipkart;
}

public void setFlipkart(String flipkart) {
    Flipkart = flipkart;
}

public String getAmazon() {
    return Amazon;
}

public void setAmazon(String amazon) {
    Amazon = amazon;
}
 

}

Код деятельности

 public class BookImages extends AppCompatActivity {
private RecyclerView BookImagesRV;
private BookImagesAdapter ImagesAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_book_images);

    BookImagesRV = (RecyclerView) findViewById(R.id.BookImagesRV);
    BookImagesRV.setLayoutManager(new LinearLayoutManager(this));

    FirebaseRecyclerOptions<BookImagesModel> imagesoptions =
            new FirebaseRecyclerOptions.Builder<BookImagesModel>()
                    .setQuery(FirebaseDatabase.getInstance().getReference().child("BookImages"), BookImagesModel.class)
                    .build();
    ImagesAdapter = new BookImagesAdapter(imagesoptions,this);
    BookImagesRV.setAdapter(ImagesAdapter);



}
@Override
protected void onStart() {
    super.onStart();
    ImagesAdapter.startListening();
}
@Override
protected void onStop() {
    super.onStop();
    ImagesAdapter.stopListening();
}
 

}

Комментарии:

1. Похоже , проблема в следующем коде: Uri.parse(model.getAmazon ()), попробуйте запустить любое локальное действие.

2. ОЧЕНЬ подозрительная ошибка… нет очистки строки context , и она настроена в конструкторе. Я подозреваю, что вы немного удалили свой код, удалив важные строки для поиска причины ошибки… в качестве обходного пути вы можете попытаться обменять context.startActivity(intent); на view.getContext().startActivity(intent);