2012-02-01 29 views
1

在我的Android項目我有主Activity稱爲TestFIO,這是在包org.testing.file.io.main,我試圖保持明確和發送的所有我有一個叫做FileManipulator新類的功能,它位於org.testing.file.io.main.manipulator。下面是FileManipulator類的樣子:有問題在組織代碼在包

package org.testing.file.io.main.manipulator; 

// imports here 

public class FileManipulator extends TestFIO { 
    public String readFileFromCard(String location) { 
     // some code here 
    } 

    // more functions here 
} 

這裏是TestFIO一個例子:

// header with package and imports 

import org.testing.file.io.main.manipulator.FileManipulator; 

public class TestFIO extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final String[] fileString = readFileFromCard(Environment.getExternalStorageDirectory() + "test.txt"); 
    } 
} 

的問題是,Eclipse正在強調readFileFromCard,並顯示以下錯誤:

Eclipse Error Dialog

我在做什麼錯或如何正確的方式來組織我的代碼在pac kages?

PS:對不起,如果這是一個愚蠢的問題,我來自iOS開發。

+0

您正在調用父類中的子方法及其對繼承的違反規則 – 2012-02-01 05:11:45

回答

1

編譯問題是因爲你試圖調用超類的子類中定義的方法。繼承不是那樣工作的;子類繼承了超類的所有公共方法和受保護的方法,但超類不知道其子類的方法。

此外,FileManipulator擴展您的Activity類似乎並不合理。 FileManipulator是否通過「is-a」測試,換句話說,它是一種Activity?看起來更像是Activity將用於完成工作的「幫手」類。在這種情況下,FileManipulator不應該延伸TestFIO,而應該是獨立的,由TestFIO創建。

+0

我應該怎樣爲我的類工作在「Activity」類上? 'FileManipulator'使用'getBaseContext()'來顯示'Toast',所以我擴展了'Activity'。 *對不起,如果這是一個愚蠢的問題,我來自iOS開發。* – 2012-02-01 11:30:31

+0

有幾種方法可以獲得「助手」類來調用UI更改。最簡單的方法是在創建'FileManipulator'時傳遞'Activity'的實例,但是對於這個簡單的解決方案有一個警告:您只能調用從創建UI的線程更改UI的方法(有時稱爲「 UI線程「)。根據FileManipulator的使用方式,這可能在您的應用程序中可用,或者可能導致異常。 – 2012-02-01 17:23:04

+1

更強大但更復雜的解決方案是將「助手」類改爲「AnsycTask」。這是一個關於'AyncTask'和一些其他選項的好教程:http://www.vogella.de/articles/AndroidPerformance/article.html – 2012-02-01 17:27:26

1

我看到TestFIO是父類,FileManipulator是根據你的代碼的子類。 然後你不能調用子類的方法,你需要一個FileManipulator的實例。 我錯了嗎?