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

ジャワでは、

外部クラスの別のメソッドで定義されている内部クラス内で使用される変数は、final でなければなりません。

そのため、run メソッド内で使用される name、phone、filename を final として宣言します。

于 2013-03-14T08:19:21.697 に答える