簡體   English   中英

RecyclerView空指針異常

[英]RecyclerView Null Pointer Exception

我是Android Studio的新用戶,並且發現了類似的問題但沒有回復適用於我當前的實例。 我一直在嘗試使用RecyclerViews,並且每當我用它打開一個活動時都會收到以下錯誤消息。 代碼不顯示任何錯誤。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lucasrizzotto.edgeweather/com.lucasrizzotto.edgeweather.ui.HourlyForecastActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference

這是我的適配器:

public class HourAdapter extends RecyclerView.Adapter<HourAdapter.HourViewHolder> {

    private Hour[] mHours;

    public HourAdapter(Hour[] hours) {
        mHours = hours;
    }

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

    @Override
    public void onBindViewHolder(HourViewHolder holder, int position) {
        holder.bindHour(mHours[position]);
    }

    @Override
    public int getItemCount() {
        return mHours.length;
    }

    public class HourViewHolder extends RecyclerView.ViewHolder {

        public TextView mTimeLabel;
        public TextView mTemperatureLabel;
        public TextView mSummaryLabel;
        public ImageView mIconImageView;

        public HourViewHolder(View itemView) {
            super(itemView);
            mTimeLabel = (TextView) itemView.findViewById(R.id.timeLabel);
            mTemperatureLabel = (TextView) itemView.findViewById(R.id.temperatureLabel);
            mSummaryLabel = (TextView) itemView.findViewById(R.id.summaryLabel);
            mIconImageView = (ImageView) itemView.findViewById(R.id.iconImageView);
        }

        public void bindHour(Hour hour) {
            mTimeLabel.setText(hour.getHour());
            mSummaryLabel.setText(hour.getSummary());
            mTemperatureLabel.setText((int)hour.getTemperature());
            mIconImageView.setImageResource(hour.getIconId());
        }

    }
}

和我的Activity類(請記住我正在使用ButterKnife插件來避免樣板代碼)

public class HourlyForecastActivity extends AppCompatActivity {

    private Hour[] mHours;

    @BindView(R.id.recyclerView) RecyclerView mRecyclerView;

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

        Intent intent = getIntent();
        Parcelable[] parcelables = intent.getParcelableArrayExtra(MainActivity.HOURLY_FORECAST);
        mHours = Arrays.copyOf(parcelables, parcelables.length, Hour[].class);

        HourAdapter adapter = new HourAdapter(mHours);
        mRecyclerView.setAdapter(adapter);

        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager);
        mRecyclerView.setHasFixedSize(true);

    }
}

我在俯瞰什么?

提前感謝您的智慧!

試着打電話:

ButterKnife.bind(this);

設置內容視圖后

由於您沒有以傳統方式執行此操作,因此您需要實際調用bind()。

您正在使用ButterKnife綁定視圖,這是很好的。

但似乎你忘了為你當前的Activity 初始化ButterKnife

就這樣做,

ButterKnife.bind(this);

在這一行之后,

setContentView(R.layout.activity_hourly_forecast);

將為您當前的Activity初始化ButterKnife,您將能夠正確引用您的布局中的RecyclerView。

希望能幫助到你。

基本上你需要初始化mRecyclerView

例如

mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);

但在你的情況下,你使用ButterKnife庫。

所以你需要在setContentView(R.layout.activity_hourly_forecast)之后調用它的bind()方法;

setContentView(R.layout.activity_hourly_forecast);
ButterKnife.bind(this);

暫無
暫無

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

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