我花了很多时间研究溢出并尽我所能解决这个问题,但我只是不知道自己缺少什么。我在cardview中有一个recyclerview,它显示了数据库中数据的3个属性。每张卡显示不同的行。我正在尝试这样做,以便当用户单击卡片时,它会打开一个新活动,然后将有关该卡片的信息通过意图传递给新活动,以便可以在其中填充数据。
每次我点击其中一张卡时,它都会因以下错误而崩溃:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference"
错误指向代码底部的区域,我添加了注释以显示其位置。因此,由于某种原因,接收到的意图似乎是空的
这是recyclerview的XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:tag="cards main container">
<androidx.cardview.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="wrap_content"
android:layout_margin="8dp"
card_view:cardCornerRadius="6dp"
card_view:cardElevation="6dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/flaredesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:background="@android:color/holo_orange_light"
android:layout_weight="1"/>
<TextView
android:id="@+id/flarearea"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:background="@android:color/holo_orange_light"
android:layout_weight="1"/>
<TextView
android:id="@+id/flaredate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:background="@android:color/holo_orange_light"
android:layout_weight="1"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
这是我的适配器类中的代码:
public FlareViewHolder(View itemView) {
super(itemView);
flareDesc = (TextView)itemView.findViewById(R.id.flaredesc);
flareArea = (TextView)itemView.findViewById(R.id.flarearea);
flareDate = (TextView)itemView.findViewById(R.id.flaredate);
CardView cardview;
cardview = (CardView)itemView.findViewById(R.id.card_view);
cardview.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) {
Intent i = new Intent (view.getContext(), CurrentFlareActivity.class);
i.putExtra("flareDes",flareDesc.getText().toString());
i.putExtra("flareAre",flareArea.getText().toString());
i.putExtra("flareDat",flareDate.getText().toString());
view.getContext().startActivity(i);
}
});
}
}
最后这是新活动的代码(请参见错误注释):
public class CurrentFlareActivity extends AppCompatActivity {
Intent result = getIntent();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_current_flare);
TextView SelectedFlareDesc;
TextView SelectedFlareArea;
TextView SelectedFlareDate;
SelectedFlareDesc = (TextView)findViewById(R.id.current_desc);
SelectedFlareArea = (TextView)findViewById(R.id.current_area);
SelectedFlareDate = (TextView)findViewById(R.id.current_date);
String Description = result.getStringExtra("flareDes"); //this is where the error comes up
String Area = result.getStringExtra("flareAre");
String Date = result.getStringExtra("flareDat");
SelectedFlareDesc.setText(Description);
SelectedFlareArea.setText(Area);
SelectedFlareDate.setText(Date);
}