【问题标题】:Gridview adapter causes java.lang.NullPointerException:Gridview 适配器导致 java.lang.NullPointerException:
【发布时间】:2015-09-16 19:19:56
【问题描述】:

我得到一个NullPointerException MainView

下面是我的代码:

MainView.java - 抛出错误的类

    public class MainView extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainview);

        GridView gridView = (GridView) findViewById(R.id.grid_view);

        // Instance of ImageAdapter Class
        gridView.setAdapter(new ImageAdapter(this));
    }
}

mainview.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:columnWidth="90dp"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:gravity="center"
    android:stretchMode="columnWidth" >
</GridView>

ImageView.java

     public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    // Keep all Images in array
    public Integer[] mThumbIds = {
            R.drawable.ic_btcar, R.drawable.ic_btcar
    };

    // Constructor
    public ImageAdapter(Context c){
        mContext = c;
    }

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(70, 70));
        return imageView;
    }

}

编辑:LOGCAT

Process: com.***********t.obd, PID: 16766
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cyberscene.hazmat.obd/com.cyberscene.hazmat.obd.reader.activity.MainView}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3119)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
            at android.app.ActivityThread.access$1000(ActivityThread.java:198)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:6837)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
     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.***********.activity.MainView.onCreate(MainView.java:43)
            at android.app.Activity.performCreate(Activity.java:6500)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
            at android.app.ActivityThread.access$1000(ActivityThread.java:198)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:6837)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

【问题讨论】:

  • 发布您的 logcat 错误。
  • 欢迎来到 StackOverflow。然后你有一个异常,记得发布一个堆栈跟踪,所以我们可以看到发生了什么。仅从代码来看,我可以说只有一个地方可以抛出 NPE - gridView.setAdapter。
  • 请发给你logcat
  • 感谢您的回复。已添加 logcat。
  • 请看MainView.java的第43行

标签: android gridview adapter


【解决方案1】:

尝试清理您的项目并重新构建它。

我可以在日志中看到什么

:尝试在空对象引用上调用虚拟方法“void android.widget.GridView.setAdapter(android.widget.ListAdapter)”

是在设置适配器时,你的gridViewnull。这可能是由于 R.java 文件的引用问题。

【讨论】:

  • 我确实引用了 .R java 文件,但是,当我删除它时,Android Studio 给我一个错误 GridView gridView = (GridView) findViewById(R.id.grid_view);
  • @Shaun 在菜单上选择 Project -> Clean...-> check_your_project_name。然后点击确定。
  • @Shaun 如果未选择 Project-->Build Automatically 则选择它。
  • @arun 我使用的是android 1.3.1,这个项目有gradle..菜单上没有项目。
  • 这对我有用。 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GridView gridView = new GridView(this); gridView.setNumColumns(3); setContentView(gridView); ImageAdapter adapt = new ImageAdapter(this); gridView.setAdapter(adapt); }
猜你喜欢
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多