我现在一直在找几个小时,但仍然会收到相同的错误消息。 我不喜欢日食,如果有人能解释我做错了什么,我会感激不尽。
我正在制作一个小项目,我可以通过游戏获得列表视图。我可以在愿望清单或已经播放的清单中对这些进行排序。
在这个片段中,我想显示一个带有游戏标题的简单列表视图。每当我尝试打开片段时,应用程序崩溃并发出以下错误:
08-09 16:15:10.752:E / AndroidRuntime(2253):致命异常:主要 08-09 16:15:10.752:E / AndroidRuntime(2253):流程: be.thomasmore.GameLab_2,PID:2253 08-09 16:15:10.752: E / AndroidRuntime(2253):java.lang.RuntimeException:无法启动 活动 ComponentInfo {be.thomasmore.GameLab_2 / be.thomasmore.GameLab_2.MainActivity}: java.lang.NullPointerException 08-09 16:15:10.752: E / AndroidRuntime(2253):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.ActivityThread.access $ 800(ActivityThread.java:135)08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.os.Handler.dispatchMessage(Handler.java:102)08-09 16:15:10.752:E / AndroidRuntime(2253):at android.os.Looper.loop(Looper.java:136)08-09 16:15:10.752: E / AndroidRuntime(2253):at android.app.ActivityThread.main(ActivityThread.java:5017)08-09 16:15:10.752:E / AndroidRuntime(2253):at java.lang.reflect.Method.invokeNative(Native Method)08-09 16:15:10.752:E / AndroidRuntime(2253):at java.lang.reflect.Method.invoke(Method.java:515)08-09 16:15:10.752: E / AndroidRuntime(2253):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 08-09 16:15:10.752:E / AndroidRuntime(2253):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)08-09 16:15:10.752:E / AndroidRuntime(2253):at dalvik.system.NativeStart.main(Native Method)08-09 16:15:10.752: E / AndroidRuntime(2253):引起:java.lang.NullPointerException 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188) 08-09 16:15:10.752:E / AndroidRuntime(2253):at be.thomasmore.GameLab_2.DatabaseHelper.getSpellen(DatabaseHelper.java:223) 08-09 16:15:10.752:E / AndroidRuntime(2253):at be.thomasmore.GameLab_2.GameFragmentTab.readSpellen(GameFragmentTab.java:57) 08-09 16:15:10.752:E / AndroidRuntime(2253):at be.thomasmore.GameLab_2.GameFragmentTab.onCreateView(GameFragmentTab.java:36) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.Fragment.performCreateView(Fragment.java:1700)08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.BackStackRecord.run(BackStackRecord.java:684)08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.Activity.performStart(Activity.java:5240)08-09 16:15:10.752:E / AndroidRuntime(2253):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) 08-09 16:15:10.752:E / AndroidRuntime(2253):... 11更多
所以这是我的片段:
公共类GameFragmentTab扩展Fragment {
private DatabaseHelper db; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.activitygame_layout, container, false); return rootView; } @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); db = new DatabaseHelper(getActivity()); readSpellen(); } private void readSpellen() { final List<Spel> spellen = db.getSpellen(); ArrayAdapter<Spel> adapter = new ArrayAdapter<Spel>(getActivity(),android.R.layout.simple_list_item_1,spellen); final ListView listViewSpellen = (ListView) getActivity().findViewById(R.id.listViewSpellen); listViewSpellen.setAdapter(adapter); }
这是我创建的DatabaseHelper的一部分,我创建了getSpellen()(getGames)。我知道这通常有效,因为我没有碎片就做了同样的项目。
公共类DatabaseHelper扩展SQLiteOpenHelper { //数据库版本 private static final int DATABASE_VERSION = 2; // 数据库名称 private static final String DATABASE_NAME =&#34; games&#34 ;;
// uitgevoerd bij instantiatie van DatabaseHelper // -> als database nog niet bestaat, dan creÎren (call onCreate) // -> als de DATABASE_VERSION hoger is dan de huidige versie, // dan upgraden (call onUpgrade) public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }
@Override public void onCreate(SQLiteDatabase db){
//spel String CREATE_TABLE_SPEL = "CREATE TABLE spel (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "naam TEXT," + "jaar INTEGER," + "hoofdpersonage TEXT," + "leeftijdsklasse TEXT," + "ratingbeschrijving TEXT," + "rating TEXT," + "studioId INTEGER," + "genreId INTEGER," + "platformId INTEGER)"; db.execSQL(CREATE_TABLE_SPEL);
public List getSpellen(){ 列表lijst = new ArrayList();
String selectQuery = "SELECT * FROM spel ORDER BY naam"; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { Spel spel = new Spel(cursor.getLong(0), cursor.getString(1), cursor.getString(2),cursor.getString(3),
cursor.getString(4),cursor.getString(5), cursor.getInt(6),cursor.getInt(7),cursor.getInt(8),cursor.getInt(9)); lijst.add(SPEL); } while(cursor.moveToNext()); }
cursor.close(); db.close(); return lijst; }
当然我也插了一些游戏。 对不起,如果这个问题不是100%,这是我发布的第一个问题。 提前谢谢。
答案 0 :(得分:0)
我想listview为null是因为你没有从onCreateView访问它,好像没有从xml中引用它,所以:
public class GameFragmentTab extends Fragment {
private DatabaseHelper db;
final ListView listViewSpellen;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activitygame_layout, container, false);
listViewSpellen = (ListView) rootView.findViewById(R.id.listViewSpellen);
db = new DatabaseHelper(getActivity());
readSpellen(); }
private void readSpellen() {
final List<Spel> spellen = db.getSpellen();
ArrayAdapter<Spel> adapter = new ArrayAdapter<Spel>(getActivity(),android.R.layout.simple_list_item_1,spellen);
listViewSpellen.setAdapter(adapter);
return rootView;
}