网格视图教程,在空对象上调用

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);