2011-08-09 66 views
0

我的應用程序的設計出現了一些問題,尤其是從類中打開資源,與主Activity不同。上下文和活動的參考

我的項目的這一部分是一個網絡服務器,有2個類:WebServer和WebPage。 WebServer有這些方法: start(), get(), post(), send(WebPage)和一些構造函數;

WebPage有2個變量:String head(HTTP標題)和byte [] body(可以是文本或任何文件的內容)。 WebPage有一個方法,byte[] getFile(String filename),由構造函數用來保存正文中的文件字節。該文件是一項資產。

當活動啓動時(onCreate()),它創建一個WebServer的實例,調用start()並保持監聽。當服務器收到一個GET請求時,它解析它,並使用文件名創建一個WebPage對象來打開資產。最後WebServer只是用send(WebPage)發送頁面。

從WebPage類獲取活動引用的最佳方法是什麼?

回答

1

因爲你的問題應該更多解釋說:

你想Web服務器讓你儘可能的通用,使其適用於Android和PC。

執行以下操作: 創建通用的WebServer:

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

建立自己的Android Web服務器

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

老回答

使用非常通常的方式和不擔心記憶泄漏。

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

在你的活動

webserver A = new webserver(this); 
+0

好!因此,沒有辦法做相反的操作(例如,直接從WebPage類中獲取活動引用的指令)!是'getApplicationContext()'適合這個目的嗎? – supergiox

+0

這不是相反!你能解釋一下爲什麼你不想在構造函數中傳遞它? –

+0

我會有一個更小更通用的WebServer和WebPage的構造函數,類似於:'WebServer(int port)'和'WebPage(String filename)'。此外,我還會(儘可能)爲「通用」Web服務器類,用於Android和PC。但如果這是最好的解決方案,我想我會創建幾個構造函數,帶和不帶Context參數。 – supergiox

0

將它作爲參數傳遞給構造函數,或者添加一個方法,以便您的活動能夠自行傳遞。