2014-03-02 33 views
0

,我發現了以下錯誤:找不到NullPointerException異常的原因,日誌不輸出作爲期望

03-02 18:11:00.307: E/AndroidRuntime(2228): FATAL EXCEPTION: main 
03-02 18:11:00.307: E/AndroidRuntime(2228): Process: com.dionsoft.dailymacrotracker, PID: 2228 
03-02 18:11:00.307: E/AndroidRuntime(2228): java.lang.RuntimeException: Unable to resume activity {com.dionsoft.dailymacrotracker/com.dionsoft.dailymacrotracker.MainActivity}: java.lang.NullPointerException 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2788) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2817) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.os.Looper.loop(Looper.java:136) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at dalvik.system.NativeStart.main(Native Method) 
03-02 18:11:00.307: E/AndroidRuntime(2228): Caused by: java.lang.NullPointerException 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at com.dionsoft.dailymacrotracker.MainActivity.onResume(MainActivity.java:30) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.Activity.performResume(Activity.java:5310) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2778) 
03-02 18:11:00.307: E/AndroidRuntime(2228):  ... 12 more 

這裏是MainActivity代碼:

public class MainActivity extends Activity { 

    private MainDS datasource; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Map<String, Integer> todaysTotals = datasource.getTodaysTotals(); 
    } 

} 

下面是代碼MainDS:

public class MainDS { 

    private SQLiteDatabase database; 
    private SQLiteHelper dbHelper; 

    public MainDS(Context context) { 
     dbHelper = new SQLiteHelper(context); 
    } 

    public void open() throws SQLException { 
     database = dbHelper.getWritableDatabase(); 
    } 

    public void close() { 
     dbHelper.close(); 
    } 

    public Map<String, Integer> getTodaysTotals() { 
     String sql = "select sum(" + SQLiteHelper.COLUMN_CALORIES + "), " + 
       "sum(" + SQLiteHelper.COLUMN_PROTEIN + "), " + 
       "sum(" + SQLiteHelper.COLUMN_CARBS + "), " + 
       "sum(" + SQLiteHelper.COLUMN_FAT + ") " + 
       "from " + SQLiteHelper.TABLE_RECORDS + " " + 
       "where date(" + SQLiteHelper.COLUMN_DATE + ", 'unixepoch') = date('now')"; 
     Log.d("getTodaysTotals", sql); 
     Cursor cursor = database.rawQuery(sql, null); 

     Map<String, Integer> totals = new HashMap<String, Integer>(); 

     if (cursor != null) { 
      totals.put("todays_calories", cursor.getInt(0)); 
      totals.put("todays_protein", cursor.getInt(1)); 
      totals.put("todays_carbs", cursor.getInt(2)); 
      totals.put("todays_fat", cursor.getInt(3)); 
     } 

     cursor.close(); 

     return totals; 
    } 

} 

我不知道如何解決這個問題,因爲它是不會告訴我什麼,我需要修復。

此外,它並沒有從MainDS中的Log.d函數記錄sql。

任何幫助,將不勝感激。

+5

'在com.dionsoft.dailymacrotracker.MainActivity.onResume(MainActivity.java:30 )','地圖<字符串,整數> todaysTotals = datasource.getTodaysTotals();' - 'datasource'爲空 –

+0

謝謝,即時通訊如此愚蠢。 – scarhand

+0

有時會發生:)接受任何三個答案,以避免保持這個問題打開... –

回答

1

你在的onCreate錯過

datasource = new MainDS(this); 

private MainDS datasource; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

private MainDS datasource; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    datasource = new MainDS(this); 
    setContentView(R.layout.activity_main); 
} 
0

這裏:

datasource.getTodaysTotals(); 

您嘗試使用數據源,但你永遠不會初始化它! ==> NPE

相關問題