2011-03-11 54 views
2

之間我有2個活動在我的客戶端/服務器項目:
1 - 登錄(開業連接)
2 - HANDELING遊戲。通插座,ObjectInputStream的,ObjectOutputStream的Activites

我厭倦了使用Intenet和startActivity傳遞Socket,ObjectInputStream,ObjectOutputStream對象,但它只能傳遞可序列化的對象。
我該如何傳遞這個對象?
我讀過,我可以使用應用程序標籤進行此項使用,但我不明白。
你們可以帶我去解決方案
謝謝。

回答

1

你可以做的另一件事是將流/套接字對象的引用存儲在靜態可訪問的類中,然後從其他活動中選取它們。

有關android中靜態訪問的強制性警告:請確保您靜態存儲的任何內容都具有直接或間接引用View或Activity對象,因爲這會導致內存泄漏。

0

是的,你不能序列化文件對象(包括套接字),因爲這樣做沒有任何意義。

但是,爲什麼您需要將連接傳遞給第二個活動呢?爲什麼不做以下操作:

  1. 在第一個活動中登錄,獲取有關用戶需要的一些數據。
  2. 將獲取的數據傳遞給第二個活動。如果您需要與服務器通信,只需在第二個活動中打開一個新連接。
0

如果你不想開始一項服務,你可以創建一個全局變量。

創建該插座這樣的Singleton模式:

public class SocketSingleton { 


private static Socket socket; 

public static void setSocket(Socket socketpass){ 
    SocketSingleton.socket=socketpass; 
} 

public static Socket getSocket(){ 
    return SocketSingleton.socket; 
    //return socket; 
} 

}

然後在代碼只是改變全局值:

 public void changeScreen(Socket socket, String ip, int port) { 
     SocketSingleton.setSocket(socket); 
     Intent i = new Intent(getActivity().getApplicationContext(), ControlActivity.class); 
     i.putExtra("ip", ip); 
     i.putExtra("port",port); 
     startActivity(i); 
    } 
相關問題