Android GridView setAdapter方法上的NullPointerException
当我试图将SimpleCursorAdapter的实例设置为GridView的适配器时,我遇到了一个NullPointerExceptionAndroid GridView setAdapter方法上的NullPointerException,android,gridview,simplecursoradapter,Android,Gridview,Simplecursoradapter,当我试图将SimpleCursorAdapter的实例设置为GridView的适配器时,我遇到了一个NullPointerException E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sp.sr.app/com.sp.sr.app.GridActivity}: java.lang.NullPointerExceptio
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sp.sr.app/com.sp.sr.app.GridActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
at android.app.ActivityThread.access$600(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.sp.sr.app.GridActivity.onCreate(GridActivity.java:36)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
at android.app.ActivityThread.access$600(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
这是我的GridAdapter类
package com.sp.sr.app;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
public class GridAdapter extends SimpleCursorAdapter {
private static final String TAG = GridAdapter.class.getSimpleName();
private Context context;
private int layout;
private Cursor cursor;
private LayoutInflater inflater;
private final int STRING_TITLE;
private final int STRING_DESCRIPTION;
private final int STRING_COVER;
public GridAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) {
super(context, layout, cursor, from, to, 0);
this.context = context;
this.layout = layout;
this.cursor = cursor;
this.inflater = LayoutInflater.from(context);
this.STRING_TITLE = cursor.getColumnIndex(StringContract.Column.TITLE);
this.STRING_DESCRIPTION = cursor.getColumnIndex(StringContract.Column.DESCRIPTION);
this.STRING_COVER = cursor.getColumnIndex(StringContract.Column.COVER);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (cursor.moveToPosition(position)) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(layout, null);
viewHolder = new ViewHolder();
viewHolder.string_title = (TextView) convertView.findViewById(R.id.string_title);
viewHolder.string_description = (TextView) convertView.findViewById(R.id.string_description);
viewHolder.string_cover = (ImageView) convertView.findViewById(R.id.string_cover);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.string_title.setText(cursor.getString(STRING_TITLE));
viewHolder.string_description.setText(cursor.getString(STRING_DESCRIPTION));
Picasso.with(context).load(cursor.getString(STRING_COVER)).into(viewHolder.string_cover);
}
return convertView;
}
private class ViewHolder {
ImageView string_cover;
TextView string_title;
TextView string_description;
}
}
这是我活动的onCreate方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Cursor cursor = getContentResolver().query(StringContract.CONTENT_URI, FROM, null, null, StringContract.DEFAULT_SORT);
startManagingCursor(cursor);
mAdapter = new GridAdapter(getApplicationContext(), R.layout.list_item, cursor, FROM, TO);
grid = (GridView) findViewById(R.id.grid);
grid.setAdapter(mAdapter); // Line 36 of GridActivity.java
}
提前感谢您的帮助
grid
var返回null
,因为系统无法在此行找到其id:
grid = (GridView) findViewById(R.id.grid); // id not found
实际上,您没有将布局附加到活动
,这就是为什么当您试图设置适配器
时,您将其设置为空
变量:
grid.setAdapter(mAdapter); // grid = null, the system cannot do that -> CRASH
然后,您需要使用setContentView
方法将一个布局附加到Activity
,以向系统表明:此视图属于通过findViewById
方法检索的布局:
super.onCreate(savedInstanceState); // always below 'super' method
setContentView(R.layout.grid_layout); // attach the layout
// then, find the views regarding it
grid = (GridView) findViewById(R.id.grid); // id found on this layout
grid
var返回null
,因为系统在此行找不到其id:
grid = (GridView) findViewById(R.id.grid); // id not found
实际上,您没有将布局附加到活动
,这就是为什么当您试图设置适配器
时,您将其设置为空
变量:
grid.setAdapter(mAdapter); // grid = null, the system cannot do that -> CRASH
然后,您需要使用setContentView
方法将一个布局附加到Activity
,以向系统表明:此视图属于通过findViewById
方法检索的布局:
super.onCreate(savedInstanceState); // always below 'super' method
setContentView(R.layout.grid_layout); // attach the layout
// then, find the views regarding it
grid = (GridView) findViewById(R.id.grid); // id found on this layout
grid
var返回null
,因为系统在此行找不到其id:
grid = (GridView) findViewById(R.id.grid); // id not found
实际上,您没有将布局附加到活动
,这就是为什么当您试图设置适配器
时,您将其设置为空
变量:
grid.setAdapter(mAdapter); // grid = null, the system cannot do that -> CRASH
然后,您需要使用setContentView
方法将一个布局附加到Activity
,以向系统表明:此视图属于通过findViewById
方法检索的布局:
super.onCreate(savedInstanceState); // always below 'super' method
setContentView(R.layout.grid_layout); // attach the layout
// then, find the views regarding it
grid = (GridView) findViewById(R.id.grid); // id found on this layout
grid
var返回null
,因为系统在此行找不到其id:
grid = (GridView) findViewById(R.id.grid); // id not found
实际上,您没有将布局附加到活动
,这就是为什么当您试图设置适配器
时,您将其设置为空
变量:
grid.setAdapter(mAdapter); // grid = null, the system cannot do that -> CRASH
然后,您需要使用setContentView
方法将一个布局附加到Activity
,以向系统表明:此视图属于通过findViewById
方法检索的布局:
super.onCreate(savedInstanceState); // always below 'super' method
setContentView(R.layout.grid_layout); // attach the layout
// then, find the views regarding it
grid = (GridView) findViewById(R.id.grid); // id found on this layout
grid
是否是GridView的正确id,是否在正确的布局中(顺便说一句,在您的活动中,setContentView
方法在哪里)?另外,最好使用活动上下文而不是应用程序上下文,因为:mAdapter=new GridAdapter(**getActivity()**,R.layout…
@Fllo在右边,setContentView丢失了,这就解决了它,多亏了一个lotIsgrid
正确的GridView id和正确的布局(顺便说一句,其中是活动中的setContentView
方法)?另外,最好使用活动上下文而不是应用程序上下文:mAdapter=new GridAdapter(**getActivity()**,R.layout…)
@Fllo告诉你,在正确的位置,setContentView丢失了,这就解决了它,多亏了lotIsgrid
正确的GridView id和正确的布局(顺便说一句,活动中的setContentView
方法在哪里)?另外,最好使用活动上下文,而不是应用程序上下文:mAdapter=newGridAdapter(**getActivity()**,R.layout…
@Fllo your where right,setContentView缺失,这就解决了它,多亏了一个lotIsgrid
正确的GridView id和正确的布局(顺便说一句,活动中的setContentView
方法)另外,最好使用活动上下文,而不是应用程序上下文:mAdapter=new GridAdapter(**getActivity()**,R.layout…
@Fllo在右边,setContentView丢失了,并且修复了它,感谢一个lotIf,如果它在片段中,rootView=inflater.inflate(R.layout.fragment\u main,container,false);(GridView)GridView=(GridView)rootView.findViewById(R.id.gridView1);
可能会帮助您。是的@Zafer,如果它在片段内部,膨胀的视图很重要。但是,当op说“在我的活动中”时,我认为没有必要提及;)如果它在片段内部,rootView=inflater.inflate(R.layout.fragment_main,container,false);(GridView)GridView=(GridView)rootView.findViewById(R.id.gridView1);
可能会帮助您。是的@Zafer,如果它在片段中,膨胀的视图很重要。但是,当op说“在我的活动中”时,我认为没有必要提及;)如果它在片段内部,rootView=inflater.inflate(R.layout.fragment\u main,container,false);(GridView)GridView=(GridView)rootView.findViewById(R.id.gridView1);
可能会帮助你。是的@Zafer,如果它在片段内部,膨胀的视图很重要。然而,当op说“在我的活动中”时,我认为没有必要提及;)如果它在片段内部,rootView=inflater.inflate(R.layout.fragment_main,container,false);(GridView)GridView=(GridView)rootView.findViewById(R.id.gridView1);
可能会帮助您。是的@Zafer,如果它在片段内部,充气视图很重要。然而,当op说“在我的活动中”,我认为没有必要提及这一点;)