0

我正在尝试创建我的联系人列表的 CSV 文件。这是我为此编写的代码:

protected Void doInBackground(Void... params) {
    String name = "";
    String phone = "";
    ContentResolver cr = ReadContactsActivity.this.getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);

    File folder = new File(Environment.getExternalStorageDirectory()
            + File.separator + getString(R.string.app_name));
    boolean var = false;
    if (!folder.exists())
        var = folder.mkdir();

    final String filename = folder.toString() + "/" + "Test.csv";

    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));
            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()) {
                    phone = pCur
                            .getString(pCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    // objItem = new listBean();

                    // objItem.setName(name);
                    // objItem.setNumber(phone);
                    // listArray.add(objItem);
                    new Thread() {

                        public void run() {
                            try {
                                FileWriter writer = new FileWriter(filename);
                                writer.append(name);
                                writer.append(',');
                                writer.append(phone);
                                writer.append('\n');
                                // generate whatever data you want

                                writer.flush();
                                writer.close();
                            } catch (Exception e) {
                            }
                        }
                    }.start();
                }
                pCur.close();
            }
        }
    }
    return null;
}

现在我在run()方法中传递了姓名和电话时收到此错误:

Cannot refer to a non-final variable name inside an inner class defined in a different method

请建议如何解决这个问题。

4

2 回答 2

1

doInBackground已经在一个新任务中运行。您可以使用新的thread.

只需摆脱:

                  new Thread() {
                    public void run() {
                        try {
于 2013-03-14T08:13:32.580 回答
1

在 Java 中,

在外部类的不同方法中定义的内部类内部使用的变量应该是最终的。

因此,将在 run 方法中使用的名称、电话、文件名声明为 final。

于 2013-03-14T08:19:21.697 回答