2012-12-26 75 views
1

我創建了一個ContactManager.java,用於顯示手機中的所有聯繫人詳細信息,SingleListContact用於顯示單擊的聯繫人之一。到目前爲止,我能夠獲得聯繫人姓名,但不能聯繫電子郵件,任何專家都可以幫助我?Android:無法獲取電子郵件的詳細信息

我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) 

回答

1

你是不是能夠從遊標檢索電子郵件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); 
} 

現在你能得到的電子郵件ID ListView中onItemClick方法

+0

是你的意思是:ContactsContract.CommonDataKinds.Email.DATA? –

+0

@SeanTan:是的,直到電子郵件列不存在於光標然後它不可能得到它 –

+0

這是我發現奇怪的,在添加ContactsContract.CommonDataKinds.Email.DATA後,它仍然崩潰 –

相關問題