2017-07-14 46 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' –