Eclipse android,在片段列表视图

时间:2015-08-09 16:44:05

标签: android database eclipse listview android-fragments

我现在一直在找几个小时,但仍然会收到相同的错误消息。 我不喜欢日食,如果有人能解释我做错了什么,我会感激不尽。

我正在制作一个小项目,我可以通过游戏获得列表视图。我可以在愿望清单或已经播放的清单中对这些进行排序。

在这个片段中,我想显示一个带有游戏标题的简单列表视图。每当我尝试打开片段时,应用程序崩溃并发出以下错误:

  

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%,这是我发布的第一个问题。 提前谢谢。

1 个答案:

答案 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;
}