Photo von Kontakt auslesen

  • Antworten:7
Georg Buchta
  • Forum-Beiträge: 24

09.11.2011, 13:12:16 via Website

Hello

ich weiß es gibt x-tausend Beiträge wenn man via Google sucht aber nicht mal mit Hilfe derer schaffe ich es das Bild
eines Kontaktes verwenden zu können...

Hier mal mein bisheriger Code:

1package at.avalon.easydial;
2
3import java.io.*;
4import java.util.*;
5import android.app.*;
6import android.content.*;
7import android.database.*;
8import android.graphics.*;
9import android.net.*;
10import android.os.*;
11import android.provider.*;
12import android.util.*;
13import android.widget.*;
14
15public class ContactView extends Activity
16{
17 private static final String TAG = main.class.getSimpleName();
18
19 private ArrayList<HashMap<String, Object>> myList;
20 public Bitmap picture1;
21 public int picture2;
22 public String id;
23 public String name;
24 public String phonenumber;
25 public String email;
26 public String emailType;
27 public String searchText;
28 public String searchingFor;
29
30 @Override
31 public void onCreate(Bundle savedInstanceState)
32 {
33 super.onCreate(savedInstanceState);
34 setContentView(R.layout.contactview);
35
36 myList = new ArrayList<HashMap<String, Object>>();
37
38 ListView contactview = (ListView) findViewById(R.id.contactview_listview);
39
40 SimpleAdapter aa = new SimpleAdapter( this,
41 myList,
42 R.layout.contactviewitems,
43 new String[] { "userimage",
44 "name",
45 "phonenumber",
46 "callimage",
47 "smsimage",
48 "mailimage"},
49 new int[] { R.id.contactviewitems_userimage,
50 R.id.contactviewitems_username,
51 R.id.contactviewitems_telephonenumber,
52 R.id.contactviewitems_callimage,
53 R.id.contactviewitems_smsimage,
54 R.id.contactviewitems_mailimage} );
55 contactview.setAdapter(aa);
56
57 Bundle extras = getIntent().getExtras();
58 searchingFor = extras.getString("searchText");
59
60 Log.v(TAG,"Methode searchForContact wird gestartet");
61 searchForContact(searchingFor);
62 }
63
64 public void searchForContact(String search)
65 {
66 searchText = search;
67
68 ContentResolver cr = getContentResolver();
69 Cursor cur = cr.query( ContactsContract.Contacts.CONTENT_URI,
70 null, null, null, null);
71 if (cur.getCount() > 0)
72 {
73 while (cur.moveToNext())
74 {
75 Log.v(TAG,"while läuft solange cursor.moveToNext == TRUE");
76
77 id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
78 name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
79
80 Log.v(TAG,"vor if-bedingung für PHOTO");
81
82 if(cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)) != 0)
83 {
84 Log.v(TAG,"vor if-bedingung für PHOTO - IF_ZWEIG");
85
86 long id2 = (long) Integer.parseInt(id);
87 Log.v(TAG,"Variable id2 erzeugt und gefüllt: " + id2);
88 Log.v(TAG,"Variable temp erzeugt");
89 Bitmap bm = getPhoto(cr,id2);
90 Log.v(TAG,"temp-Variable gefüllt: " + bm);
91
92
93 Log.v(TAG,"getImage erledigt");
94 }
95 else
96 {
97 Log.v(TAG,"vor if-bedingung für PHOTO - ELSE_ZWEIG");
98
99 picture2 = R.drawable.vorlage_userimage;
100 }
101
102 Log.v(TAG,"vor if-bedingung für phonenumber");
103
104 if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
105 {
106 Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
107 null,
108 ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
109 new String[]{id},
110 null);
111 while(pCur.moveToNext())
112 {
113 phonenumber = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
114 }
115 pCur.close();
116 }
117
118 Log.v(TAG, "beginne mit Hinzufügen der Kontakte zur HashMap");
119
120 if((name.toLowerCase()).indexOf(this.searchText) >= 0)
121 {
122 Log.v(TAG,"HashMap wird erzeugt");
123 HashMap<String, Object> map = new HashMap<String, Object>();
124 map.put("userimage", picture);
125 map.put("name", name);
126 map.put("phonenumber", phonenumber);
127 map.put("callimage", R.drawable.vorlage_call);
128 map.put("smsimage", R.drawable.vorlage_sms);
129 map.put("mailimage", R.drawable.vorlage_mail);
130 Log.v(TAG,"HashMap hat folgende Wert");
131 Log.v(TAG,"name: " + name);
132 Log.v(TAG,"phonenumber: " + phonenumber);
133 Log.v(TAG,"HashMap wird dem Array übergeben");
134 myList.add(map);
135 }
136 }
137
138 Log.v(TAG,"es gibt keine weiteren Einträge mehr");
139 Log.v(TAG,"cursor.moveToNext == FALSE");
140
141 Log.v(TAG,"Prüfung ob myList.isEmpty():" + (myList.isEmpty()));
142
143 if(myList.isEmpty())
144 {
145 Toast toast = Toast.makeText(this, "Für diese Suche leider keine Ergebinsse", Toast.LENGTH_SHORT);
146 toast.show();
147 startActivity(new Intent(this, main.class));
148 }
149
150 Log.v(TAG,"Methode searchForContacts ist durch");
151 }
152 }
153
154 public Bitmap getPhoto(ContentResolver contentResolver, Long contactId)
155 {
156 Log.v(TAG,"Methode getPhoto gestartet");
157 Log.v(TAG,"Varibale ContactsContract.Contacts.CONTENT_URI: " + ContactsContract.Contacts.CONTENT_URI);
158 Log.v(TAG,"Varibale contactID: " + contactId);
159 Uri contactPhotoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
160 Log.v(TAG,"ContactPhotoUri != null: " + contactPhotoUri);
161
162 Log.v(TAG,"fill photDataStream with InputStream");
163 InputStream photoDataStream = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver,contactPhotoUri);
164 Log.v(TAG,"photoDataStream != NULL: " + photoDataStream);
165
166 Log.v(TAG,"foll photo with bitmap");
167 Bitmap photo = BitmapFactory.decodeStream(photoDataStream);
168 Log.v(TAG,"photo must != null: " + photo);
169
170 return photo;
171 }
172}


der Code ist wahrscheinlich für einen Fortgeschrittenen der Horror und manche Dinge gehen sicher einfacher,
ich sag nur ich bin noch Anfänger :-)


bei onCreate erzeuge ich eine ArrayList die ich dann weiter unten mit einer HashMap befülle,
soweit komme ich aber nicht

In den Zeilen 82 bis 100 versuche ich das Photo des Kontaktes auszulesen (via Methode getPhoto - Zeile 154 - 170)
um es später der ListView zu übergeben

ich glaube zu wissen wo mein problem liegt aber ich weiß nicht wie ich es in den Griff bekomme...

in der onCreate-Methode erzeuge ich einen SimpleAdapter mit einem int-Array und übergeben diesem die ID´s der Views
beim Auslesen des Photos bekomme ich aber von der getPhoto-Methode eine Bitmap zurück
bei der HashMap übergebe ich dann mit dem Text "userimage" einen int-Wert
(außerdem ist die Variable picture als int deklariert)

ich hoffe ihr könnt mir hier helfen...

DANKE!!

lg
georg

Antworten
Gian U.
  • Forum-Beiträge: 117

09.11.2011, 18:45:05 via Website

Wo liegt den das Problem? Gibt es einen Force-Close oder hast du Error-Meldungen in der LogCat?

Ich hab ehrlich gesagt keine Lust, deinen ganzen Code nachzuvollziehen ohne weitere Angaben von dir...

Mnemono - Efficient learning!

Antworten
Georg Buchta
  • Forum-Beiträge: 24

09.11.2011, 20:15:09 via Website

Hy Gian U.,

ich bekomme weder eine Force-Close oder einen Error-Meldung in der LogCat.

Das Problem dass ich habe ist (meiner Meinung nach) folgendes:

Georg Buchta

in der onCreate-Methode erzeuge ich einen SimpleAdapter mit einem int-Array und übergeben diesem die ID´s der Views
beim Auslesen des Photos bekomme ich aber von der getPhoto-Methode eine Bitmap zurück
bei der HashMap übergebe ich dann mit dem Text "userimage" einen int-Wert
(außerdem ist die Variable picture als int deklariert)

ich würde einfach nur wissen wollen wie ich das Photo eines Kontaktes bekomme
am Liebsten wäre mir in Form eines INTEGER-Wertes, weil ich damit am leichtesten arbeiten könnte - falls das überhautp möglich ist
bis dato habe ich es nur geschaft mir das Kontaktphoto als Bitmap zu holen und damit fange ich irgendwie nix an...

Liebe Grüße
Georg


PS:
ich gebe dir gerne alle Angaben die ich kann...einfach fragen :-)
den Code oder etwaige Fehler poste ich gleich vollständig, damit
jemand der diesen gerne sehen möchte, gleich alles hat...

— geändert am 09.11.2011, 20:36:24

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

09.11.2011, 21:03:25 via App

Hey,
einen Int für ein Bild bekommst du nur für Bilder, die als Ressourcen bei deiner App oder bei Android dabei sind. Wenn du ein Bitmap bekommst, musst du halt damit arbeiten.. Solang das Bitmap das Bild enthält, seh ich da kein Problem.. Wo liegts denn? Was willst du damit machen?
Lg Ansgar

Antworten
Georg Buchta
  • Forum-Beiträge: 24

09.11.2011, 21:21:21 via Website

Hy Ansgar M.,

zum Auseinandersetzten mit Android habe ich begonnen einen Dialer zu programmieren mit dem man auch Kontakte suchen kann.
Also z.B. eingabe in Textview "br" -> enter --> sucht alle Kontakte in denen "br" enthalten sind und gibt
diese dann in einer ListView aus

die ListView soll dann einmal das Bild des Kontaktes anzeigen (wenn eines vorhanden ist)
den Namen und dann noch ein paar Möglichkeiten bieten

ich hab schon alles bis auf das bild....

da ich in dem simpleadapter den ich anfangs erstellt habe

1SimpleAdapter aa = new SimpleAdapter( this, myList, R.layout.contactviewitems, 43 new String[]
2 { "userimage", "name", "phonenumber", "callimage", "smsimage", "mailimage"},
3 new int[] { R.id.contactviewitems_userimage,
4 R.id.contactviewitems_username,
5 R.id.contactviewitems_telephonenumber,
6 R.id.contactviewitems_callimage,
7 R.id.contactviewitems_smsimage,
8 R.id.contactviewitems_mailimage} );
9contactview.setAdapter(aa);

auf die Elemente der ListView mit id (also int) zugreife kann ich hier keine bitmap übergeben

da steh ich halt jetzt grad an...


lg
georg

— geändert am 09.11.2011, 21:27:34

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

09.11.2011, 21:30:24 via App

Ah,
ok, da würde ich mit einem ViewBinder arbeiten. Ich denke Google spuckt sicher Sachen dazu aus..
Lg Ansgar

Antworten
Georg Buchta
  • Forum-Beiträge: 24

09.11.2011, 21:41:19 via Website

Hy Ansgar M.,

danke für den Tipp !! :-)

Schau ich mir an und sag Bescheid ob ich´s mit dem geschafft hab!

Liebe Grüße
Georg

Antworten
Gian U.
  • Forum-Beiträge: 117

09.11.2011, 22:04:37 via Website

Wenn du eine ListView verwenden willst, bastelst du dir am besten einen eigenen Adapter. Wie das geht, wird hier gut (auf Englisch) erklärt: http://www.youtube.com/watch?v=wDBM6wVEO70

Mnemono - Efficient learning!

Antworten