2015-05-22 2 views
1

Я следую учебному пособию по разработке Android (создание приложения для погоды), но я застрял в ошибке, которую я получаю. Я включил полный журнал журнала в конце вопроса. Кто-нибудь знает, почему я получаю эту ошибку? Я проверил все более 10 раз. NODE: версия minSDK - 14, и именно поэтому я использую библиотеку поддержки, чтобы использовать представление Recycler.Nullpointer Исключение при использовании RecyclerView

Это расположение XML-файл активности, который использует представление ресайклер:

<RelativeLayout 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" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:background="@drawable/bg_gradient" 
    tools:context="koemdzhiev.com.stormy.ui.HourlyForecastActivity"> 


<android.support.v7.widget.RecyclerView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/recyclerView"/> 

Это мой код Recycler.Adapter:

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 mSummaryLabel; 
     public TextView mTemperatureLabel; 
     public ImageView mIconImageView; 

     public HourViewHolder(View itemView) { 

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

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

и это является кодом в своей деятельности:

public class HourlyForecastActivity extends Activity { 

    private Hour[] mHours; 
    //inject the RecyclerView as member variable 
    @InjectView(R.id.recyclerView) RecyclerView mRecyclerView; 

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

     ButterKnife.inject(this); 

     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); 
     //if dealing with fixed size data, it is recommended to do the following... 
     mRecyclerView.setHasFixedSize(true); 
    } 
} 

И это LogCat журналы, которые я получаю:

05-22 22:56:00.394 32579-32579/koemdzhiev.com.stormy E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: koemdzhiev.com.stormy, PID: 32579 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference 
     at koemdzhiev.com.stormy.adapters.HourAdapter$HourViewHolder.bindHour(HourAdapter.java:61) 
     at koemdzhiev.com.stormy.adapters.HourAdapter.onBindViewHolder(HourAdapter.java:33) 
     at koemdzhiev.com.stormy.adapters.HourAdapter.onBindViewHolder(HourAdapter.java:16) 
     at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:4805) 
     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4106) 
+1

Вы можете показать файл R.layout.hourly_list_item? Ошибка показывает, что mIconImageView имеет значение null, когда вы вызываете mIconImageView.setImageResource (hour.getIconId()); – GuilhE

+0

Я включил код этого файла в качестве ответа ниже. Чем вы за ответ так быстро! :) –

+1

О, черт! Я нашел проблему! Существует опечатка, которую я не видел! В id IconImageView его IconImaveView с «v». О, мой ... Спасибо, что указал на меня в этом направлении! –

ответ

3

Ваш ImageView идентификатор iconIma V EView, но в вашем коде вы звоните iconIma G EView. Это странно, потому что у вас должна быть ошибка компиляции, если у вас нет iconImageView где-то еще в другом XML-файле.

+0

Нет, у меня не было ошибки компилятора. Это была только ошибка времени выполнения. Вы правы, что это странно. Еще раз спасибо! :) –

+0

попробуйте использовать инструмент FIND и выполните поиск этого идентификатора в вашем проекте. Ваш R-файл автоматически создается, этот идентификатор должен существовать в вашем проекте. – GuilhE

1

! Существует опечатка, которую я не видел! В id IconImageView его iconImaveView с «v». Я не могу поверить, что все было так просто.

Смежные вопросы