2013-02-20 54 views
0

如何將一個變量作爲指針傳遞給函數? 我有以下的,我想重構Android,我如何傳遞一個變量作爲指向函數的指針?

public static HttpResponse getJSONEntityFromURL(Context context, String url) throws ClientProtocolException, IOException { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(url); 
     httpget.addHeader("Accept", "application/json"); 
     httpget.addHeader("Content-Type", "application/json; charset=UTF-8"); 
     HttpResponse response; 

     response = httpclient.execute(httpget); 
     return response; 
    } 

到這樣的事情

public static HttpResponse getJSONEntityFromURL(Context context, String url) throws ClientProtocolException, IOException { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(url); 
      setHeaders(httpget); 
     HttpResponse response; 

     response = httpclient.execute(httpget); 
     return response; 
    } 

private static void setHeaders(HttpRequestBase httpget) { 
    httpget.addHeader("Accept", "application/json"); 
    httpget.addHeader("Content-Type", "application/json; charset=UTF-8"); 
} 

我假設我需要通過HTTPGET paramater作爲指針代碼?

+0

你不能,java中沒有這種東西。你可以使用一個接口,雖然 – njzk2 2013-02-20 16:45:08

回答

3

我假設我需要通過httpget參數作爲指針?

不,因爲Java沒有指針。

你在那裏的代碼似乎很好 - 你將HttpGet對象傳遞給setHeaders()並在其上調用方法。如果您對當前語法有特殊問題,請解釋。

+0

啊,這解釋了爲什麼我正在努力解決如何傳遞一個指針:)這同樣適用於本地類型或只是對象嗎? – jamesc 2013-02-20 16:46:51

+0

@jamesw:原語('int','float','boolean'等)是按值傳遞的。對象('Integer','Float','Boolean','HttpGet')是通過引用傳遞的。 – CommonsWare 2013-02-20 16:47:43

+0

酷!謝謝 – jamesc 2013-02-20 16:49:16

1

我會使用

private static void setHeaders(final HttpRequestBase httpget) { 
    httpget.addHeader("Accept", "application/json"); 
    httpget.addHeader("Content-Type", "application/json; charset=UTF-8"); 
} 

確保它不是一個指針,但在這種情況下,參考HTTPGET而不返回HttpRequestBase改變。

+0

謝謝,這對我尋求知識有很大幫助 – jamesc 2013-02-20 16:48:20

+1

@StefanBe:'static'不是Java中的方法參數的有效修飾符。至少,Java抱怨編譯器錯誤。你的意思是「最終」? – CommonsWare 2013-02-20 16:49:25

+0

uuups。對不起。此外,我認爲我的例子是錯誤的... – 2013-02-20 16:53:12

1

的Java只允許您通過引用,因爲Java沒有實現指針運算

所有原始類型被複制過去了,所有的對象類型由裁判通過。 (通過複製,但內存地址複製整個對象的副本,而不是)

你是我相信的方式是正確的:

private static void setHeaders(HttpRequestBase AGet) { 
    AGet.addHeader("Accept", "application/json"); 
    AGet.addHeader("Content-Type", "application/json; charset=UTF-8"); 
} 

除非你會需要在一些地方使用此方法否則我推薦第一個代碼。

http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html < - 文檔

1

可以使用HttpMessage界面,如下圖所示: -

http://developer.android.com/reference/org/apache/http/HttpMessage.html

這將允許你接受這個接口的實現,即HTTPGET

的實例

ie: -

private static void setHeaders(HttpMessage httpMessage) 
{ 
    httpMessage.addHeader("Accept", "application/json"); 
    httpMessage.addHeader("Content-Type", "application/json; charset=UTF-8"); 
} 
相關問題