2011-05-26 87 views
0

我有我試圖解決一個問題,我一直在試圖使用mRowId意圖下面,我一直在不斷地從fetchDrug()上的logcat返回一個NullPointerException獲取我的數據。如何在android中「打印」變量來檢查我的代碼?

使用調試做一些故障排除,我已經意識到我的變量mRowId不爲空,且其指向的東西,但我不知道它的指向。

我如何檢查什麼是我的變量mRowId指點?或者通常這些變量是無法理解的胡言亂語?

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.drug_info); 

     //Defining the views 
     mDrugText = (TextView) findViewById(R.id.drug); 
     mContentText = (TextView) findViewById(R.id.content); 

     Bundle extras = getIntent().getExtras(); 

     mRowId = extras.getLong(DrugsDbAdapter.KEY_ROWID); 

     if(mRowId == null) { 

      Log.e("mRowId is null", "ok"); 

     } else { 

     Cursor drug = mDbHelper.fetchDrug(mRowId); 

     //Managing Cursor to pluck values to display 
     startManagingCursor(drug); 

     mDrugText.setText(drug.getString(drug.getColumnIndexOrThrow(DrugsDbAdapter.KEY_DRUG))); 

     mContentText.setText(drug.getString(drug.getColumnIndexOrThrow(DrugsDbAdapter.KEY_CONTENT))); 

    } 
    } 

回答

1

而不是使用printf,請使用SDK中現有的log功能。

輸出將出現在Eclipse的logcat的窗口(可能是最好的選擇,因爲它是合理的實時性和可過濾顯示),也可以手動拉註銷設備/仿真器。

例如:

Log.i ("MyApp", "Drug = " + drug.getString (drug.getColumnIndexOrThrow (DrugsDbAdapter.KEY_DRUG))); 
+0

感謝RivieraKid,他們不教,在書!現在我明白了 ! – jamen 2011-05-27 02:33:00

1

使用eclipse的調試功能,一步步走過代碼。它給出了所有變量的值。

1

通常對象將有一個「的toString()」方法來表示以人可讀形式的對象;你可以將它傳遞給Log.e()調用。在你的情況下,它看起來是一個數字(長)而不是一個對象,所以你可以直接在你的日誌中顯示它。

一旦你知道你想要獲取的行標識,你可以通過檢查你的數據庫來驗證它的有效性(使用模擬器中內置的sqlite3命令,或者將文件提取到你的開發機器上並使用任何無數的sqlite工具)。

如果行ID是有效的,我建議你尋找到你的數據庫助手代碼,看看如何fetchDrug()方法是使用它。這是可能的空指針無關與參數,但在該方法的其他項目。