Autore Topic: ottenere nome e numero di cellulare dalla rubrica nella mia app  (Letto 2379 volte)

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
ottenere nome e numero di cellulare dalla rubrica nella mia app
« il: 30 Agosto 2011, 01:55:42 CEST »
0
ciao ,  sto sviluppando la mia terza app , nella quale dovrei implementare le funzioni di chiamata , con un pulsante riesco ad accedere alla rubrica ed accedere al nome , numero di cellulare e e-mail , e renderli disponibili dentro la mia app dentro 2 text view e una edittext (in modo che l'utente possa inserire anche manualmente il numero da chiamare/mandare sms)

fin qui tutto ok sembrerebbe , ma però c'e un però il numero che mi viene restituito non è il numero telefonico del contatto ma mi viene dato un 1 (se il contatto ha un numero collegato ad esso) o 0 (se il contatto non ha nessun numero collegato ad esso)

di seguito ecco il mio codice :
Codice (Java): [Seleziona]
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.provider.Contacts.People;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;

public class PhonecalltestdueActivity extends Activity {
 
 final static int RQS_PICK_CONTACT = 0;
 
 TextView contactName, contactNumber, contactEmail;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       contactName = (TextView)findViewById(R.id.contactname);
       contactNumber = (EditText)findViewById(R.id.contactnumber);
       contactEmail = (TextView)findViewById(R.id.contactemail);
       Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
       buttonPickContact.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, RQS_PICK_CONTACT);
   }});
   }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
 
  if(requestCode == RQS_PICK_CONTACT){
   if(resultCode == RESULT_OK){
    Uri contactData = data.getData();
    Cursor cursor =  managedQuery(contactData, null, null, null, null);
    cursor.moveToFirst();
          String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
          String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
          String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
          contactName.setText(name);
          contactNumber.setText(number);
          contactEmail.setText(email);
   }
  }
 }
}

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/hello"
  />
<Button
  android:id="@+id/pickcontact"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="Sciegli il Contatto"/>
<TextView
  android:id="@+id/contactname"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
<EditText
  android:id="@+id/contactnumber"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:hint="oppure digita qui il numero" android:gravity="center_vertical|center_horizontal"/>
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:id="@+id/contactemail"/>
</LinearLayout>

il manifest molto semplicemente ho aggiunto solo il permesso per accedere ai contatti
Codice (Java): [Seleziona]
 <uses-permission android:name="android.permission.READ_CONTACTS"/>
infine il logcat (anche se non mi da problemi l'app)

Citazione
08-29 23:39:27.243: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity }
08-29 23:39:27.973: INFO/ActivityManager(59): Displayed activity it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity: 535 ms (total 535 ms)
08-29 23:39:29.693: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.PICK dat=content://com.android.contacts/contacts cmp=com.android.contacts/.ContactsListActivity }
08-29 23:39:29.763: INFO/ContactsListActivity(164): Called with action: android.intent.action.PICK
08-29 23:39:30.013: WARN/InputManagerService(59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@450421f8 (uid=10055 pid=466)
08-29 23:39:30.133: INFO/ActivityManager(59): Displayed activity com.android.contacts/.ContactsListActivity: 396 ms (total 396 ms)
08-29 23:39:37.963: WARN/InputManagerService(59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@450421f8 (uid=10055 pid=466)
08-29 23:39:44.153: WARN/InputManagerService(59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@450421f8 (uid=10055 pid=466)
08-29 23:39:44.153: WARN/IInputConnectionWrapper(466): showStatusIcon on inactive InputConnection
08-29 23:39:49.795: DEBUG/dalvikvm(164): GC_EXPLICIT freed 3672 objects / 222768 bytes in 157ms
08-29 23:39:54.753: DEBUG/dalvikvm(466): GC_EXPLICIT freed 2172 objects / 120696 bytes in 81ms

come mai non mi viene visualizzato il numero , percaso devo cambiare
Codice (Java): [Seleziona]
    String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)); o aggiungere qualche altra riga di codice , magari un if che se il contatto da il valore 1 o 0 esegue qualcosa ... grazie mille  ;-)


 ciao

ho appena letto
Citazione
public static final String  HAS_PHONE_NUMBER
 Since: API Level 5

An indicator of whether this contact has at least one phone number. "1" if there is at least one phone number, "0" otherwise.

Type: INTEGER

Constant Value:  "has_phone_number"

l'  HAS_PHONE_NUMBER  serve solo per dare la conferma se c'e un numero o no , quindi sicuramente c'e qualcosa da aggiungere sotto ... vista l'ora però rimando a domani ... ciao
« Ultima modifica: 30 Agosto 2011, 02:14:36 CEST da ALEX88-ANDR0!D »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #1 il: 30 Agosto 2011, 11:04:22 CEST »
+1
vedi se ti può essere utile questo pezzo di codice

Codice (Java): [Seleziona]
    @Override
    public void onActivityResult(int reqCode, int resultCode, Intent data)
    {    
        super.onActivityResult(reqCode, resultCode, data);    
        switch(reqCode)
        {      
                case (3):        
                        if (resultCode == Activity.RESULT_OK)
                        {            
                                Uri contactData = data.getData();            
                                Cursor c = managedQuery(contactData, null, null, null, null);    
                                ContentResolver cr = getContentResolver();

                                if (c.moveToFirst())
                                {                
                                        String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                                       
                                        if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
                                        {
                                Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                                           null,
                                                           ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                                                           new String[]{id}, null);
                                while (pCur.moveToNext()) {
                                        msisdn.append(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+";");  
                                }
                                pCur.close();
                                    }
                                }        
                        }    
        }
    }

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #2 il: 30 Agosto 2011, 19:21:49 CEST »
0
ciao , inanzitutto graze liuk78 ... ho provato ad implementare parte del codice ... ma partiamo dall'inizio

nel mentre questa mattina ho implementato questo codice

Codice (Java): [Seleziona]
import android.app.Activity;
//import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
//import android.provider.Contacts.People; non usato
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;

public class PhonecalltestdueActivity extends Activity {
 
 final static int RQS_PICK_CONTACT = 1;
 
 TextView contactName, contactNumber, contactEmail;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       contactName = (TextView)findViewById(R.id.contactname);
       contactNumber = (EditText)findViewById(R.id.contactnumber);
       contactEmail = (TextView)findViewById(R.id.contactemail);
       Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
       buttonPickContact.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, RQS_PICK_CONTACT);
   }});
   }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
 
  if(requestCode == RQS_PICK_CONTACT){
   if(resultCode == RESULT_OK){
    Uri contactData = data.getData();
    Cursor cursor =  managedQuery(contactData, null, null, null, null);
   // cod liuk78 ContentResolver cr = getContentResolver();
   // cod liuk78 cursortel.moveToFirst();
          String ContactID = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
          String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
   
   //nuovo codice alex
  if(Integer.parseInt(hasPhone) == 1){
              Cursor Cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                      null,
                     ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"='"+ContactID+"'",
                     null, null);
             while(Cursor.moveToNext()){
              String number = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
              String numberType = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
              switch(Integer.parseInt(numberType)){
        //  insert switch cases to handle all types of phone numbers. There are 20 types!
              default:System.out.println("phone number: "+number+"("+numberType+")");
              break;
              }
               
              }
             Cursor.close();
            }else{
             System.out.println("no phone number found");
             }
//fine nuovo codice alex
        // codice prova2 di liuk78
          //  if (Integer.parseInt(cursortel.getString(cursortel.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 1)
          {
 // Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                //             null,
              //               ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                 //            new String[]{}, null);
//  while (pCur.moveToNext()) {
 // contactNumber.append(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+";");  
//}
 // pCur.close();
  //fine codice liuk78
          String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.NUMBER));
          contactName.setText(ContactID);
          contactNumber.setText(hasPhone);
          contactEmail.setText(email);
   }
  }
 }
}
}

ora così se lascio 
Codice (Java): [Seleziona]
 final static int RQS_PICK_CONTACT = 1; (oppure 0 mi da un errore il logcat 
Citazione
08-30 16:52:16.993: INFO/ContactsListActivity(156): Called with action: android.intent.action.PICK
08-30 16:52:17.073: DEBUG/dalvikvm(59): GREF has increased to 401
08-30 16:52:17.393: INFO/ActivityManager(59): Displayed activity com.android.contacts/.ContactsListActivity: 427 ms (total 427 ms)
08-30 16:52:17.443: WARN/InputManagerService(59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@44f4d6d8 (uid=10055 pid=578)
08-30 16:52:17.443: WARN/IInputConnectionWrapper(578): showStatusIcon on inactive InputConnection
08-30 16:52:18.443: DEBUG/AndroidRuntime(578): Shutting down VM
08-30 16:52:18.443: WARN/dalvikvm(578): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-30 16:52:18.463: ERROR/AndroidRuntime(578): FATAL EXCEPTION: main
08-30 16:52:18.463: ERROR/AndroidRuntime(578): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r2-4A4E48562C2980/2 (has extras) }} to activity {it.android.pelli.phonecalltestdue/it.android.pelli.phonecalltestdue.PhonecalltestdueActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.app.ActivityThread.access$2800(ActivityThread.java:125)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.os.Looper.loop(Looper.java:123)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at java.lang.reflect.Method.invokeNative(Native Method)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at java.lang.reflect.Method.invoke(Method.java:521)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at dalvik.system.NativeStart.main(Native Method)
08-30 16:52:18.463: ERROR/AndroidRuntime(578): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.database.CursorWrapper.getString(CursorWrapper.java:135)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at it.android.pelli.phonecalltestdue.PhonecalltestdueActivity.onActivityResult(PhonecalltestdueActivity.java:52)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.app.Activity.dispatchActivityResult(Activity.java:3890)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
08-30 16:52:18.463: ERROR/AndroidRuntime(578):     ... 11 more
08-30 16:52:18.494: WARN/ActivityManager(59):   Force finishing activity it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity
08-30 16:52:19.003: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{44fd16b8 it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity}
08-30 16:52:29.466: WARN/ActivityManager(59): Activity destroy timeout for HistoryRecord{44fd16b8 it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity}

esattamente questo mi ha fatto pensare di mettere il valore -1 al posto di 1 (vedi codice sopra)
Codice: [Seleziona]
08-30 16:52:18.463: ERROR/AndroidRuntime(578): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
così facendo non viene nessun errore , ma non viene stampato a video nulla ne nome/tel
Codice: [Seleziona]
08-30 17:04:19.433: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity }
08-30 17:04:19.644: INFO/ActivityManager(59): Start proc it.android.pelli.phonecalltestdue for activity it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity: pid=614 uid=10055 gids={}
08-30 17:04:20.633: INFO/ActivityManager(59): Displayed activity it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity: 1008 ms (total 1008 ms)
08-30 17:04:22.143: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.PICK dat=content://com.android.contacts/contacts cmp=com.android.contacts/.ContactsListActivity }
08-30 17:04:22.193: INFO/ContactsListActivity(156): Called with action: android.intent.action.PICK
08-30 17:04:22.463: WARN/InputManagerService(59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@44feb830 (uid=10055 pid=614)
08-30 17:04:22.524: WARN/IInputConnectionWrapper(614): showStatusIcon on inactive InputConnection
08-30 17:04:22.583: INFO/ActivityManager(59): Displayed activity com.android.contacts/.ContactsListActivity: 417 ms (total 417 ms)
08-30 17:04:29.303: DEBUG/dalvikvm(117): GC_EXPLICIT freed 1045 objects / 61736 bytes in 134ms

con il codice di liuk78 anche qui ho un errore nel locat (ora non ho il cod perche nel mentre ho mkodificato dinuovo il codice , ma se non ricordo male mi arrivava lo stesso errore con il mio ultimo codice cioè questo

l'errore è questo
Codice: [Seleziona]
08-30 17:14:20.443: INFO/ActivityManager(59): Displayed activity com.android.contacts/.ContactsListActivity: 422 ms (total 422 ms)
08-30 17:14:20.464: WARN/InputManagerService(59): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@44e877f0 (uid=10055 pid=650)
08-30 17:14:20.493: WARN/IInputConnectionWrapper(650): showStatusIcon on inactive InputConnection
08-30 17:14:21.173: DEBUG/AndroidRuntime(650): Shutting down VM
08-30 17:14:21.183: WARN/dalvikvm(650): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-30 17:14:21.195: ERROR/AndroidRuntime(650): FATAL EXCEPTION: main
08-30 17:14:21.195: ERROR/AndroidRuntime(650): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r2-4A4E48562C2980/2 (has extras) }} to activity {it.android.pelli.phonecalltestdue/it.android.pelli.phonecalltestdue.PhonecalltestdueActivity}: java.lang.IllegalArgumentException: column 'number' does not exist
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.app.ActivityThread.access$2800(ActivityThread.java:125)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.os.Looper.loop(Looper.java:123)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at java.lang.reflect.Method.invokeNative(Native Method)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at java.lang.reflect.Method.invoke(Method.java:521)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at dalvik.system.NativeStart.main(Native Method)
08-30 17:14:21.195: ERROR/AndroidRuntime(650): Caused by: java.lang.IllegalArgumentException: column 'number' does not exist
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at it.android.pelli.phonecalltestdue.PhonecalltestdueActivity.onActivityResult(PhonecalltestdueActivity.java:86)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.app.Activity.dispatchActivityResult(Activity.java:3890)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
08-30 17:14:21.195: ERROR/AndroidRuntime(650):     ... 11 more
08-30 17:14:21.203: WARN/ActivityManager(59):   Force finishing activity it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity
08-30 17:14:21.783: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{44edea10 it.android.pelli.phonecalltestdue/.PhonecalltestdueActivity}
08-30 17:14:27.663: DEBUG/dalvikvm(260): GC_EXPLICIT freed 105 objects / 5112 bytes in 123ms

quindi per completezza l'ultimo codice
Codice (Java): [Seleziona]
import android.app.Activity;
//import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
//import android.provider.Contacts.People; non usato
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;

public class PhonecalltestdueActivity extends Activity {
 
 final static int RQS_PICK_CONTACT = 0;
 
 TextView contactName, contactNumber, contactEmail;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       contactName = (TextView)findViewById(R.id.contactname);
       contactNumber = (EditText)findViewById(R.id.contactnumber);
       contactEmail = (TextView)findViewById(R.id.contactemail);
       Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
       buttonPickContact.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, RQS_PICK_CONTACT);
   }});
   }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
 
  if(requestCode == RQS_PICK_CONTACT){
   if(resultCode == RESULT_OK){
    Uri contactData = data.getData();
    Cursor cursor =  managedQuery(contactData, null, null, null, null);
    cursor.moveToFirst();
   // ContentResolver cr = getContentResolver();
   // cod liuk78 cursortel.moveToFirst();
          String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
          String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
          if(Integer.parseInt(hasPhone) == 1){
              Cursor Cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                      null,
                     ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"='"+name+"'",
                     null, null);
             while(Cursor.moveToNext()){
              String number = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
              String numberType = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
              switch(Integer.parseInt(numberType)){
        //  insert switch cases to handle all types of phone numbers. There are 20 types!
              default:System.out.println("phone number: "+number+"("+numberType+")");
              break;
              }
               
              }
             Cursor.close();
            }else{
             System.out.println("no phone number found");
             }
        // codice prova2 di liuk78
          //  if (Integer.parseInt(cursortel.getString(cursortel.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 1)
          {
 // Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                //             null,
              //               ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                 //            new String[]{}, null);
//  while (pCur.moveToNext()) {
 // contactNumber.append(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+";");  
//}
 // pCur.close();
  //fine codice liuk78
          String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.NUMBER));
          contactName.setText(name);
          contactNumber.setText(hasPhone);
          contactEmail.setText(email);
   }
  }
 }
}
}


come mai mi dice che number non esiste ??
Codice (Java): [Seleziona]
08-30 17:14:21.195: ERROR/AndroidRuntime(650): Caused by: java.lang.IllegalArgumentException: column 'number' does not exist
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #3 il: 30 Agosto 2011, 23:46:09 CEST »
0
nel frattempo ho trovato degli esempi http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/ http://stackoverflow.com/questions/3370628/retrieve-contact-phone-number-from-uri-in-android, ma anche qui il logcat mi da lo stesso errore di prima cioe che number non esiste

l'ultimo mio codice
Codice (Java): [Seleziona]
import android.app.Activity;
//import android.content.ContentResolver;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
//import android.provider.Contacts.People; non usato
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;

public class PhonecalltestdueActivity extends Activity {
 
 final static int RQS_PICK_CONTACT = 0;
 
 TextView contactName, contactNumber, contactEmail;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       contactName = (TextView)findViewById(R.id.contactname);
       contactNumber = (EditText)findViewById(R.id.contactnumber);
       contactEmail = (TextView)findViewById(R.id.contactemail);
       Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
       buttonPickContact.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, RQS_PICK_CONTACT);
   }});
   }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
 
  if(requestCode == RQS_PICK_CONTACT){
   if(resultCode == RESULT_OK){
    Uri contactData = data.getData();
    Cursor cursor =  managedQuery(contactData, null, null, null, null);
    cursor.moveToFirst();
    ContentResolver cr = getContentResolver();
   // cod liuk78 cursortel.moveToFirst();
          String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
          String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
          if (Integer.parseInt(cursor.getString(
                  cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
               Cursor pCur = cr.query(
               ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
               null,
               ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "= ?",
               new String[]{hasPhone}, null);
               while (pCur.moveToNext()) {
               // Do something with phones
               }
               pCur.close();
           }
         
          //1   if(Integer.parseInt(hasPhone) == 1){
        //1      Cursor Cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
       //1               null,
          //1           ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"='"+name+"'",
             //1        null, null);
           //1  while(Cursor.moveToNext()){
             //1 String number = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
             //1 String numberType = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
             //1 switch(Integer.parseInt(numberType)){
        //  insert switch cases to handle all types of phone numbers. There are 20 types!
           //1   default:System.out.println("phone number: "+number+"("+numberType+")");
           //1   break;
           //1   }
               
         //1     }
         //1    Cursor.close();
           //1 }else{
          //1   System.out.println("no phone number found");
          //1   }
        // codice prova2 di liuk78
          //  if (Integer.parseInt(cursortel.getString(cursortel.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 1)
          {
 // Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                //             null,
              //               ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                 //            new String[]{}, null);
//  while (pCur.moveToNext()) {
 // contactNumber.append(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+";");  
//}
 // pCur.close();
  //fine codice liuk78
          String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.NUMBER));
          contactName.setText(id);
          contactNumber.setText(hasPhone);
          contactEmail.setText(email);
   }
  }
 }
}
}
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #4 il: 31 Agosto 2011, 10:30:00 CEST »
+1
Ciao,
hai risolto?

Qui
Codice (Java): [Seleziona]
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
               null,
               ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "= ?",
               new String[]{hasPhone}, null);

non devi passare hasPhone ma l'id del contatto che hai ricavato prima

Codice (Java): [Seleziona]
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
.......

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
               null,
               ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "= ?",
               new String[]{id}, null);
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #5 il: 31 Agosto 2011, 13:44:41 CEST »
0
ciao demper , grazie per la correzione , riguardo se ho risolto la mia risposta è un ni...  :-) (credo manchi poco) allora l'errore del logcat era per
Codice (Java): [Seleziona]
 String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.NUMBER)); come consigliato ho cambiato hasPhone in id

ora l'app non ha problemi però continua a non passarmi il numero impostato in rubrica . cmq provo a riguardarmi il codice  perche oramai a furia di prove ho il codice un po' disordinato ...
« Ultima modifica: 31 Agosto 2011, 13:55:19 CEST da ALEX88-ANDR0!D »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #6 il: 31 Agosto 2011, 15:01:25 CEST »
0
scusa ma qui

Codice (Java): [Seleziona]
contactNumber.setText(hasPhone);
perchè gli passi hasPhone e non il number che però mi sembra commentato?

se non risolvi riposta il codice ordinato  :D

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #7 il: 31 Agosto 2011, 15:25:19 CEST »
0
ciao , inanzitutto ecco dinuovo il codice
Codice (Java): [Seleziona]
import android.app.Activity;
//import android.content.ContentResolver;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
//import android.provider.Contacts.People; non usato
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;

public class PhonecalltestdueActivity extends Activity {
 
 final static int RQS_PICK_CONTACT = 0;
 
 TextView contactName, contactNumber, contactEmail;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       contactName = (TextView)findViewById(R.id.contactname);
       contactNumber = (EditText)findViewById(R.id.contactnumber);
       contactEmail = (TextView)findViewById(R.id.contactemail);
     
       Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
       buttonPickContact.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, RQS_PICK_CONTACT);
   }});
   }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
 
  if(requestCode == RQS_PICK_CONTACT){
   if(resultCode == RESULT_OK){
    Uri contactData = data.getData();
    Cursor cursor =  managedQuery(contactData, null, null, null, null);
    cursor.moveToFirst();
    ContentResolver cr = getContentResolver();
   // cod liuk78 cursortel.moveToFirst();
          String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
          String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
          if (Integer.parseInt(cursor.getString(
                  cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
               Cursor pCur = cr.query(
               ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
               null,
               ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "= ?",
               new String[]{id}, null);
               while (pCur.moveToNext()) {
               // Do something with phones
           
               }
               pCur.close();
           }
          ///prova1
          //1   if(Integer.parseInt(hasPhone) == 1){
        //1      Cursor Cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
       //1               null,
          //1           ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"='"+name+"'",
             //1        null, null);
           //1  while(Cursor.moveToNext()){
             //1 String number = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
             //1 String numberType = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
             //1 switch(Integer.parseInt(numberType)){
        //  insert switch cases to handle all types of phone numbers. There are 20 types!
           //1   default:System.out.println("phone number: "+number+"("+numberType+")");
           //1   break;
           //1   }
               
         //1     }
         //1    Cursor.close();
           //1 }else{
          //1   System.out.println("no phone number found");
          //1   }
        // codice prova2 di liuk78
          //  if (Integer.parseInt(cursortel.getString(cursortel.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 1)
          {
 // Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                //             null,
              //               ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                 //            new String[]{}, null);
//  while (pCur.moveToNext()) {
 // contactNumber.append(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+";");  
//}
 // pCur.close();
  //fine codice liuk78
          String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
          contactName.setText(id);
          contactNumber.setText(number);
          contactEmail.setText(email);
         
   }
  }
 }
}
}

per quanto riguarda hasphone se cambio la stringa come consigliato mi da un errore cioè che number non può essere risolto come variabile , l'hasphone lo avevo messo per prova pensando che deve andare a prendere qualcosa dalla stringa hasphone o sbaglio
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #8 il: 31 Agosto 2011, 15:30:54 CEST »
0
per quanto riguarda hasphone se cambio la stringa come consigliato mi da un errore cioè che number non può essere risolto come variabile , l'hasphone lo avevo messo per prova pensando che deve andare a prendere qualcosa dalla stringa hasphone o sbaglio

non può essere risolta come variabile perchè come ti ho scritto prima mi sembra che tu l'abbia commentata

Codice (Java): [Seleziona]
//1 String number = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
non ho rivisto il codice però...

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #9 il: 31 Agosto 2011, 15:47:02 CEST »
0
si in effetti era commentata perche era della prima prova , dimmi se sbaglio , in teoria dovrei mettere cosi
Codice (Java): [Seleziona]
if(requestCode == RQS_PICK_CONTACT){
   if(resultCode == RESULT_OK){
    Uri contactData = data.getData();
    Cursor cursor =  managedQuery(contactData, null, null, null, null);
    cursor.moveToFirst();
    ContentResolver cr = getContentResolver();
   // cod liuk78 cursortel.moveToFirst();
          String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
          String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
          if (Integer.parseInt(cursor.getString(
                  cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
               Cursor pCur = cr.query(
               ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
               null,
               ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "= ?",
               new String[]{id}, null);
               while (pCur.moveToNext()) {
               // Do something with phones
                   String number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
               }
               pCur.close();
           }
in pratica
ho cambiato
Codice (Java): [Seleziona]
//1   String number = Cursor.getString(Cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));in
Codice (Java): [Seleziona]
 String number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));e messo subito sotto
Citazione
while (pCur.moveToNext()) {
               // Do something with phones

-- però mi continua a direr che number cannot be resolved a variable .
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #10 il: 31 Agosto 2011, 16:14:48 CEST »
+1
Da quello che vedo la variabile number è dichiarata e inizializzata dentro al ciclo while.
Questo vuol dire che fuori dal ciclo ovvero fuori dalle {} del while tale variabile non è accessibile.
Per renderla accessibile fuori dal while devi fare cosi

Codice (Java): [Seleziona]
....
String number = "";
....
               while (pCur.moveToNext()) {
               // Do something with phones
                   number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
               }

// da qui in poi number avrà il valore dell'ultima iterazione del ciclo, quindi occhio alla logica, ma almeno risolvi il problema
// dell'accessibilità


Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #11 il: 31 Agosto 2011, 16:41:25 CEST »
0
inanzitutto grazie mille ancora , problema risolto ... riguardo

Citazione
da qui in poi number avrà il valore dell'ultima iterazione del ciclo, quindi occhio alla logica, ma almeno risolvi il problema
// dell'accessibilità
???credo di aver capito , ma per sicurezza potresti fare un esempio ... ancora grazie mille .

per chiarezza , magari può essere utile anche ad altri ecco il codice ripulito e corretto
Codice (Java): [Seleziona]
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;

public class PhonecalltestdueActivity extends Activity {
 
 final static int RQS_PICK_CONTACT = 0;
 
 TextView contactName, contactNumber, contactId;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       contactId = (TextView)findViewById(R.id.contactid);
       contactNumber = (EditText)findViewById(R.id.contactnumber);
       contactName = (TextView)findViewById(R.id.contactname);
       Button buttonPickContact = (Button)findViewById(R.id.pickcontact);
       buttonPickContact.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, RQS_PICK_CONTACT);
   }});
   }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
 
  if(requestCode == RQS_PICK_CONTACT){
   if(resultCode == RESULT_OK){
    Uri contactData = data.getData();
    Cursor cursor =  managedQuery(contactData, null, null, null, null);
    cursor.moveToFirst();
    ContentResolver cr = getContentResolver();
       String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
       String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
       
         if (Integer.parseInt(cursor.getString(
                  cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
               Cursor pCur = cr.query(
               ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
               null,
               ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "= ?",
               new String[]{id}, null);
               while (pCur.moveToNext()) {
               // Do something with phones
                    number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
               }
               pCur.close();
           }

          String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
          contactId.setText(id);
          contactNumber.setText(number);
          contactName.setText(name);
         
   }
  }
 }
}

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/hello"
  />
<Button
  android:id="@+id/pickcontact"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="Sciegli il Contatto"/>
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:id="@+id/contactid"/>
<EditText
  android:id="@+id/contactnumber"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:hint="oppure digita qui il numero" android:gravity="center_vertical|center_horizontal"/>
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:id="@+id/contactname"/>
</LinearLayout>

e il manifest
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="it.android.pelli.phonecalltestdue"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".PhonecalltestdueActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
   
</manifest>
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #12 il: 14 Ottobre 2011, 06:04:30 CEST »
0
riapro questo topic anche se e' un po' vecchiotto..
ho seguito questa discussione con molto interesse, visto che sto cercando di fare proprio una cosa come questa..ma utilizzando i codici di questo topic, riesco a ricevere nome, numero di tel ma non l'email..
al posto dell'email mi esce il numero 1 se clicco sul primo nome in rubrica, e mi esce il numero 2 se clicco sul secondo nome in rubrica..
credo il problema sia qua:
Codice (XML): [Seleziona]
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID))ma ho provato a sostituirlo in vari modi, anche come dice l'api:
Codice (XML): [Seleziona]
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Data.Data1))ma l'applicazione crassha perche' non trova il percorso.
avete idea di cosa devo mettere per ricevere l'indirizzo email?
« Ultima modifica: 14 Ottobre 2011, 06:14:23 CEST da frecciak »
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
« Ultima modifica: 14 Ottobre 2011, 21:28:02 CEST da ALEX88-ANDR0!D »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:ottenere nome e numero di cellulare dalla rubrica nella mia app
« Risposta #14 il: 14 Ottobre 2011, 22:56:05 CEST »
0
grazie mille alex88, si vede che inizio a capirci qualcosa :D
nel primo link ho trovato la soluzione e piu o meno era quella che pensavo..
cmq sono passato a un probema maggiore ora..se vuoi dare un'occhiata, magari mi puoi dire la tua ^^
http://www.anddev.it/index.php/topic,4780.0.html
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!