2011-10-14 63 views
0

新的Android和Java真的(我最初是一名Pascal程序员)并且遇到了问题 - 我的应用程序正在关闭,我无法解决原因。Android部队关闭错误

我只是试图调用一个活动来显示我的(当前为空)数据库中的数据表。我正在使用'学习Android'书籍,并且大部分代码都被剪掉并粘贴了。我已将所有数据库访问例程重构为特定的类,但似乎是一个问题。

调用方法:

@Override 
public void onResume() { 
    super.onResume(); 

    Log.i(TAG, "In onResume..."); 

    // Link to WYWHApplication module 
    WYWHApplication wywh = (WYWHApplication) this.getApplication(); 

    // Fetch trip list 
    Cursor tripList = wywh.getBasicList(); 

,这是DB类:

public class WYWHApplication extends Application { 

private static final String TAG = WYWHApplication.class.getSimpleName(); 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.i(TAG, "In onCreate for app..."); 
} 

@Override 
public void onTerminate() { 
    super.onTerminate(); 
    Log.i(TAG, "In onTerminate for app..."); 
} 

// Link to DB class 
private DatabaseUtils dbUtils; 

// Accessor method - how other modules get access to DB. 
public DatabaseUtils getDBData() { 
    return dbUtils; 
} 

public synchronized Cursor getBasicList() { 

    Log.i(TAG, "Getting basic list of trips"); 

    // Get list of DB entries 
    Cursor tripEntries = this.getDBData().fetchList("TRIP_TABLE"); 

    Log.i(TAG, "...returned from getting basic list of trips"); 

    return tripEntries; 
} 

的logcat的有以下几点:

10-14 20:38:29.543: INFO/WYWHApplication(305): In onCreate for app... 
10-14 20:38:29.603: DEBUG/WYWH(305): Start of onCreate.... 
10-14 20:38:30.283: DEBUG/WYWH(305): ...end of onCreate. 
10-14 20:41:05.943: INFO/ActivityManager(58): Starting activity: Intent { cmp=co.uk.sanetech.wywh/.TripsScreenActivity } 
10-14 20:41:06.183: INFO/Trips(305): Start of onCreate.... 
10-14 20:41:06.773: INFO/Trips(305): In onResume... 
10-14 20:41:06.773: INFO/WYWHApplication(305): Getting basic list of trips 
10-14 20:41:06.793: DEBUG/AndroidRuntime(305): Shutting down VM 
10-14 20:41:06.793: WARN/dalvikvm(305): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
10-14 20:41:06.993: ERROR/AndroidRuntime(305): FATAL EXCEPTION: main 
10-14 20:41:06.993: ERROR/AndroidRuntime(305): java.lang.RuntimeException: Unable to resume activity {co.uk.sanetech.wywh/co.uk.sanetech.wywh.TripsScreenActivity}: java.lang.NullPointerException 
10-14 20:41:06.993: ERROR/AndroidRuntime(305):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128) 

(左位在这里)

10-14 20:41:06.993: ERROR/AndroidRuntime(305): Caused by: java.lang.NullPointerException 
10-14 20:41:06.993: ERROR/AndroidRuntime(305):  at co.uk.sanetech.wywh.WYWHApplication.getBasicList(WYWHApplication.java:36) 
10-14 20:41:06.993: ERROR/AndroidRuntime(305):  at co.uk.sanetech.wywh.TripsScreenActivity.onResume(TripsScreenActivity.java:42) 
10-14 20:41:06.993: ERROR/AndroidRuntime(305):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149) 
10-14 20:41:06.993: ERROR/AndroidRuntime(305):  at android.app.Activity.performResume(Activity.java:3823) 
10-14 20:41:06.993: ERROR/AndroidRuntime(305):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118) 
10-14 20:41:06.993: ERROR/AndroidRuntime(305):  ... 12 more 

代码fetchList:

public Cursor fetchList(String tabName) { 

    Log.i(TAG, "In fetchList..."); 

...因为我没有得到这最后的调试消息,这表明,(我)这个问题是调用fetchList但不知道为什么。

感激地接受任何帮助......

回答

0

从您发布有代码,实例dbUtils永远不会初始化任何东西,所以它是空的。因此,当您尝试呼叫fetchList()时,您正在调用不存在的实例的方法。

你的声明或许应该是这个样子

// Link to DB class 
private DatabaseUtils dbUtils = new DatabaseUtils(); 

// Accessor method - how other modules get access to DB. 
public DatabaseUtils getDBData() { 
    return dbUtils; 
} 

如果您尝试访问它的方法之前的对象实例化。

HTH。

+0

非常好 - 这就是诀窍 - 非常感谢(接下来的错误!)... – Nelmo

+0

您的欢迎。如果我的回答对您有帮助,请随时接受它,谢谢。 – Devunwired

0

看看这个:

this.getDBData().fetchList("TRIP_TABLE"); 
  • 或者是null = IMPOSIBLE
  • 或getDBData()的返回null = 更多钞票
  • 或fetchList(“TRIP_TABLE”);被returnning空(也许TRIP_TABLE犯规EXIS)= 最更多钞票
+0

哇,谢谢你的快速回复...我的数据库是空的,其实是应该创建它的onCreate似乎并没有被称为: '代码 类DbHelper扩展SQLiteOpenHelper { //构造 公共DbHelper(上下文的背景下){ 超(上下文,DB_NAME,null,DB_VERSION); } @Override public void onCreate(SQLiteDatabase db){ Log.i(TAG,“Creating DB ...”); String sql =“create table”+ TRIP_TABLE +“(”+“+ ' – Nelmo