[英]Encountering a Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference
[英]Null Pointer Exception with Fragment - Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setHasFixedSize(boolean)'
當我嘗試打開應用程序的這一部分時,它會自動使模擬器中的應用程序崩潰並拋出此錯誤:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.amazonaws.ivs.player.scrollablefeed, PID: 7317 java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference at com.amazonaws.ivs.player.scrollablefeed.activities.BookingStep1Fragment.initView(BookingStep1Fragment.java:95) at com.amazonaws.ivs.player.scrollablefeed.activities.BookingStep1Fragment.onCreateView(BookingStep1Fragment.java:88)
當我嘗試將 recyclerView 設置為破壞它但不確定如何修復的固定大小時,似乎是 InitView 方法。 任何幫助都會很棒,因為這是我最后一年的項目,截止日期迫在眉睫-謝謝!
BookingStep1Fragment.Java code
package com.amazonaws.ivs.player.scrollablefeed.activities;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Spinner;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.amazonaws.ivs.player.scrollablefeed.R;
import com.amazonaws.ivs.player.scrollablefeed.activities.adapters.MyCityAdapter;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import com.jaredrummler.materialspinner.MaterialSpinner;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import dmax.dialog.SpotsDialog;
import static android.app.Dialog.*;
public class BookingStep1Fragment extends Fragment implements CityLoadListener, BranchLoadListener {
CollectionReference cityRef;
CollectionReference branchRef;
CityLoadListener cityLoadListener;
BranchLoadListener branchLoadListener;
@BindView(R.id.spinner)
MaterialSpinner bSpinner;
@BindView(R.id.recycler_view)
RecyclerView recycler_view;
Unbinder unbinder;
AlertDialog dialog;
static BookingStep1Fragment instance;
public static BookingStep1Fragment getInstance() {
if(instance == null)
instance = new BookingStep1Fragment();
return instance;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cityRef = FirebaseFirestore.getInstance().collection("City");
cityLoadListener = this;
branchLoadListener = this;
AlertDialog dialog = new SpotsDialog.Builder().setContext(getActivity()).build();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View itemView = inflater.inflate(R.layout.fragment_booking_one, container, false);
unbinder = ButterKnife.bind(this,itemView);
initView();
loadAllCity();
return itemView;
}
private void initView() {
recycler_view.setHasFixedSize(true);
recycler_view.setLayoutManager(new GridLayoutManager(getActivity(), 2));
recycler_view.addItemDecoration(new SpacesItemDecoration(4));
}
private void loadAllCity() {
cityRef.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful())
{
List<String> list = new ArrayList<>();
list.add("Please choose city");
for(QueryDocumentSnapshot documentSnapshot: task.getResult())
list.add(documentSnapshot.getId());
cityLoadListener.onCityLoadSuccess(list);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
cityLoadListener.onCityLoadFailed(e.getMessage());
}
});
}
@Override
public void onCityLoadSuccess(List<String> areaNameList) {
bSpinner.setItems(areaNameList);
bSpinner.setOnItemSelectedListener((view, position, id, item) -> {
if(position > 0)
{
loadBranchOfCity(item.toString());
}
else
recycler_view.setVisibility(View.GONE);
});
}
private void loadBranchOfCity(String cityName) {
dialog.show();
branchRef = FirebaseFirestore.getInstance()
.collection("City")
.document(cityName)
.collection("Branch");
branchRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
List<City> list = new ArrayList<>();
if(task.isSuccessful())
{
for(QueryDocumentSnapshot documentSnapshot: Objects.requireNonNull(task.getResult()))
list.add(documentSnapshot.toObject(City.class));
branchLoadListener.onBranchLoadSuccess(list);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
branchLoadListener.onBranchLoadFailed(e.getMessage());
}
});
}
@Override
public void onCityLoadFailed(String message) {
Toast.makeText(getActivity(),message, Toast.LENGTH_SHORT).show();
}
@Override
public void onBranchLoadSuccess(List<City> cityList) {
MyCityAdapter adapter = new MyCityAdapter(getActivity(),cityList);
recycler_view.setAdapter(adapter);
recycler_view.setVisibility(View.VISIBLE);
dialog.dismiss();
}
@Override
public void onBranchLoadFailed(String message) {
Toast.makeText(getActivity(),message, Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
code
fragment_booking_one.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.jaredrummler.materialspinner.MaterialSpinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_marginTop="4dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
code
界面
package com.amazonaws.ivs.player.scrollablefeed.activities;
import java.util.List;
public interface CityLoadListener {
void onCityLoadSuccess(List<String> areaNameList);
void onCityLoadFailed(String message);
}
code
BookingActivity.Java
package com.amazonaws.ivs.player.scrollablefeed.activities;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.widget.Button;
import com.amazonaws.ivs.player.scrollablefeed.R;
import com.amazonaws.ivs.player.scrollablefeed.activities.adapters.MyViewPagerAdapter;
import com.shuhart.stepview.StepView;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
public class BookingActivity extends AppCompatActivity {
StepView bStepView;
ViewPager bViewPager;
Button btn_prev, btn_next;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_booking);
ButterKnife.bind(BookingActivity.this);
bStepView = findViewById(R.id.step_view);
bViewPager = findViewById(R.id.view_pager);
btn_prev = findViewById(R.id.btn_previous_step);
btn_next = findViewById(R.id.btn_next_step);
setupStepView();
setColourButton();
// View
bViewPager.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager()));
bViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 0)
btn_prev.setEnabled(false);
else
btn_prev.setEnabled(true);
setColourButton();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void setColourButton() {
if(btn_next.isEnabled())
{
btn_next.setBackgroundResource(R.color.colorBlack);
}
else
{
btn_next.setBackgroundResource(android.R.color.darker_gray);
}
if(btn_prev.isEnabled())
{
btn_prev.setBackgroundResource(R.color.colorBlack);
}
else
{
btn_prev.setBackgroundResource(android.R.color.darker_gray);
}
}
private void setupStepView() {
List<String> stepList = new ArrayList<>();
stepList.add("City");
stepList.add("Event");
stepList.add("Time");
stepList.add("Confirm");
bStepView.setSteps(stepList);
}
}
code
確保您在應用程序 gradle 中添加了此annotationProcessor
:
annotationProcessor 'com.jakewharton:butterknife-compiler:latest_version'
你沒有初始化元素嗎?
recycler_view = findViewById(R.id.recycler_view)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.