联系人列表的.csv生成问题:android

联系人列表的.csv生成问题:android,android,Android,我想把“联系人姓名”和相应的“联系人号码”做成.csv文件,但当我运行下面的代码时,出现了给定的错误。请参阅下面的代码,并指出我错在哪里。 这意味着我有两列,一列是姓名,第二列是联系人号码,其值应显示在该列下方。因此,请查看我的代码。我是android和java新手 public class contactlist extends Activity { static String name; static int count; static int countno;

我想把“联系人姓名”和相应的“联系人号码”做成.csv文件,但当我运行下面的代码时,出现了给定的错误。请参阅下面的代码,并指出我错在哪里。 这意味着我有两列,一列是姓名,第二列是联系人号码,其值应显示在该列下方。因此,请查看我的代码。我是android和java新手

public class contactlist extends Activity {
    static String name;
    static int count;
    static int countno;
    File file = null ;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            ContentResolver cr = getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
            if (cur.getCount() > 0) {
                    while (cur.moveToNext())
            {

                            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                            name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                            //error on below line
                            String phoneno = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                            cur.close();

                            String columnString =   "\"PersonName\",\"phoneno\"";

                            String dataString = null;

                            dataString = "\"" + name +"\",\"" + phoneno + "\"";    
                            Log.i("saurabh",dataString);

                            String combinedString = columnString + "\n" + dataString;

                            File root   = Environment.getExternalStorageDirectory();
                            if (root.canWrite()) {
                                    File dir = new File (root.getAbsolutePath() + "/PersonData");
                                    dir.mkdirs();
                                    file = new File(dir, "Data.csv");
                                    FileOutputStream out = null;

                                    try {
                                            out = new FileOutputStream(file);
                                    } catch (FileNotFoundException e) {
                                            e.printStackTrace();
                                    }

                                    try {
                                            out.write(combinedString.getBytes());
                                    } catch (IOException e) {
                                            e.printStackTrace();
                                    }

                                    try {
                                            out.close();
                                    } catch (IOException e) {
                                            e.printStackTrace();
                                    }
                            }

                    }
            }
    }
}
错误是

 07-28 16:09:56.758: ERROR/AndroidRuntime(27597): Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
  07-28 16:09:56.758: ERROR/AndroidRuntime(27597):     at android.database.CursorWindow.getString_native(Native Method)
  07-28 16:09:56.758: ERROR/AndroidRuntime(27597):     at android.database.CursorWindow.getString(CursorWindow.java:329)
   07-28 16:09:56.758: ERROR/AndroidRuntime(27597):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
        07-28 16:09:56.758: ERROR/AndroidRuntime(27597):     at android.database.CursorWrapper.getString(CursorWrapper.java:135)
         07-28 16:09:56.758: ERROR/AndroidRuntime(27597):     at contactlist.pkg.contactlist.onCreate(contactlist.java:83)
        07-28 16:09:56.758: ERROR/AndroidRuntime(27597):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
     07-28 16:09:56.758: ERROR/AndroidRuntime(27597):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

使用该库,它可以读取和写入CSV。其余的逻辑将进入您的代码。

您的代码不可读,请正确格式化!我是为他做的。还有@ram ji,您不必使用多个try…catch块。先生,您能告诉我如何制作联系人信息的csv文件吗?这样不一致就不会发生。如果我在一个数组中保存姓名,在另一个数组中保存contactno,如果任何联系人详细信息都没有contactno,但只有ContactName,那么不一致就应该出现。因此,请帮助我先生…@Ragunah Jawahar hi..如果您有其他想法,请与我分享..谢谢注意:如果光标为空(
getCount()==0
),fileWriter
fw
将不会关闭。
public class ContactlistActivity extends Activity {

    String name;
    File file = null;

    String[] names = { ContactsContract.CommonDataKinds.Phone._ID,
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Phone.NUMBER };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            File folder = new File(Environment.getExternalStorageDirectory()+ "/Application");
            boolean var = false;
            if (!folder.exists())
                var = folder.mkdir();

            System.out.println("" + var);

            String filename = folder.toString() + "/Contact.csv";
            FileWriter fw = new FileWriter(filename);

            fw.append("Name");
            fw.append(',');
            fw.append("Number");
            fw.append(',');
            fw.append('\n');

            Cursor cur = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,names,null,null,
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+ " ASC");
            if (cur.getCount() > 0) {
                while (cur.moveToNext()) {
                    String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                    name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    String phoneno = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    String dataString = null;
                    dataString = "\"" + name + "\",\"" + phoneno + "\"";

                    fw.append("" + name);
                    fw.append(',');
                    fw.append("" + phoneno);
                    fw.append(',');
                    fw.append('\n');        
                }
                cur.close();
                fw.close();
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}