android - 空对象引用不断发生 - void android.widget.GridView.setAdapter(android.widget.ListAdapter)
问题描述
这是我的主要
public class MainActivity2 extends AppCompatActivity {
GridView gridView;
CustomAdapter customAdapter;
String[] fruitNames = {"Blade Runner 2049","Black Mass","Joker","RiverDale"};
int[] fruitImages = {R.drawable.blader,R.drawable.blackm,R.drawable.joker,R.drawable.riverdale};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.row_data);
gridView = findViewById(R.id.gridview);
gridView.setAdapter(customAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//Toast.makeText(getApplicationContext(),fruitNames[i],Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(),NowShowingActivity.class);
intent.putExtra("name",fruitNames[i]);
intent.putExtra("image",fruitImages[i]);
startActivity(intent);
}
});
}
private class CustomAdapter extends BaseAdapter {
@Override
public int getCount() {
return fruitImages.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View view1 = getLayoutInflater().inflate(R.layout.row_data, null);
//getting view in row_data
TextView name = view1.findViewById(R.id.fruits);
ImageView image = view1.findViewById(R.id.images);
name.setText(fruitNames[i]);
image.setImageResource(fruitImages[i]);
return view1;
}
}
}
这是它要去的活动
public class NowShowingActivity extends AppCompatActivity {
TextView gridData;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nowshowing_grid);
gridData = findViewById(R.id.griddata);
imageView = findViewById(R.id.imageView);
Intent intent = getIntent();
String receivedName = intent.getStringExtra("name");
int receivedImage = intent.getIntExtra("image",0);
gridData.setText(receivedName);
imageView.setImageResource(receivedImage);
//enable back Button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
这是activity_main2
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<TextView
android:id="@+id/griddata"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="105dp"
android:text="Blade Runner 2049"
android:textColor="#000"
android:textSize="30dp" />
<ImageView
android:id="@+id/imageView"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/blader"
android:layout_centerHorizontal="true"
android:layout_below="@+id/griddata"
android:layout_marginTop="27dp" />
<include layout="@layout/nowshowing_grid" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
这是 nowshowing_grid 活动主文件
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#e5e5e5"
android:horizontalSpacing="1dp"
android:numColumns="2"
android:verticalSpacing="1dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
这就是 row_data 中的内容
<RelativeLayout
android:id="@+id/gridviewdata"
android:layout_width="190dp"
android:background="#fff"
android:layout_height="180dp">
<TextView
android:id="@+id/fruits"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="Blade Runner 2049"
android:textStyle="normal|italic"
android:textSize="25dp" />
<ImageView
android:id="@+id/images"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/blader" />
</RelativeLayout>
这是错误信息
引起:java.lang.NullPointerException:尝试在 com.example.mycinema.MainActivity2.onCreate(MainActivity2.java
) 的空对象引用上调用虚拟方法 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)'
:28)
当我点击按钮转到下一个活动以查看网格视图时,就会发生这种情况。
解决方案
CustomAdapter 为空,您需要在调用之前先对其进行初始化setAdapter
:
customAdapter = new CustomAdapter();
gridView.setAdapter(customAdapter);
推荐阅读
- amazon-web-services - 通过 CloudFormation 的 Amazon DynamoDB - 时间点恢复
- python - 如何使以下 python 程序(代码)更高效?
- python - 在给定行数后停止打印 Counter() 的输出
- python - OpenXML 标记格式
- javascript - 如何在javascript测试中比较object2中object1中的现有字段?
- python - 无法安装包 pysftp,找不到包“libffi”,失败,错误代码 1
- javascript - 如何在 React 中跨组件存储变量状态
- mongodb - 关系数据的最佳 MongoDB 模式格式
- sql-server - 重命名 TFS 中时间表的列名或列数据类型时出现错误
- ruby-on-rails - 我应该如何在 Rails 的胖用户模型中重构和提取这些方法?