2017-07-14 47 views
0

晚上好, 設置字符串到TCPClient.class串IP我試圖從TextView的從MainActivity傳遞文本數據Client.class(TCP客戶端),把它到另一個字符串(實際上我傳遞IP設置在MainActivity中的TextView中,只是試圖將它加載到Client.class中),但是當我試圖用烤麪包示意它(爲了測試,如果我已經通過了變量是這樣的東西)問題,同時從一個TextView

enter image description here

這裏的客戶端代碼:

public class Client { 

static Intent intent = getIntent(); 
static String getIp = intent.getExtra("key"); 
private String serverMessage; 
public static final String SERVERIP = getIp; //your computer IP address 
public static final int SERVERPORT = 4444; 
private OnMessageReceived mMessageListener = null; 
private boolean mRun = false; 

MainActivity main; 
PrintWriter out; 
BufferedReader in; 
/** 
* Constructor of the class. OnMessagedReceived listens for the messages received from server 
*/ 
public Client(OnMessageReceived listener) { 
    mMessageListener = listener; 
} 

/** 
* Sends the message entered by client to the server 
* @param message text entered by client 
*/ 
public void sendMessage(String message){ 
    if (out != null && !out.checkError()) { 
     out.println(message); 
     out.flush(); 
    } 
} 

public void stopClient(){ 
    mRun = false; 
} 

public void run() { 

    mRun = true; 

    try { 
     //here you must put your computer's IP address. 
     InetAddress serverAddr = InetAddress.getByName(SERVERIP); 

     Log.e("TCP Client", "C: Connecting..."); 

     //create a socket to make the connection with the server 
     Socket socket = new Socket(serverAddr, SERVERPORT); 

     try { 

      //send the message to the server 
      out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 

      Log.e("TCP Client", "C: Sent."); 

      Log.e("TCP Client", "C: Done."); 

      //receive the message which the server sends back 
      in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

      //in this while the client listens for the messages sent by the server 
      while (mRun) { 
       serverMessage = in.readLine(); 

       if (serverMessage != null && mMessageListener != null) { 
        //call the method messageReceived from MyActivity class 
        mMessageListener.messageReceived(serverMessage); 
       } 
       serverMessage = null; 

      } 

      Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'"); 

     } catch (Exception e) { 

      Log.e("TCP", "S: Error", e); 

     } finally { 
      //the socket must be closed. It is not possible to reconnect to this socket 
      // after it is closed, which means a new socket instance has to be created. 
      socket.close(); 
     } 

    } catch (Exception e) { 

     Log.e("TCP", "C: Error", e); 

    } 

} 

//Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity 
//class at on asynckTask doInBackground 
public interface OnMessageReceived { 
    void messageReceived(String message); 
} 

}

MainActivity:

 Intent i = new Intent(MainActivity.this, Client.class); 
     i.putExtra("STRING_I_NEED", String.valueOf(indr)); 
+0

'Intent.putExtra' –

+0

我實際上沒有在Client.class中的OnCreate我怎麼才能從意圖回收數據?請你舉個例子。 –

回答

0

在你MainActivity做這樣的事情:

Intent i = new Intent(MainActivity.this, Client.class); 
i.putextra("key", IPTextView); 
// IPTextView is the IP address you want to toast 

,並在您Client class做到以下幾點:

String getIp = getIntent.getExtra("key") 

的,你可以Toast它想:

Toast.makeText(context, getIp, Toast.LENGTH_SHORT).show(); 

你有另一種選擇是節省IP地址在SharedPreferences和拿回來Client class


或者你也可以創建一個帶有一些返回值的靜態方法,那麼你可以通過類名獲得Client class中的IP。

+0

還有一件事,當我在客戶端類中寫入「String getIp = getIntent.getExtra(」key「)」時,說「不能解析符號」getIntent「 –

+0

嘗試'Intent intent = getIntent();' –

+0

對不起'Intent intent =((Activity)context).getIntent();'因爲它不是'Activity' –