2011-08-09 6 views
0

私のアプリのデザインに問題があります。特に、メインアクティビティとは異なる、クラスのアセットを開いています。コンテキストとアクティビティの参照

私のプロジェクトのこの部分はWebサーバーであり、WebServerとWebPageという2つのクラスがあります。 WebServerには、次のメソッドがあります。 start(), get(), post(), send(WebPage)といくつかのコンストラクタ。

Webページには、String head(HTTPヘッダー)とbyte [] body(テキストまたは任意のファイルにできるコンテンツ)の2つの変数があります。 WebPageには、1つのメソッドbyte[] getFile(String filename)があり、コンストラクタがbodyのファイルのバイトを保存するために使用します。ファイルはアセットです。

アクティビティが開始すると(onCreate())、WebServerのインスタンスが作成され、start()が呼び出され、リスニングにとどまります。サーバーがGET要求を受け取ると、サーバーはそれを解析し、ファイル名を使用してアセットを開くWebPageオブジェクトを作成します。最後に、WebServerはsend(WebPage)でページを送信します。

WebPageクラスからアクティビティのリファレンスを取得する最も良い方法は何ですか?

答えて

1

あなたの質問には、より多くを説明する必要があるので:

あなたはそれがアンドロイドにし、PC上で動作するように、できるだけ一般的なようあなたのWebServerを維持したいです。

次の操作を行います。 あなたの一般的なウェブサーバーを作成します。

public class WebServer{ 
    int port; 
    public WebServer(int port){ 
     this.port = port; 
    } 
    ////////bla bla bla 
} 

非常に通常の方法といけないを使用し

public class AndroidWebServer extends WebServer{ 
    Context mContext; 
    public webserver(Context mContext, int port){ 
     super(port); 
     this.mContext = mContext; 
    } 
} 

旧回答

をあなたのアンドロイドのWebServerを作成します。記憶を心配するリーク。あなたの活動で

public class webserver{ 
    Context mContext; 
    public webserver(Context mContext){ 
     this.mContext = mContext; 
    } 
} 

webserver A = new webserver(this); 
+0

OK!したがって、逆の操作を行う方法はありません(例えば、WebPageクラスの中からアクティビティの参照を直接取得する命令)。この目的には 'getApplicationContext()'が適していますか? – supergiox

+0

それは逆ではありません!コンストラクタに渡す理由を説明してください。 –

+0

私はWebServerとWebPageのためのより小さく、より汎用性の高いコンストラクタを持っています: 'WebServer(int port)'と 'WebPage(String filename)'。また、私はアンドロイドとPCの両方に使用される "一般的な" WebServerクラスを(可能な限り)持っています。しかし、それが最良の解決策なら、Contextパラメータの有無にかかわらず、いくつかのコンストラクタを作成すると思います。 – supergiox

0

コンストラクタでパラメータとして渡すか、アクティビティが自身を渡せるようにメソッドを追加します。

関連する問題