Android 当试图用其他信息填充活动b时,应用程序不断崩溃
我已经设置了应用程序,因此当我点击回收器视图上的视图时,电影图像会正确过渡到活动B。现在,当我尝试填充活动B中对象的信息(如绘图等)时,我收到一个错误,即onBindViewHolder中的内容为空。我一定是遗漏了什么,因为我之前设置应用程序的方式(一张卡上的所有信息)所有内容都被正确地查询和显示。当我决定更改并将信息发送到活动B时,这一切就开始发生了 这是适配器Android 当试图用其他信息填充活动b时,应用程序不断崩溃,android,nullpointerexception,Android,Nullpointerexception,我已经设置了应用程序,因此当我点击回收器视图上的视图时,电影图像会正确过渡到活动B。现在,当我尝试填充活动B中对象的信息(如绘图等)时,我收到一个错误,即onBindViewHolder中的内容为空。我一定是遗漏了什么,因为我之前设置应用程序的方式(一张卡上的所有信息)所有内容都被正确地查询和显示。当我决定更改并将信息发送到活动B时,这一切就开始发生了 这是适配器 public class MoviesAdapter extends RecyclerView.Adapter<MoviesA
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
private List<MovieData> moviesList;
private Context context;
private ClickListener clickListener;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public MoviesAdapter(Context context, List<MovieData> moviesList) {
this.moviesList = moviesList;
this.context = context;
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView title, plot, releaseDate, rating;
public ImageView thumb;
public NetworkImageView moviePic;
public MyViewHolder(View view) {
super(view);
view.setOnClickListener(this);
title = (TextView) view.findViewById(R.id.name);
plot = (TextView) view.findViewById(R.id.plot);
releaseDate = (TextView) view.findViewById(R.id.releaseDate);
rating = (TextView) view.findViewById(R.id.rating);
thumb = (ImageView) view.findViewById(R.id.thumb);
moviePic = (NetworkImageView) view.findViewById(R.id.profilePic);
}
@Override
public void onClick(View v) {
//context.startActivity(new Intent(context,DisplayActivity.class));
if (clickListener != null) {
clickListener.itemClicked(v, getAdapterPosition());
}
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_row, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
MovieData movie = moviesList.get(position);
holder.title.setText(movie.getTitle());
holder.plot.setText(movie.getPlot());
holder.releaseDate.setText(movie.getReleaseDate());
holder.rating.setText(movie.getRating());
Float nRating = Float.parseFloat(holder.rating.getText().toString());
if (nRating > 6.5) {
holder.thumb.setImageResource(R.drawable.ic_thumbs_up);
} else {
holder.thumb.setImageResource(R.drawable.ic_thumbdown);
}
holder.moviePic.setImageUrl(movie.getImage(), imageLoader);
}
@Override
public int getItemCount() {
return moviesList.size();
}
//Interface and method to help with clicks
public interface ClickListener {
void itemClicked(View view, int position);
}
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
}
这是logcat
04-12 14:01:22.349 23413-23413/com.app.sparkimagination.moviesmoviesmovies E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.sparkimagination.moviesmoviesmovies, PID: 23413
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at adapter.MoviesAdapter.onBindViewHolder(MoviesAdapter.java:78)
at adapter.MoviesAdapter.onBindViewHolder(MoviesAdapter.java:27)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThr
提前谢谢
movie_row注意,支架中的所有其他视图都在activity_display xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:tag="cards main container">
<android.support.v7.widget.CardView
android:id="@+id/card_view"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="5dp"
card_view:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/profilePic"
android:transitionName="@string/transition_string"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="1"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
显示所有信息所在的xml
ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
tools:context=".DisplayActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/profilePic"
android:layout_width="match_parent"
android:layout_height="262dp"
android:scaleType="fitCenter"
android:transitionName="@string/transition_string" />
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<ImageView
android:id="@+id/thumb"
android:layout_width="0dp"
android:layout_height="75dp"
android:layout_weight="1"
tools:src="@drawable/ic_thumbs_up"
/>
<TextView
android:id="@+id/rating"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textAlignment="center"
android:textSize="30dp"
android:layout_weight="1"
tools:text="9.0"/>
</LinearLayout>
<TextView
android:id="@+id/plot"
android:layout_width="match_parent"
android:layout_height="173dp" />
<TextView
android:id="@+id/releaseDate"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
ScrollView xmlns:android=”http://schemas.android.com/apk/res/android"
xmlns:tools=”http://schemas.android.com/tools"
android:orientation=“垂直”
android:layout\u width=“匹配父项”
android:layout\u height=“match\u parent”
android:weightSum=“1”
工具:context=“.DisplayActivity”>
这里的问题是
MyViewHolder
类和onBindViewHolder()
方法引用并调用了不在movie\u行中的视图上的方法。例如,尝试查找R.id.plot
,然后在onBindViewholder()
中尝试调用holder.plot.setText()
。您的movie\u行中没有id绘图的TextView,因此会出现NullPointerException和崩溃
假设您以前确实在其中包含其他视图,然后在创建第二个活动时将其删除
解决这一问题的两个主要选择是,如果您确实希望在RecyclerView中显示您试图在movie_row.xml
中引用的所有视图,或者如果它们不在那里,则将它们从MyViewHolder
类和onBindViewHolder()中删除
method.movie\u行
view holder的XML是什么样子的?@Jose在MoviesAdapter的第78行和第27行。请在此处添加您的电影\u row.xml我将添加代码top@MaharithAdityaSS updated@LewisMcGeary更新好了,回收器视图只处理活动A上的网格,只有图像…我只希望这些视图膨胀并在活动B上设置?我怎样才能做到这一点?@JoseBurgos看到了我答案的最后一段;如果RecyclerView只显示NetworkImageView
,那么请转到您的MyViewHolder
类和onBindViewHolder()
方法,删除RecyclerView中不存在的有关thumb和TextView的所有内容。成功了,谢谢
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:tag="cards main container">
<android.support.v7.widget.CardView
android:id="@+id/card_view"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="5dp"
card_view:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/profilePic"
android:transitionName="@string/transition_string"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="1"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
tools:context=".DisplayActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/profilePic"
android:layout_width="match_parent"
android:layout_height="262dp"
android:scaleType="fitCenter"
android:transitionName="@string/transition_string" />
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<ImageView
android:id="@+id/thumb"
android:layout_width="0dp"
android:layout_height="75dp"
android:layout_weight="1"
tools:src="@drawable/ic_thumbs_up"
/>
<TextView
android:id="@+id/rating"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textAlignment="center"
android:textSize="30dp"
android:layout_weight="1"
tools:text="9.0"/>
</LinearLayout>
<TextView
android:id="@+id/plot"
android:layout_width="match_parent"
android:layout_height="173dp" />
<TextView
android:id="@+id/releaseDate"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>