user5808807
user5808807

Reputation: 71

Unable to read vCard data: Exported from ez vcard

I am making use of the ezvcard library to export contact data out of my own app. My problem is, the exported vcard cannot be read in my stock contacts app. This is the output:

BEGIN:VCARD 
VERSION:4.0 
N:;User Name;;; 
FN:User Name 
ORG:Anderson Secondary School 
TEL;TYPE=work,voice:92365313 
PRODID:ez-vcard 0.9.9 
END:VCARD 
BEGIN:VCARD 
VERSION:4.0 
N:;All fields 2;;; 
FN:All fields 2 
ORG:List (All fields) 
TEL;TYPE=work,voice:12345678 
PRODID:ez-vcard 0.9.9 
END:VCARD

and below, my codes to create the vCard

  LayoutInflater li = SettingsPortationActivity.this.getLayoutInflater();
                    View promptsView = li.inflate(R.layout.prompts, null);
                    fileName = "";
                    fileNameInput = (EditText) promptsView.findViewById(R.id.editTextDialogUserInput);
                    fileNameInput.setText(".vcf");

                    AlertDialog.Builder builder = new AlertDialog.Builder(SettingsPortationActivity.this);
                    // sets prompts to alertdialog builder
                    builder.setView(promptsView);

                    builder.setCancelable(false)
                            .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    fileName = fileNameInput.getText().toString();
                                    if (!fileName.trim().isEmpty()) { // has value
                                        FavoritesDatabaseHelper db = new FavoritesDatabaseHelper(getApplicationContext());
                                        List<FavoriteObject> favorites = db.getAllFavorites();

                                        List<VCard> vcards = new ArrayList<VCard>();

                                        String storage_path = Environment.getExternalStorageDirectory().toString() + File.separator + fileName;
                                        File file = new File(storage_path);
                                        Log.d("Directory", String.valueOf(storage_path));
                                        VCardWriter writer = null;

                                        try {
                                            writer = new VCardWriter(file, VCardVersion.V4_0);
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }

                                        for (int i = 0; i < favorites.size(); i++) {
                                            FavoriteObject fav = favorites.get(i);
                                            Log.d("Export fav", "Fav name" + fav.getContactName());

                                            VCard vcard = new VCard();
                                            vcard.setClassification("PUBLIC");

                                            StructuredName n = new StructuredName();
                                            n.setGiven(fav.getContactName());
                                            vcard.setStructuredName(n);

                                            vcard.setFormattedName(new FormattedName(fav.getContactName()));

                                            Organization org = new Organization();
                                            org.addValue(fav.getListName());
                                            vcard.setOrganization(org);

                                            Telephone tel = new Telephone(fav.getContactNumber());
                                            tel.addType(TelephoneType.WORK);
                                            tel.addType(TelephoneType.VOICE);
                                            vcard.addTelephoneNumber(tel);

                                            vcards.add(vcard);
                                        }

                                        try {
                                            for (VCard vcard : vcards) {
                                                try {
                                                    writer.write(vcard);
                                                } catch (IOException e) {
                                                    e.printStackTrace();
                                                }
                                            }
                                        } finally {
                                            try {
                                                writer.close();
                                                Log.d("Success", "Export success");
                                                Toast.makeText(SettingsPortationActivity.this, "Export Success", Toast.LENGTH_LONG).show();
                                            } catch (IOException e) {
                                                e.printStackTrace();
                                            }
                                        }
                                    } else {
                                        fileNameInput.setError("Please enter a file name");
                                    }
                                }
                            }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
                    AlertDialog alertDialog = builder.create();
                    alertDialog.show();

Upvotes: 2

Views: 1509

Answers (1)

Arnaud Quillaud
Arnaud Quillaud

Reputation: 4645

Are you actually leveraging any vCard 4.0 functionality ? If it is not the case, I would start by setting the version to 3.0 instead of 4.0. Unfortunately, very few softwares have moved to vCard 4.0.

Would also put the PRODID towards the begining of the stream as this may help some parsers.

Upvotes: 3

Related Questions