读书人

这个Android的示例程序运行出错来看

发布时间: 2012-02-09 18:22:27 作者: rapoo

这个Android的示例程序运行出错,高手进来看一下。
Activity01.java

Java code
package com.yarin.android.Examples_03_02;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.widget.TextView;public class Activity01 extends Activity{    public void onCreate(Bundle savedInstanceState)    {        TextView tv = new TextView(this);        String string = "";                super.onCreate(savedInstanceState);            //得到ContentResolver对象        ContentResolver cr = getContentResolver();          //取得电话本中开始一项的光标        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);        //向下移动一下光标        while(cursor.moveToNext())         {             //取得联系人名字            int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);                 String contact = cursor.getString(nameFieldColumnIndex);             //取得电话号码            int numberFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);                String number = cursor.getString(numberFieldColumnIndex);                        string += (contact+":"+number+"\n");        }        cursor.close();        //设置TextView显示的内容        tv.setText(string);        //显示到屏幕        setContentView(tv);    }}

本人才开始自学Android,这是《Android应用开发揭秘》中的示例源代码,上面贴的是主要代码,完整项目文件可到这个链接下载http://d.download.csdn.net/down/2263464/leejiang1982 。我不知道到底哪里出错了,才开始学,不是很懂。希望有高手能下载代码后运行一下,看一下到底哪里出错了。

[解决办法]
你的androidManefest.xml写错了,导致无法在launcher界面显示icon

错误的:
android.intent.action.Main
正确的:
android.intent.action.MAIN

其他的,代码本身没有问题。
[解决办法]
int numberFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);

这句出错了,数据库中,contacts这张表中,不存在numbers这一列.

书上的例子大多跟不上时代了,建议你自己去
android.git.kernel.org/ 去下载source code去看吧

如果你是初学者,就不要看书了,把sdk目录下的/doc/index.html打开
按照:dev guide->referrence->resource这个顺序看一遍,比看10本书都管用
[解决办法]
检查数据库,应该是没有这一列了。
[解决办法]
PhoneLookup.NUMBER ,这个是字符串常量,它的值是"number" ,而getColumnIndex(String columnName)
Returns the zero-based index for the given column name, or -1 if the column doesn't exist.
这个方法是返回一个从0开始计数的列号,如果没有这个列,则反回-1
你的代码里
//取得电话号码
int numberFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);
String number = cursor.getString(numberFieldColumnIndex);
第一句是取得列号,这句能正确执行,numberFieldColumnIndex的值此时为-1,因为没有"number"这个列
第二句,要据列号取得值,-1显然不是个正确的列号,报错.
我也是刚学的
[解决办法]
在while (cursor.moveToNext())之前最好先cursor.moveToFirst()一下。
典型用法是这样:
if (cursor.moveToFirst()) {
do {
....
while (cursor.moveToNext());
[解决办法]
if (cursor!=null&&cousor.getCount()>0) {
do {
....
while (cursor.moveToNext());
[解决办法]
拿着源码熟悉环境的方法的确是最可行的办法之一。但是越是在这种情况下出错了。就越是要自己想办法找原因。初学者最好的经验来源与此

读书人网 >Android

热点推荐