我创建了一个ContactManager.java,用于显示来自手机的所有联系人详细信息,SingleListContact用于显示所点击的联系人之一。到现在为止,我能够获得联系人姓名但不能联系电子邮件,任何大师都可以帮助我吗?
我的ContactManager.java
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.contactmanager;
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.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public final class ContactManager extends Activity implements OnItemClickListener
{
public static final String TAG = "ContactManager";
private Button mAddAccountButton;
private ListView mContactList;
private boolean mShowInvisible;
//public BooleanObservable ShowInvisible = new BooleanObservable(false);
private CheckBox mShowInvisibleControl;
/**
* Called when the activity is first created. Responsible for initializing the UI.
*/
@Override
public void onCreate(Bundle savedInstanceState)
{
Log.v(TAG, "Activity State: onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_manager);
// Obtain handles to UI objects
mAddAccountButton = (Button) findViewById(R.id.addContactButton);
mContactList = (ListView) findViewById(R.id.contactList);
mShowInvisibleControl = (CheckBox) findViewById(R.id.showInvisible);
// Initialise class properties
mShowInvisible = false;
mShowInvisibleControl.setChecked(mShowInvisible);
// Register handler for UI elements
mAddAccountButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "mAddAccountButton clicked");
launchContactAdder();
}
});
mShowInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
Log.d(TAG, "mShowInvisibleControl changed: " + isChecked);
mShowInvisible = isChecked;
populateContactList();
}
});
mContactList = (ListView) findViewById(R.id.contactList);
mContactList.setOnItemClickListener(this);
// Populate the contact list
populateContactList();
}
/**
* Populate the contact list based on account currently selected in the account spinner.
*/
private void populateContactList() {
// Build adapter with contact entries
Cursor cursor = getContacts();
String[] fields = new String[] {
ContactsContract.Data.DISPLAY_NAME,
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor,
fields, new int[] {R.id.contactEntryText});
mContactList.setAdapter(adapter);
}
/**
* Obtains the contact list for the currently selected account.
*
* @return A cursor for for accessing the contact list.
*/
private Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
//Log.i("Uri ContactsContract.Contacts.CONTENT_URI" + ContactsContract.Contacts.CONTENT_URI, null, null);
String[] projection = new String[]
{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Email.DATA,
// ContactsContract.CommonDataKinds.StructuredPostal.DATA1
//ContactsContract.CommonDataKinds.Phone.DATA
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + (mShowInvisible ? "0" : "1") + "'";
//String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + (mShowInvisible.get() ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return this.managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
/**
* Launches the ContactAdder activity to add a new contact to the selected account.
*/
protected void launchContactAdder()
{
Intent i = new Intent(this, ContactAdder.class);
startActivity(i);
}
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
Log.i("TAG", "You clicked item " + id + " at position " + position);
// Here you start the intent to show the contact details
// selected item
//String contactDetails = (String)(mContactList.getItemAtPosition(position));
//Uri contactDetails = ContactsContract.Contacts.CONTENT_URI;
Cursor cursor = getContacts();
cursor.moveToPosition(position);
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
// Log.i("Address", "Testing" + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)));
// Launching new Activity on selecting single List Item
Intent i = new Intent(getApplicationContext(), SingleListContact.class);
// SingleListContact.PutDetails(ContactsContract.Contacts._ID, name, address, position, null, null);
SingleListContact.PutDetails(ContactsContract.Contacts._ID, name, email);
Log.i("Show Contact Clicked: ", name + "Email: " + cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
// sending data to new activity
//i.putExtra("Contact Person", contactDetails);
startActivity(i);
}
}
以及SingleListContact.java
package com.example.android.contactmanager;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
public class SingleListContact extends Activity {
static int ContactPhone;
static String ContactID, ContactName, ContactEmail, ContactAddress;
//@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.single_list_contact_view);
EditText txtContact = (EditText) findViewById(R.id.editText1);
txtContact.setText(ContactName);
// txtContact.setText(ContactEmail);
Log.e("ContactEmail: " , ContactEmail);
// EditText txtContact2 = (EditText) findViewById(R.id.editText2);
// txtContact2.setText(ContactPhone);
EditText txtContact3 = (EditText) findViewById(R.id.editText3);
txtContact3.setText(ContactEmail);
//
//
// EditText txtContact4 = (EditText) findViewById(R.id.editText4);
// txtContact4.setText(ContactAddress);
ImageView myImg= (ImageView) findViewById(R.id.imageView1);
myImg.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
//Launch Intent or whatever you want here
Log.e("GeoTag Button", "Clicked!");
//
double latitude = 13.042206;
double longitude = 80.17000;
Uri uri = Uri.parse("geo:" + latitude + "," + longitude +"?z=10");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
}
static void PutDetails (String id, String name, String email)
{
ContactID = id;
ContactName = name;
//ContactPhone = phone;
ContactEmail = email;
// ContactAddress = address;
}
}
logcat:
12-05 05:00:31.289: E/AndroidRuntime(642): FATAL EXCEPTION: main
12-05 05:00:31.289: E/AndroidRuntime(642): java.lang.NullPointerException
12-05 05:00:31.289: E/AndroidRuntime(642): at com.example.android.contactmanager.ContactManager.onItemClick(ContactManager.java:148)
12-05 05:00:31.289: E/AndroidRuntime(642): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
12-05 05:00:31.289: E/AndroidRuntime(642): at android.widget.ListView.performItemClick(ListView.java:3513)
12-05 05:00:31.289: E/AndroidRuntime(642): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
12-05 05:00:31.289: E/AndroidRuntime(642): at android.os.Handler.handleCallback(Handler.java:587)
12-05 05:00:31.289: E/AndroidRuntime(642): at android.os.Handler.dispatchMessage(Handler.java:92)
12-05 05:00:31.289: E/AndroidRuntime(642): at android.os.Looper.loop(Looper.java:123)
12-05 05:00:31.289: E/AndroidRuntime(642): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-05 05:00:31.289: E/AndroidRuntime(642): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 05:00:31.289: E/AndroidRuntime(642): at java.lang.reflect.Method.invoke(Method.java:507)
12-05 05:00:31.289: E/AndroidRuntime(642): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-05 05:00:31.289: E/AndroidRuntime(642): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-05 05:00:31.289: E/AndroidRuntime(642): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
您无法从Cursor检索电子邮件ID,因为目前您没有从contentprovider查询电子邮件列,因此请将您的代码更改为:
private Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[]
{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.Email.DATA //<< query email data here
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP
+ " = '" + (mShowInvisible ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return this.managedQuery(uri, projection,
selection, selectionArgs, sortOrder);
}
现在,您可以在ListView onItemClick方法
中获取电子邮件ID