2012-02-01 10 views
1

私のAndroidプロジェクトではにあるTestFIOと呼ばれるメインのActivityがあります。私はそれを明確に保ち、​​私が持っていたすべての機能をFileManipulatorという新しいクラスに送りました。これはに位置しています。ここで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

親クラスで子メソッドを呼び出していて、継承違反のルールです。 –

答えて

1

コンパイルの問題は、スーパークラスのサブクラスで定義されたメソッドを呼び出そうとしているためです。継承はそのようには機能しません。サブクラスはすべてのpublicメソッドとprotectedメソッドをスーパークラスから継承しますが、スーパークラスはそのサブクラスのメソッドについて何も知らない。

さらに、FileManipulatorActivityクラスに拡張することは妥当ではないようです。 FileManipulatorは "is-a"テストに合格しますか、換言すれば、それはActivityの一種ですか? Activityがその仕事をするのに使う "ヘルパー"クラスのような感じです。その場合、FileManipulatorTestFIOを拡張するのではなく、TestFIOによって作成されたスタンドアロンであるべきです。

+0

クラスが[アクティビティ]クラスで作業するにはどうすればよいですか? 'FileManipulator'は' getBaseContext() 'を使って' Toast'を表示するので、 'Activity'を拡張しました。 *これは間違った質問であれば申し訳ありませんが、私はiOS開発から来ています。* –

+0

UIの変更を呼び出すためのヘルパークラスを取得するには、いくつかの方法があります。最も簡単なのは、 'FileManipulator'を作成するときに' Activity'のインスタンスを渡すだけですが、その簡単な解決策には注意が必要です:UIを作成したスレッドからUIを変更するメソッドを呼び出すことができますUIスレッド」)。 FileManipulatorがどのように使用されているかによって、アプリで問題ないか、例外が発生する可能性があります。 –

+1

より強固だがもっと複​​雑な解決策は、代わりに "ヘルパー"クラスを 'AnsycTask'にすることです。ここに 'AyncTask'とその他のオプションに関する良いチュートリアルがあります:http://www.vogella.de/articles/AndroidPerformance/article.html –

1

私はTestFIOが親クラスであると見て、FileManipulatorはコードに従って子クラスです。 次に、子クラスのメソッドを呼び出すことはできません.FileManipulatorのインスタンスが必要です。 私は間違っていますか?

関連する問題