2013-08-22 1 views
0

get propriétaire nom d'utilisateur et le numéro de téléphone en utilisant le gestionnaire de compte dans Androidobtenir le nom de l'utilisateur propriétaire et le numéro de téléphone en utilisant le gestionnaire de compte android

voici mon code ..

public void OwnerInfo() { 

    final AccountManager manager = AccountManager.get(this); 
     final Account[] accounts = manager.getAccountsByType("com.google"); 
     final int size = accounts.length; 
     String[] names = new String[size]; 
     for (int i = 0; i < size; i++) { 
      names[i] = accounts[i].name; 
     } 
     if (names[0] != null) { 
      accountName = names[0]; 

      ContentResolver cr = this.getContentResolver(); 
      Cursor emailCur = cr.query(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Email.DATA + " = ?", 
        new String[] { accountName }, null); 
      while (emailCur.moveToNext()) { 
       id = emailCur 
         .getString(emailCur 
           .getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID)); 
       email = emailCur 
         .getString(emailCur 
           .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       String newName = emailCur 
         .getString(emailCur 
           .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (name == null || newName.length() > name.length()) 
        name = newName; 

       Log.v("Got contacts", "ID " + id + " Email : " + email 
         + " Name : " + name); 
      } 

      emailCur.close(); 
      if (id != null) { 

       // get the phone number 
       Cursor pCur = cr.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
           + " = ?", new String[] { id }, null); 
       while (pCur.moveToNext()) { 
        phone = pCur 
          .getString(pCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        Log.v("Got contacts", "phone" + phone); 
       } 
       pCur.close(); 
      } 
     } 
    } 

mais son spectacle l'erreur ..

08-22 11:47:36.392: E/AndroidRuntime(434): FATAL EXCEPTION: main 
08-22 11:47:36.392: E/AndroidRuntime(434): java.lang.ArrayIndexOutOfBoundsException 
08-22 11:47:36.392: E/AndroidRuntime(434): at com.param.calltracker.SettingsActivity.OwnerInfo(SettingsActivity.java:142) 
08-22 11:47:36.392: E/AndroidRuntime(434): at com.param.calltracker.SettingsActivity$1.onClick(SettingsActivity.java:78) 
08-22 11:47:36.392: E/AndroidRuntime(434): at android.view.View.performClick(View.java:2485) 
08-22 11:47:36.392: E/AndroidRuntime(434): at android.view.View$PerformClick.run(View.java:9080) 
08-22 11:47:36.392: E/AndroidRuntime(434): at android.os.Handler.handleCallback(Handler.java:587) 
08-22 11:47:36.392: E/AndroidRuntime(434): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-22 11:47:36.392: E/AndroidRuntime(434): at android.os.Looper.loop(Looper.java:123) 
08-22 11:47:36.392: E/AndroidRuntime(434): at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-22 11:47:36.392: E/AndroidRuntime(434): at java.lang.reflect.Method.invokeNative(Native Method) 
08-22 11:47:36.392: E/AndroidRuntime(434): at java.lang.reflect.Method.invoke(Method.java:507) 
08-22 11:47:36.392: E/AndroidRuntime(434): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-22 11:47:36.392: E/AndroidRuntime(434): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-22 11:47:36.392: E/AndroidRuntime(434): at dalvik.system.NativeStart.main(Native Method) 

où est l'erreur dans mes code..pls me aider ..

+0

Qu'est-ce que la ligne 142? –

+0

if (noms [0]! = Null) { – chimbu

+0

Il semble que les noms de tableaux n'ont aucune valeur. Courez-vous sur l'émulateur? Vérifiez si le compte google est présent ou non –

Répondre

0

Ce code donnera les informations du propriétaire complet
Essayez cette code: -

public class EmailFetcher { 



     static String getName(Context context) { 
      Cursor CR=null; 
      CR=getOwner(context); 
      String id="",name=""; 
      while (CR.moveToNext()) { 
       name = CR 
         .getString(CR 
           .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      } 

      return name; 
     } 
     static String getEmailId(Context context) { 

      Cursor CR=null; 
      CR=getOwner(context); 
      String id="",email=""; 
      while (CR.moveToNext()) { 
       id = CR.getString(CR 
         .getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID)); 
       email = CR 
         .getString(CR 
           .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
      } 
      return email; 
    } 


     static Cursor getOwner(Context context) { 

      String accountName = null; 
      Cursor emailCur=null; 
      AccountManager accountManager = AccountManager.get(context); 
      Account[] accounts = accountManager.getAccountsByType("com.google"); 
      if (accounts[0].name != null) { 
       accountName = accounts[0].name; 
       String where = ContactsContract.CommonDataKinds.Email.DATA + " = ?"; 
       ArrayList<String> what = new ArrayList<String>(); 
       what.add(accountName); 
       Log.v("Got account", "Account " + accountName); 
       for (int i = 1; i < accounts.length; i++) { 
        where += " or " + ContactsContract.CommonDataKinds.Email.DATA + " = ?"; 
        what.add(accounts[i].name); 
        Log.v("Got account", "Account " + accounts[i].name); 
       } 
       String[] whatarr = (String[]) what.toArray(new String[what.size()]); 
       ContentResolver cr = context.getContentResolver(); 
       emailCur = cr.query(
         ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
         where, 
         whatarr, null); 

       /* if (id != null) { 

        // get the phone number 
        Cursor pCur = cr.query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
            + " = ?", new String[]{id}, null); 
        while (pCur.moveToNext()) { 
         phone = pCur 
           .getString(pCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         Log.v("Got contacts", "phone" + phone); 
        } 
        pCur.close(); 
       }*/ 
      } 
      return emailCur; 
     } 
} 
+1

l'objet compte a seulement deux propriétés nom qui est le nom du compte, pas le nom du propriétaire comme: facebook, twitter, [email protected] etc .. et tapez la propriété. sans lire le reste de votre code, vous ne pouvez pas extraire le nom du propriétaire de cet objet –

Questions connexes