网格视图教程,在空对象上调用
Grid View Tutorial, Invoking on Null Object
我是 Java 和 Android Studio 的新手。
我正在关注这个 tutorial,试图让网格正常工作。
我创建了一个新的准系统应用程序。
我按照教程进行操作,但在以下块中遇到错误。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
此时,我得到一个错误,说
? android.widget.adapterview.OnItemClickListener? (multiple choices)
此时我选择了第一个并将其翻译为
new AdapterView.OnItemClickListener()
错误消失了。
在尝试 运行 之前,我对教程没有其他问题。我收到以下错误
Caused by: java.lang.NullPointerException:
Attempt to invoke virtual method 'void android.widget.GridView.setAdapter
(android.widget.ListAdapter)' on a null object reference
at com.example.shiftedrec.myandroid.MainActivity.onCreate(MainActivity.java:24)
第24行指的是:
gridview.setAdapter(new ImageAdapter(this));
所以我现在的假设是 (this)
为空。从这里传递:
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
这个是空的怎么办,我该如何解决这个错误?谢谢你的包容。
更新
我会 post xml
activity_main.xml
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="50dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
gridView
是空对象,R.id.gridview
可能是不正确的 ID。检查您的 XML 布局文件。
说明:this
不能是 null
,因为 onCreate
只能在 Object 实例上调用。此外,如果 this
为空,则异常将在 ImageAdapter
class.
中的某处抛出
编辑:因为 ID 是正确的,但您忘记调用 setContentView(R.layout.activity_main)
您缺少 super.onCreate(savedInstanceState);
旁边的 setContentView(R.layout.activity_main);
我是 Java 和 Android Studio 的新手。
我正在关注这个 tutorial,试图让网格正常工作。
我创建了一个新的准系统应用程序。
我按照教程进行操作,但在以下块中遇到错误。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
此时,我得到一个错误,说
? android.widget.adapterview.OnItemClickListener? (multiple choices)
此时我选择了第一个并将其翻译为
new AdapterView.OnItemClickListener()
错误消失了。
在尝试 运行 之前,我对教程没有其他问题。我收到以下错误
Caused by: java.lang.NullPointerException:
Attempt to invoke virtual method 'void android.widget.GridView.setAdapter
(android.widget.ListAdapter)' on a null object reference
at com.example.shiftedrec.myandroid.MainActivity.onCreate(MainActivity.java:24)
第24行指的是:
gridview.setAdapter(new ImageAdapter(this));
所以我现在的假设是 (this)
为空。从这里传递:
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
这个是空的怎么办,我该如何解决这个错误?谢谢你的包容。
更新 我会 post xml
activity_main.xml
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="50dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
gridView
是空对象,R.id.gridview
可能是不正确的 ID。检查您的 XML 布局文件。
说明:this
不能是 null
,因为 onCreate
只能在 Object 实例上调用。此外,如果 this
为空,则异常将在 ImageAdapter
class.
编辑:因为 setContentView(R.layout.activity_main)
您缺少 super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);