2010-12-03 37 views
0

c'est le code que j'ai, mais à chaque fois que je clique sur le contact, il se ferme. et y a-t-il un code pour que lorsque je reçois le contact, il l'ajoute dans une vue de texte? Public static final Chaîne TAG = "ContactManager";comment obtenir le numéro de contact en mode texte?

private Button mAddAccountButton; 
private ListView mContactList; 
private boolean mShowInvisible; 
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.main2); 

    // Obtain handles to UI objects 
    mAddAccountButton = (Button) findViewById(R.id.AddContact); 
    mContactList = (ListView) findViewById(R.id.ContactList); 
    mShowInvisibleControl = (CheckBox) findViewById(R.id.ShowInvisible); 

    // Initialize 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(); 
     } 
    }); 

    // 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.main, cursor, 
      fields, new int[] {R.id.TextView01}); 
    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; 
    String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME 
    }; 
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + 
      (mShowInvisible ? "0" : "1") + "'"; 
    String[] selectionArgs = null; 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

    return 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,Class1.class); 
    startActivity(i); 
} 

}

+0

Veuillez fournir un logcat. –

+1

est facile à oublier – Kennet

Répondre

0

basé sur mon expérience avec la liste des contacts, vous devez concevoir votre requête en fonction de ce qui est disponible. En 1.6, il y avait la simplicité d'une table avec toutes les informations. Toutefois; avec l'aube de 2.0, ils ont présenté deux tables. Où vous obtenez l'ID d'une table et la requête basée sur cet ID pour trouver le numéro de téléphone. Pour illustrer ceci, voici un exemple de code qui a fonctionné pour moi, bien que j'ai quelques problèmes mineurs où certains contacts ne renverront pas un numéro de téléphone 2/70 bien que tous les 70 utilisateurs aient un ID et un numéro de téléphone. J'espère que cela aide:

// look up contact via name 

      String name = contacts.getItem(arg1); 
    Uri lookup = Uri.withAppendedPath(
      ContactsContract.Contacts.CONTENT_FILTER_URI, name); 

    // look up id 
    Cursor c = getContentResolver().query(lookup, null, null, null, null); 
    String id = null; 
    int id_index = c.getColumnIndexOrThrow(ContactsContract.Contacts._ID); 
    if (c.moveToFirst()) 
     id = c.getString(id_index); 
    else 
     Toast.makeText(getApplicationContext(), "Friend not found", 
       Toast.LENGTH_SHORT).show(); 
    c.close(); 

    // use id if not null, to find contact's phone number/display name 
    if (id != null) { 
     String where = ContactsContract.Data.CONTACT_ID + " = " + id 
       + " AND " + ContactsContract.Data.MIMETYPE + " = '" 
       + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE 
       + "'"; 

     c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, 
       null, where, null, null); 

     c.moveToFirst(); 

     int iname = c 
       .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME); 
     int iphone = c 
       .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER); 

     if (c.getCount() > 0) { 
      _friend.setName(c.getString(iname)); 
      _friend.setPhone(c.getString(iphone)); 

Si vous avez d'autres questions, s'il vous plaît ne pas hésiter à demander, je ferai de mon mieux pour y répondre. Car ce que je peux dire sans un chat de journal est que vous essayez une recherche du numéro de téléphone la structure de table appropriée pour la requête. Si vous essayez d'accéder aux informations d'une requête qui a retourné 0 lignes, vous obtiendrez une exception. Veuillez lire cette erreur et l'afficher.

+0

L'application juste maintenu forcecloseing. Ai-je besoin de supprimer l'autre code? – Christian

0

Vous devez utiliser pour tous les e-mail, numéros de téléphone, Web-adresse, etc.

Exemple:

Linkify.addLinks (textview, Linkify.WEB_URLS);

  1. Paramètre: textview que vous ajoutez chaîne
  2. Quelle chose que vous voulez suivre email, téléphone ou web

Pour plus de détails: http://developer.android.com/reference/android/text/util/Linkify.html

Note: pour cela, vous ne besoin de mettre en œuvre tout onClick etc. Linkif gérer automatiquement.