2013-03-14 56 views
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 

請建議如何解決這個問題。

+0

你可以發佈日誌嗎? – 2013-03-14 08:13:31

+0

@SadeshkumarPeriyasamy:它沒有編譯 – Supreet 2013-03-14 08:15:56

回答

1

doInBackground已經在新任務中運行。您可以使用新的thread刪除代碼的包裝。

只是擺脫:

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

在Java中,

其在外部類的不同方法定義應該是最後一個內部類內使用的變量。

因此,聲明在run方法中使用的名稱,電話,文件名作爲final。

相關問題