如何解决如何在android中“ printf”变量检查我的代码?
| 我有一个要解决的问题,我一直在尝试使用mRowId从意图中获取数据,在该意图下,我一直在LogCat上从fetchDrug()返回NullPointerException。 通过调试进行故障排除,我已经意识到我的变量mRowId不是Null,并且指向的是某个东西,但我不知道它的指向。 我如何检查我的变量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)));
}
}
解决方法
代替printf,使用SDK中现有的日志功能。
输出将出现在Eclipse的logcat窗口中(可能是最佳选择,因为它是实时的,并且您可以过滤显示),或者您可以手动将日志从设备/仿真器中拉出。
例如:
Log.i ( \"MyApp\",\"Drug = \" + drug.getString ( drug.getColumnIndexOrThrow ( DrugsDbAdapter.KEY_DRUG ) ) );
,使用eclipse的调试功能,逐步遍历代码。它给出了所有变量的值。
,通常,对象会使用\“ toString()\”方法以人类可读的形式表示对象;您可以将其传递给Log.e()调用。在您的情况下,它似乎是数字(长整数)而不是对象,因此您可以直接在日志中显示它。
知道要提取的行ID后,您可以通过检查数据库(使用仿真器中内置的sqlite3命令,或将文件提取到开发计算机中,然后使用任何无数sqlite来验证其有效性)。工具)。
如果行ID有效,则建议您查看数据库帮助程序代码,以了解fetchDrug()方法如何使用它。空指针可能与参数无关,但与该方法中的其他项目无关。
,这里有几个可供考虑的选项:
选项1:在Eclipse的onCreate中设置一个断点。您可以在此处找到有关在Eclipse中调试Android应用程序的更多详细信息:http://developer.android.com/guide/developing/debugging/debugging-projects.html
选项2:将Log语句添加到您的代码中,并在logcat中查看输出。您可以在此处阅读有关登录Android的更多信息:http://developer.android.com/reference/android/util/Log.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。