Java 如何从编辑文本框中获取IP地址?

Java 如何从编辑文本框中获取IP地址?,java,android,Java,Android,嗨,我是android新手,如果这是一个愚蠢的问题,我很抱歉 如何使用编辑文本框而不是硬编码IP地址。 正如您从下面的代码中看到的,我必须将我连接的计算机ip地址放入其中,我要做的是将其设置为使用编辑文本框,例如: String input= edittextIP.getText().toString(); 但我没法让它工作。任何帮助都将不胜感激 谢谢 public class Client { private String serverMessage; public final Stri

嗨,我是android新手,如果这是一个愚蠢的问题,我很抱歉

如何使用编辑文本框而不是硬编码IP地址。 正如您从下面的代码中看到的,我必须将我连接的计算机ip地址放入其中,我要做的是将其设置为使用编辑文本框,例如:

String input= edittextIP.getText().toString();

但我没法让它工作。任何帮助都将不胜感激

谢谢

public class Client {


private String serverMessage;
public final String SERVERIP = "100.100.100.61"; //computer IP address
public final int SERVERPORT = 4444;
private OnMessageReceived mMessageListener = null;
private boolean mRun = false;



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 {

        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. I can't reconnect to this socket
            // after it is closed, which means a new socket has to be created.
            socket.close();
        }

    } catch (Exception e) {

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

    }

}


/// public EditText findViewByid(int edittextIP) {   <--- this was previous try please 
///                                                          disregard this
///     
///     return null;
/// }


public interface OnMessageReceived {
    public void messageReceived(String message);
}
}
公共类客户端{
私有字符串消息;
公共最终字符串SERVERIP=“100.100.100.61”;//计算机IP地址
公共最终int服务器端口=4444;
private OnMessageReceived mMessageListener=null;
私有布尔值mRun=false;
打印输出;
缓冲读取器;
/**
*OnMessagedReceived类的构造函数侦听从服务器接收的消息
*/
公共客户端(OnMessageReceived侦听器){
mMessageListener=侦听器;
}
/**
*将客户端输入的消息发送到服务器
*@param客户端输入的消息文本
*/
公共无效发送消息(字符串消息){
if(out!=null&&!out.checkError()){
out.println(消息);
out.flush();
}
}
公共void stopClient(){
mRun=假;
}
公开募捐{
mRun=真;
试一试{
InetAddress serverAddr=InetAddress.getByName(SERVERIP);
Log.e(“TCP客户端”,“C:连接…”);
//创建套接字以与服务器建立连接
Socket Socket=新套接字(serverAddr,SERVERPORT);
试一试{
//将消息发送到服务器
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()),true);
e(“TCP客户端”,“C:已发送”);
Log.e(“TCP客户端”,“C:完成”);
//接收服务器发回的消息
in=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
//在这种情况下,客户端将侦听服务器发送的消息
while(mRun){
serverMessage=in.readLine();
if(serverMessage!=null&&mMessageListener!=null){
//调用从MyActivity类接收的messageReceived方法
mMessageListener.messageReceived(serverMessage);
}
serverMessage=null;
}
Log.e(“来自服务器的响应”,“S:接收到的消息:“+serverMessage+””);
}捕获(例外e){
Log.e(“TCP”,“S:错误”,e);
}最后{
//插座必须关闭。我无法重新连接到此插座
//关闭后,这意味着必须创建一个新套接字。
socket.close();
}
}捕获(例外e){
Log.e(“TCP”,“C:错误”,e);
}
}

///public EditText findViewByid(int edittextIP){您未能强制转换该值并生成错误的存根。您需要删除findViewByid函数。请尝试以下代码:

TextEdit input = (TextEdit)findViewByid(...);
请注意,您应该直接将IP从活动传递给类,例如通过构造函数:

public class ConnectTask extends AsyncTask<String,String,Client> {
    private string ip;
    public ConnectTask(String ip) {
        this.ip=ip;
    }
 // ...

您应该从活动(从活动扩展而来的类)中获取EditText实例,“findViewById”函数在那里没有意义。“findViewById”是从Activity继承的方法。然后,您可以将在该EditText中键入的文本从Activity传递到客户端实例,例如。

为什么或更好?什么对您不起作用?“但我无法使其起作用。”您无法开始工作的方面有哪些?如果您能更具体地说明您遇到了哪些问题,我们将更容易帮助您解决问题活动在哪里?我已根据要求添加了我的活动。我无法获取此行:InetAddress serverAddr=InetAddress.getByName(SERVERIP);收听编辑文本。很抱歉,findviewbyid是我之前不顾一切地想得到haThanks的回复,你想让我把它放在哪里。很抱歉,我之前在多个地方尝试过该代码,但无法使其工作。你可以通过构造函数来完成此操作…我将添加一个示例,让你使用单独的线程。(
new thread(new Runnable(){void run(){/*您的代码*/}).start();*
)。
public class ConnectTask extends AsyncTask<String,String,Client> {
    private string ip;
    public ConnectTask(String ip) {
        this.ip=ip;
    }
 // ...
ConnectTask task = new ConnectTask(input.getText().toString());