最近在学习关于联系人的使用,要做一个关于根据姓查询联系人的简单应用。在进行开发时参考的的是一本比较“古老的”android资料,结果发现再运行时报错。经过一系列查找资料的努力后,终于弄清了问题所在。
自从android2.0开始,联系人API做了很大的改动,这些之前我并不清楚,但是在经历这件事之后我才弄明白。 点击查看
下面就是具体代码:
BundleActivity:
package com.android.ba; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class BundleActivity extends Activity { private Button mybutton; private EditText myedittext; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mybutton=(Button) findViewById(R.id.button01); myedittext=(EditText) findViewById(R.id.edittext01); mybutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub
//获得姓名字符串 String name=myedittext.getText().toString();
//实例化Bundle对象 Bundle data=new Bundle();
//添加信息 data.putString("name", name);
//实例化Intent Intent intent=new Intent(BundleActivity.this, secondActivity.class); intent.putExtras(data); startActivity(intent); } }); } }
secondActivity:
package com.android.ba; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.widget.TextView; public class secondActivity extends Activity { private TextView textview; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.show); textview=(TextView) findViewById(R.id.textview02); Intent intent=getIntent(); Bundle b=intent.getExtras(); String name=b.getString("name");
//查询返回的项目 String[] projection=new String[] { ContactsContract.Contacts._ID,ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER}; //设置需要返回的索引资源(Sqlite数据库) Uri contacts=ContactsContract.CommonDataKinds.Phone.CONTENT_URI; //需要查询的姓名 String[] args={name}; Cursor managedCursor=managedQuery(contacts, projection, ContactsContract.PhoneLookup.DISPLAY_NAME+"=?", args, ContactsContract.PhoneLookup.DISPLAY_NAME); if(managedCursor.moveToFirst()) { String name1=managedCursor.getString(1); String number=managedCursor.getString(2); textview.setText(name1+":"+number); } } }
main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview01" android:text="请输入姓名" > </TextView> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/edittext01" android:text="" > </EditText> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button01" android:text="查询" > </Button> </LinearLayout>
show.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview02" android:text=""> </TextView> </LinearLayout>
Manifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.ba" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".BundleActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="secondActivity"></activity> </application>
<uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> </manifest>
下面是managedQuery的详细解析:。 点击查看