关于获取dialog中edittext的值问题

          昨天在写向通讯录中添加联系人的小demo得时候,出现了一个问题。
因为我是想在添加联系人的时候,弹出一个dialog用来接收用户新输入的联系人信息。写完之后发现,联系人中并没有新添加的联系人,而是多了一个名叫(未知)的联系人,而且电话号码为空。
经过一段时间的查找排爆,才发现。dialog中的布局我自定的View,所以在进行布局解析的时候,一定要让这个view变成final形式。(第6行)
否则的话,点击之后,临时字符串并不能获取edittext中的值,反而是个空值。(第10、11行)


    private void myDialog() {
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);


        LayoutInflater inflater =LayoutInflater.from(this);
        final View layout=inflater.inflate(R.layout.dialog_view,null);
        dialog.setView(layout);
        dialog.setPositiveButton("添加", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                et_name = (EditText) layout.findViewById(R.id.name);
                et_phone = (EditText)layout.findViewById(R.id.phone);
                name = ""+et_name.getText().toString();
                phone = ""+et_phone.getText().toString();
                addFriend(name, phone, MainActivity.this);      //此方法往手机通讯录添加联系人
                Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();

                dialog.cancel();
            }
        });

        dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }

        });
        dialog.show();
    }
    
    
    /*
    相关方法
    */
        public void addFriend(String name, String phone,Context context) {
        ContactTest add = new ContactTest();
        add.testInsert(name, phone, MainActivity.this);

    }
    
    /*
    相关方法
    */
    package liumengbaio.providertest;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.test.AndroidTestCase;

public class ContactTest extends AndroidTestCase{
    private static final String TAG = "ContactTest";

    /**
     * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
     *
     * 这是后面插入data表的数据,只有执行空值插入,才能使插入的联系人在通讯录里可见
     */
    String name,phone;
    public void testInsert(String name, String phone, Context context){
        /* 往 raw_contacts 中添加数据,并获取添加的id号*/
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        ContentResolver resolver = context.getContentResolver();
        ContentValues values = new ContentValues();
        long contactId = ContentUris.parseId(resolver.insert(uri, values));

        /* 往 data 中添加数据(要根据前面获取的id号) */
        // 添加姓名
        uri = Uri.parse("content://com.android.contacts/data");
        values.put("raw_contact_id", contactId);
        values.put("mimetype", "vnd.android.cursor.item/name");
        values.put("data2", name);
        resolver.insert(uri, values);

        // 添加电话
        values.clear();
        values.put("raw_contact_id", contactId);
        values.put("mimetype", "vnd.android.cursor.item/phone_v2");
        values.put("data2", "2");
        values.put("data1", phone);
        resolver.insert(uri, values);
    }

}
    
    
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值