Click here to Skip to main content
15,887,596 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I tried modifying the query in ascending order but still the output is not in alphabetical order.
The following is the MainActivity.java file:

package com.example.user.phonebook;

import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;



import java.util.ArrayList;
import java.util.Collections;

public class MainActivity extends ListActivity {

ArrayList<contact> contacts;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

contacts = new ArrayList<contact>();

Uri allContacts = ContactsContract.Contacts.CONTENT_URI;

//declare our cursor
Cursor c;

String[] projection = new String[]
{ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER};


if (Build.VERSION.SDK_INT < 11) {
//---if the device ids running on OS before Honeycomb
//use the managedQuery() of the Activity class to retrieve a managed cursor
c = managedQuery(allContacts, projection, null, null, null);

} else {
//---Honeycomb and later use the cursor loader class to retrieve managed cursor---
CursorLoader cursorLoader = new CursorLoader(
this,
allContacts,
projection,
null,
null,
null);
c = cursorLoader.loadInBackground();
}

PrintContacts(c);

MyClassAdapter adapter;


//detect the android version again..
if (Build.VERSION.SDK_INT < 11) {
//---if it is before Honeycomb---

adapter = new MyClassAdapter(
this, R.layout.row_line, contacts);
} else {
//---Honeycomb and later---

adapter = new MyClassAdapter(
this, R.layout.row_line, contacts);
}

this.setListAdapter(adapter);


}

private void PrintContacts(Cursor c) {
ContentResolver cr = getContentResolver();
//---display the contact id and name and phone number----
if (c.moveToFirst()) {
do {
//---get the contact id and name
String contactID = c.getString(c.getColumnIndex(
ContactsContract.Contacts._ID));
String contactDisplayName =
c.getString(c.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
Log.v("Content Providers", contactID + ", " +
contactDisplayName);

String contactDisplayPhone = "";
//---get phone number---
int hasPhone =
c.getInt(c.getColumnIndex(
ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone == 1) {
Cursor phoneCursor =
getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null
, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
while (phoneCursor.moveToNext()) {
Log.v("Content Providers",
contactDisplayPhone = phoneCursor.getString(
phoneCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER)));
}
phoneCursor.close();

}
contacts.add(new Contact(contactDisplayName, contactDisplayPhone));

} while (c.moveToNext());
}
}



public class Contact {
public String contactName = "";

public String contactNumber = "";

public Contact(String name, String number) {

contactName = name;

contactNumber = number;
}
}

public class MyClassAdapter extends ArrayAdapter<contact> {

private class ViewHolder {
private TextView name;
private TextView number;
}

public MyClassAdapter(Context context, int textViewResourceId, ArrayList<contact> items) {
super(context, textViewResourceId, items);
}

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(this.getContext())
.inflate(R.layout.row_line, parent, false);

viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R.id.contactName);

viewHolder.number = (TextView) convertView.findViewById(R.id.contactNumber);

convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}

Contact item = getItem(position);
if (item != null) {
viewHolder.name.setText(item.contactName);

viewHolder.number.setText(item.contactNumber);
}

return convertView;
}
}

}

What I have tried:

i tried SimpleCursorAdapter too though in that entries got alphabetical but phone numbers were not visible. you may refer to this link: http://stackoverflow.com/questions/38618185/how-should-i-solve-the-issue-of-duplicate-contact-names-and-phone-numbers-not-vi
Posted
Updated 27-Jul-16 21:18pm
Comments
Richard MacCutchan 28-Jul-16 3:16am    
You probably need to copy the contacts into some list type that will provide a sorting feature. Then you can find any duplicates and remove them.

1 solution

See Collection | Android Developers[^] for potential collection types.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900