Ich arbeite an einer Instant-Chat-Messaging-Anwendung.Ich bekomme Kontakte vom Telefon und zeigte sie in der Listenansicht einer Aktivität.Aber es dauert 25-30 Sekunden.Ich verwende Mit dem folgenden Code:Kontakte vom Telefon zu bekommen dauert zu viel Zeit
1. Auf klicken Kontakt Button:
contacts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), "Contacts Clicked", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
ArrayList<Bean_PhoneNumbers> listBeanPhone = getContactsFromPhone();
Intent intent = new Intent(SingleChatActivity.this, PhoneBookActivity.class);
//intent.putExtra("listBeanPhone", listBeanPhone);
intent.putParcelableArrayListExtra("listBeanPhone", listBeanPhone);
intent.putExtra("friendName", friendName);
intent.putExtra("absoluteURL", completeURLFriend);
intent.putExtra("friendID", frndID);
startActivity(intent);
}
});
2. getContactFromPhone() -Methode
private ArrayList<Bean_PhoneNumbers> getContactsFromPhone() {
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
bean_phoneNumbers = new Bean_PhoneNumbers();
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.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()) {
String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// Toast.makeText(SingleChatActivity.this, "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_SHORT).show();
bean_phoneNumbers.setName(name);
bean_phoneNumbers.setPhoneNumber(phoneNo);
listBeanPhoneNumbers.add(bean_phoneNumbers);
}
pCur.close();
}
}
}
return listBeanPhoneNumbers;
}
3.PhoneBookActivity.java
public class PhoneBookActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
private ViewPager viewPager;
private SearchView searchView;
private ListView listView;
private Adapter_PhoneBook adapter_phoneBook;
private String friendName, completeURLFriend, frndID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phonebook);
//findViewByID
searchView = (SearchView) findViewById(R.id.search);
listView = (ListView) findViewById(R.id.list);
// Fetching data from a parcelable object passed from SingleChatActivity
ArrayList<Bean_PhoneNumbers> listBeanPhone = getIntent().getParcelableArrayListExtra("listBeanPhone");
for (int i = 0; i < listBeanPhone.size(); i++) {
Bean_PhoneNumbers bean = listBeanPhone.get(i);
String name = bean.getName();
Log.e("Name", name);
}
//Initialization
adapter_phoneBook = new Adapter_PhoneBook(PhoneBookActivity.this, listBeanPhone);
listView.setAdapter(adapter_phoneBook);
searchView.setOnQueryTextListener(this);
//Getting values from previos screen(ChatFragment)
Bundle bundle = getIntent().getExtras();
friendName = bundle.getString("friendsName", null);
completeURLFriend = bundle.getString("absoluteURL", null);
frndID = bundle.getString("friendID");
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Bean_PhoneNumbers bean_phoneNumbers = (Bean_PhoneNumbers) adapterView.getItemAtPosition(i);
Intent intent = new Intent(PhoneBookActivity.this, SingleChatActivity.class);
intent.putExtra("bean", bean_phoneNumbers);
intent.putExtra("friendName", friendName);
intent.putExtra("absoluteURL", completeURLFriend);
intent.putExtra("friendID", frndID);
startActivity(intent);
}
});
}
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
adapter_phoneBook.getFilter().filter(s);
return false;
}
}
Bitte meinen Code überprüfen und mir sagen, wo ich wrong.I tue Kontakte aus dem Telefon ist immer und Speicherung in einem ArrayList.Then i, dass Arraylist zu PhoneBookActivity ist vorbei welches eine listview hat. Ich bevölkere die listview, die einen BaseAdapter verwendet.
in String-Array-Liste konvertieren dann in der Absicht setzen für die Übertragung auf einem anderen activity.try einmal –
Wenn kein Erfolg dann Kontakt aus der Kontaktliste des Benutzers zum ersten Mal holen und es in sqlite speichern. Weil die sqlite App Daten einfacher abrufen kann. Und auch eine Bedingung anwenden, wenn der Benutzer seine Kontaktliste aktualisiert, dann SQLite wird Update auf Datenbanktabelle. –
@MKJParekh: Ich habe meine Frage codereview verschoben. Bitte überprüfen Sie es. –