java - 无法引用在不同方法中定义的内部类内的非最终变量名称

标签 java android compiler-errors

我正在尝试创建联系人列表的 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

请建议如何解决此问题。

最佳答案

doInBackground 已在新任务中运行。您可以使用新的线程来删除代码的包装。

只是摆脱:

                  new Thread() {
                    public void run() {
                        try {

关于java - 无法引用在不同方法中定义的内部类内的非最终变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404098/

相关文章:

android - 使用电子邮件中的链接启动 Android 应用程序

android - Google InApp Billing 空异常

function - 未定义VBA访问编译错误变量

haskell - 创建一个矩形? - haskell

java - 运行 Java 应用程序时在何处保存 AWS API key 的最佳实践

java - 前段时间为 Android/java

java - 关于for循环的困惑

java - Hibernate:必须在调用 save() 之前手动分配此类的 id

java - Android 2.x 梵文 unicode 问题

c++ - 初始化静态成员使编译工作......但是为什么