通讯录查询- Android根据姓名来查找电话问题

问题描述

Android根据姓名来查找电话问题

大家好!刚学Android,刚写了一个根据姓名来查找电话的小程序,有如下问题,希望各位指导一下,谢谢,麻烦说的详细一点,再次感谢。
问题(logcat):

1、Can't open keycharmap file
2、Error loading keycharmap file '/system/usr/keychars/cyttsp-i2c.kcm.bin'. hw.keyboards.65542.devname='cyttsp-i2c'
3、Using default keymap: /system/usr/keychars/qwerty.kcm.bin

代码:

public class MainActivity extends Activity {
    private Button b1;
    private EditText myEditText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         b1 = (Button)findViewById(R.id.Button01);

         myEditText = (EditText)findViewById(R.id.EditText01);
         b1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 String name = myEditText.getText().toString();
                 Bundle data = new Bundle();
                 data.putString("name", name);

                 Intent intent = new Intent(MainActivity.this,ResultActivity.class);
                 intent.putExtras(data);
                 startActivity(intent);
            }
        });

    }
}

public class ResultActivity extends Activity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        //String id;
        //ContentResolver contentResolver = this.getContentResolver();
        //Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,
        //  new String[]{android.provider.ContactsContract.Contacts._ID}, null, null, null);
                //while(cursor.moveToNext()) {
        //  id=cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID));
        tv = (TextView)findViewById(R.id.TextView02);
        Intent intent = getIntent();
        Bundle b = intent.getExtras();
        String uName = b.getString("name");

        boolean isQueryAll = false;
        // cu姓名游标,cn电话号码游标
        Cursor cu, cn = null;
        // 查询条件,SQL是的Where语句的后部分
        String selection = null; 

        Uri contacts =ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        Uri con= ContactsContract.Contacts.CONTENT_URI;
        uName = uName.trim();
        // 是否查询全部通讯录,如果姓名为空则是
        isQueryAll = uName.equals("") ? true : false; 

        if (isQueryAll) {
            // 查询全部时的,查询条件,主要用在cu游标上
            selection = ContactsContract.Data.MIMETYPE
                    + "='"
                    + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
                    + "'";
            //System.out.println("Query For ALl--" + selection);
        } else {
            // 根据姓名查询时的,查询条件,主要用在cu游标上
            selection = ContactsContract.Data.MIMETYPE
                    + "='"
                    + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
                    + "'"
                    + " AND "
                    + ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME
                    + " LIKE " + "'%" + uName + "%'";
            //System.out.println("Query For Some--" + selection);
        } 

        try {
            // 根据姓名查询出完整姓名和通讯录ID 

            cu = getContentResolver()
                    .query(
                            con,
                            new String[] {
                                    ContactsContract.Data.RAW_CONTACT_ID,
                                    ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME },
                            selection, null, null);
            // 根据通讯录ID,查找对应的电话号码的查询条件,主要用于cn游标
            selection = ContactsContract.Data.MIMETYPE + "='"
                    + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
                    + "'"
                    + " AND "
                    + ContactsContract.Data.RAW_CONTACT_ID
                    + "=?";
            //System.out.println("Number Query--" + selection);
            while (cu.moveToNext()) {
                String contactId = String.valueOf(cu.getInt(0));
                // 开始查找电话号码
                //System.out.println("  Start Query Num");
                cn = getContentResolver()
                        .query(
                                 contacts,
                                new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER },
                                selection, new String[] { contactId }, null); 

                while (cn.moveToNext()) {
                    // 将一组通讯录记录在HashMap中
                   // HashMap<String, String> map = new HashMap<String, String>();
                   // map.put("display_name", cu.getString(1));
                    //map.put("phone_number", cn.getString(0));
                    // 将查到通讯录添加到List中
                   // list.add(map);
                    String name1 = cu.getString(1);
                    String number = cn.getString(0);
                    tv.setText(name1+":"+number);
                }
            }
            //关闭游标
            cu.close();
            cn.close();
        } catch (Exception e) {
            // TODO: handle exception
        }
        //String[] projection = new String[] { People._ID,
        //      People.NAME, People.NUMBER };
        //String[] projection = new String[] { ContactsContract.Contacts._ID,
        //      ContactsContract.Contacts.DISPLAY_NAME };

        //Uri contacts = People.CONTENT_URI;
        //Uri contacts =Phone.CONTENT_URI;
        //Uri contacts =ContactsContract.Data.CONTENT_URI;
         //Uri contacts = ContactsContract.Contacts.CONTENT_URI;
        //Uri contacts =ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        //  String[] args = {name};

        //Cursor managedCursor = managedQuery(contacts, projection,
            //  "name=?",
                //args,
        //      People.NAME + " ASC");
                //ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
        //Uri contactUri = ContactsContract.Contacts.CONTENT_URI;

      //  String[] PROJECTION = new String[] {

           //     ContactsContract.Contacts._ID,

           //     ContactsContract.Contacts.DISPLAY_NAME,

            //    ContactsContract.Contacts.HAS_PHONE_NUMBER

    //    };

    //String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'";
    //String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'";

        //Cursor managedCursor = managedQuery(contacts, projection, "name=?", args,
        //ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
            //Cursor phoneCursor = contentResolver.query(
            //  android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            //  null, android.provider.ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+id, null, null);

            //if(managedCursor.moveToFirst()){
            //  String name1 = managedCursor.getString(1);
            //  String number = managedCursor.getString(2);
            //  tv.setText(name1+":"+number);
            //}

    }
}

解决方案

现在正在学习 过来顶一个 不错哦!继续努力加油!

解决方案二:

我遇到过这样的问题

Android:label的值必须是字符串资源,不可以是硬编码字符串。

解决方案三:

路过!学理的就是好呀

解决方案四:

真心厉害,软件高手,向你致敬!

时间: 2024-10-30 21:39:36

通讯录查询- Android根据姓名来查找电话问题的相关文章

如何将CSS媒体查询用于桌面网站、移动电话和平板电脑

实现响应式设计的主要途径是使用 CSS 媒体查询.在本文中,我们将了解如何将媒体查询用于桌面网站.http://www.aliyun.com/zixun/aggregation/28200.html">移动电话和平板电脑. 现今每天都有更多的手机和平板电脑问市.消费者能够拥有可想象到的各种规格和形状的设备,但是网站开发人员却面临一个挑战:如何使他们的网站在传统浏览器.手机和平板电脑浏览器上有很好的效果,如何在各种大小的屏幕上提供一流的用户体验,答案是:采用响应式设计.响应式设计可以随所显示

jsp-JSP页面添加一个“查询”按钮,查询条件为“姓名”反正就是字符串就行

问题描述 JSP页面添加一个"查询"按钮,查询条件为"姓名"反正就是字符串就行 JSP页面添加一个"查询"按钮,查询条件为"姓名"反正就是字符串就行,应该怎么写,对应的action和daoa怎么写?求代码~最主要,我是想知道,字符串怎么传值的,数据类型转换吗?所以我想看看代码..我用的是ssh架构,IntelliJ IDEA 10.5工具,拜托各位大神啦 解决方案 就正常的提交请求呀,和增删查改一样的 解决方案二: 很简单,按

代码-JSP页面添加一个“查询”按钮,查询条件为“姓名”反正就是字符串就行,我想知道,字符串怎么传值的

问题描述 JSP页面添加一个"查询"按钮,查询条件为"姓名"反正就是字符串就行,我想知道,字符串怎么传值的 JSP页面添加一个"查询"按钮,查询条件为"姓名"反正就是字符串就行,应该怎么写,对应的action和daoa怎么写?求代码~**最主要,我是想知道,字符串怎么传值的,数据类型转换吗?所以我想看看代码**..我用的是ssh架构,IntelliJ IDEA 10.5工具,拜托各位大神啦 解决方案 最简单的就是通过表单传值h

我要获取anroid系统,&amp;amp;quot;是否开启了默认锁屏&amp;amp;quot;,在android api中未查找到参数,如下图.

问题描述 我要获取anroid系统,"是否开启了默认锁屏",在android api中未查找到参数,如下图. 我开始想通过"Settings.System.getInt"来获取参数,但读了anroid api下Settings.System的参数,没找着合适的,各位大神,有没有好办法 解决方案 http://www.2cto.com/kf/201404/296615.html

如何查询Android.jar中HttpClient的版本?

问题描述 如题,如何查询Android.jar中HttpClient的版本?在使用Httpclient的时候,发现不同的Httpclient版本差异很大.因此想知道Android4.2和Android4.4上Httpclient的版本号.哪位知道?

Android无需申请权限拨打电话的两种方式_Android

Android打电话有两种实现方法: 第一种方法,拨打电话跳转到拨号界面.源代码如下: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data = Uri.parse("tel:" + "135xxxxxxxx"); intent.setData(data); startActivity(intent); 第二种方法,拨打电话直接进行拨打,但是有些第三方rom(例如:MIUI),不会直接进行拨打,而是要用户进

Android无需申请权限拨打电话的两种方式

Android打电话有两种实现方法: 第一种方法,拨打电话跳转到拨号界面.源代码如下: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data = Uri.parse("tel:" + "135xxxxxxxx"); intent.setData(data); startActivity(intent); 第二种方法,拨打电话直接进行拨打,但是有些第三方rom(例如:MIUI),不会直接进行拨打,而是要用户进

通讯录-基于Android蓝牙数据传输

问题描述 基于Android蓝牙数据传输 基于Android蓝牙数据传输 以及基于Android蓝牙通讯录的传导 和基于Android蓝牙聊天室

SQL 查询性能优化 解决书签查找_MsSql

先来看看什么是书签查找: 当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求.对一个有聚簇索引的表来说是一个键查找(key lookup),对一个堆表来说是一个RID查找(RID lookup).这种查找即是--书签查找. 书签查找根据索引的行定位器从表中读取数据.因此,除了索引页面的逻辑读取外,还需要数据页面的逻辑读取. 从索引的行定位器到从表中读取数据这之间会产生一些额外的开销,本文就来解决这个开销. 先看下我的测试表结构: 其中可