Je travaille sur l'activité Android dans laquelle je dois sélectionner des contacts de ListView et écrire leurs numéros dans le fichier .csv.Sélectionnez Contact de ListView et obtenir leurs numéros de téléphone dans Android
Cependant, j'ai réussi à écrire tous les numéros de contacts à partir de contacts sur un clic de bouton. Mais maintenant je veux sélectionner le contact de ListView et sur le bouton de clic seulement les contacts choisis devraient être écrits dans le dossier.
Je fournis mon code, veuillez me dire comment puis-je y parvenir?
upload_contacts.java:
public class Upload_Contacts extends ListActivity {
private String[] arraySpinner;
Spinner spin ;
String adi;
ToggleButton rdb;
private Cursor cursor;
private boolean csv_status = false;
Button btn;
public String[] Contacts = {};
public int[] to = {};
public ListView myListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.p_contacts);
btn=(Button)findViewById(R.id.btvc);
rdb=(ToggleButton)findViewById(R.id.rdb);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createCSV();// here I can write all contacts to file. I want only selected contacts to write, and also if all contacts selected they should also be written in file////
String selected = "";
int cntChoice = myListView.getCount();
SparseBooleanArray sparseBooleanArray = myListView.getCheckedItemPositions();
for(int i = 0; i < cntChoice; i++){
if(sparseBooleanArray.get(i)) {
selected += myListView.getItemAtPosition(i).toString() + "\n";
}
}
Toast.makeText(Upload_Contacts.this,
selected, //android.content.ContentResolver [email protected]
// here i want to show number against the contact selected .
Toast.LENGTH_LONG).show();
}
});
Cursor mCursor = getContacts();
startManagingCursor(mCursor);
// here showing contacts in listview with check box..
ListAdapter adapter2 = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_multiple_choice, mCursor,
Contacts = new String[] {ContactsContract.Contacts.DISPLAY_NAME },
to = new int[] { android.R.id.text1 });
setListAdapter(adapter2);
myListView = getListView();
myListView.setItemsCanFocus(false);
myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
// here I checked all the contacts in list view
rdb.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Toast.makeText(InCallScreen.this, "selected all", Toast.LENGTH_SHORT).show();
if(rdb.isChecked()){
rdb.setBackgroundColor(Color.parseColor("#FBE039"));
rdb.setTextColor(Color.parseColor("#000000"));
for (int i = 0; i < myListView.getCount(); i++)
myListView.setItemChecked(i, true);
}
else{
rdb.setBackgroundColor(Color.parseColor("#333333"));
rdb.setTextColor(Color.parseColor("#ffffff"));
for (int i = 0; i < myListView.getCount(); i++)
myListView.setItemChecked(i, false);
}
}
});
}
// here showing contacts name in listview..
private Cursor getContacts() {
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME};
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '"
+ ("1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
}
private void createCSV() {
CSVWriter writer = null;
try {
writer = new CSVWriter(new FileWriter(Environment.getExternalStorageDirectory().getAbsolutePath() + "/my_test_contact.csv"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String displayName;
String number;
long _id;
String columns[] = new String[]{ ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME };
writer.writeColumnNames(); // Write column header
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
columns,
null,
null,
ContactsContract.Data.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
startManagingCursor(cursor);
if(cursor.moveToFirst()) {
do {
_id = Long.parseLong(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)));
//displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)).trim();
number = getPrimaryNumber(_id);
// Log.d("numbers", number+" ");
writer.writeNext((/*displayName + */ "/" + number).split("/"));
} while(cursor.moveToNext());
csv_status = true;
} else {
csv_status = false;
}
try {
if(writer != null)
writer.close();
} catch (IOException e) {
Log.w("Test", e.toString());
}
}// Method close.
private void exportCSV() {
if(csv_status == true) {
//CSV file is created so we need to Export that ...
final File CSVFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/my_test_contact.csv");
//Log.i("SEND EMAIL TESTING", "Email sending");
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/csv");
emailIntent .putExtra(android.content.Intent.EXTRA_SUBJECT, "Test contacts ");
emailIntent .putExtra(android.content.Intent.EXTRA_TEXT, "\n\nAdroid developer\n Adnan");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + CSVFile.getAbsolutePath()));
emailIntent.setType("message/rfc822"); // Shows all application that supports SEND activity
try {
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(getApplicationContext(), "Email client : " + ex.toString(), Toast.LENGTH_SHORT);
}
} else {
Toast.makeText(getApplicationContext(), "Information not available to create CSV.", Toast.LENGTH_SHORT).show();
}
}
/**
* Get primary Number of requested id.
*
* @return string value of primary number.
*/
private String getPrimaryNumber(long _id) {
String primaryNumber = null;
try {
Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{Phone.NUMBER, Phone.TYPE},
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ _id, // We need to add more selection for phone type
null,
null);
if(cursor != null) {
while(cursor.moveToNext()){
switch(cursor.getInt(cursor.getColumnIndex(Phone.TYPE))){
case Phone.TYPE_MOBILE :
primaryNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
break;
case Phone.TYPE_HOME :
primaryNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
break;
case Phone.TYPE_WORK :
primaryNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
break;
default:
primaryNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
}
if(primaryNumber != null)
break;
}
}
} catch (Exception e) {
Log.i("test", "Exception " + e.toString());
} finally {
if(cursor != null) {
cursor.deactivate();
cursor.close();
}
}
return primaryNumber;
}
}
Que dois-je faire dans la méthode de create.csv pour que je puisse obtenir des contacts sélectionnés à partir listview et écrire seulement leur nombre à .csv?
Modifié:
J'ai résolu le problème.
Ici, un adaptateur personnalisé est utilisé pour réaliser la tâche. Maintenant l'activité a une liste de contacts téléphoniques et vous pouvez sélectionner les contacts des cases à cocher et écrire leurs numéros dans un fichier .csv. Ici, la classe écrivain csv:
CSVwriter.java:
public class CSVWriter {
private PrintWriter pw;
private char separator;
private char quotechar;
private char escapechar;
private String lineEnd;
/** The character used for escaping quotes. */
public static final char DEFAULT_ESCAPE_CHARACTER = '\u0000';
/** The default separator to use if none is supplied to the constructor. */
public static final char DEFAULT_SEPARATOR = '\n';
/**
* The default quote character to use if none is supplied to the
* constructor.
*/
public static final char DEFAULT_QUOTE_CHARACTER = '\u0000';
/** The quote constant to use when you wish to suppress all quoting. */
public static final char NO_QUOTE_CHARACTER = '\u0000';
/** The escape constant to use when you wish to suppress all escaping. */
public static final char NO_ESCAPE_CHARACTER = '\u0000';
/** Default line terminator uses platform encoding. */
public static final String DEFAULT_LINE_END = "\n";
/** Default column name. */
public static final String DEFAULT_COLUMN_NAME = "Phone Number";
/**
* Constructs CSVWriter using a comma for the separator.
*
* @param writer
* the writer to an underlying CSV source.
*/
public CSVWriter(Writer writer) {
this(writer, DEFAULT_SEPARATOR, DEFAULT_QUOTE_CHARACTER,
DEFAULT_ESCAPE_CHARACTER, DEFAULT_LINE_END);
}
/**
* Constructs CSVWriter with supplied separator, quote char, escape char and line ending.
*
* @param writer
* the writer to an underlying CSV source.
* @param separator
* the delimiter to use for separating entries
* @param quotechar
* the character to use for quoted elements
* @param escapechar
* the character to use for escaping quotechars or escapechars
* @param lineEnd
* the line feed terminator to use
*/
public CSVWriter(Writer writer, char separator, char quotechar, char escapechar, String lineEnd) {
this.pw = new PrintWriter(writer);
this.separator = separator;
this.quotechar = quotechar;
this.escapechar = escapechar;
this.lineEnd = lineEnd;
}
/**
* Writes the next line to the file.
*
* @param nextLine
* a string array with each comma-separated element as a separate
* entry.
*/
public void writeNext(String[] nextLine) {
if (nextLine == null)
return;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < nextLine.length; i++) {
if (i != 0) {
sb.append(separator);
}
String nextElement = nextLine[i];
if (nextElement == null)
continue;
if (quotechar != NO_QUOTE_CHARACTER)
sb.append(quotechar);
for (int j = 0; j < nextElement.length(); j++) {
char nextChar = nextElement.charAt(j);
if (escapechar != NO_ESCAPE_CHARACTER && nextChar == quotechar) {
sb.append(escapechar).append(nextChar);
} else if (escapechar != NO_ESCAPE_CHARACTER && nextChar == escapechar) {
sb.append(escapechar).append(nextChar);
} else {
sb.append(nextChar);
}
}
if (quotechar != NO_QUOTE_CHARACTER)
sb.append(quotechar);
}
sb.append(lineEnd);
pw.write(sb.toString());
}
public void writeColumnNames() {
writeNext(DEFAULT_COLUMN_NAME.split(","));
}
/**
* Flush underlying stream to writer.
*
* @throws IOException if bad things happen
*/
public void flush() throws IOException {
pw.flush();
}
/**
* Close the underlying stream writer flushing any buffered content.
*
* @throws IOException if bad things happen
*
*/
public void close() throws IOException {
pw.flush();
pw.close();
}
}
Vérifiez [cette réponse] (http://stackoverflow.com/questions/11341931/how-to-create-a- csv-on-android) ou [celui-ci] (http://stackoverflow.com/questions/27772011/how-to-export-data-to-csv-file-in-android). Il y a quelques questions et réponses concernant la création de csv. – comrade
Oh non, ce n'est pas à propos de l'exportation de données vers le fichier .csv, il est déjà en train de hapening et je suis un succès à ce sujet. mais mon problème est mon tous les contacts exportent vers le fichier .csv. ce que je veux, c'est sélectionner le contact à écrire dans le fichier .csv. Merci . Je ne peux pas obtenir les éléments listview sélectionnés et leurs numéros afin que je puisse les écrire dans le fichier csv –
C'est comme si vous avez une liste qui montre tous vos noms de contact. vous sélectionnez 4 à 5 contacts aléatoires dans la liste. et quand vous cliquez sur le bouton. Un fichier .csv doit être créé contenant les numéros des seuls contacts sélectionnés. Je vous remercie. –