Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我不知道';我不懂runnable,它太令人困惑了_Android_Runnable - Fatal编程技术网

Android 我不知道';我不懂runnable,它太令人困惑了

Android 我不知道';我不懂runnable,它太令人困惑了,android,runnable,Android,Runnable,我有一个连接到服务器并发送消息的代码,它工作得很好,我只是不知道如何运行。 run()中的代码{}是否在循环中执行? 我试着在里面放一个log.e,它只打印一次,那么它实际上是如何工作的呢 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new Thread(new Clien

我有一个连接到服务器并发送消息的代码,它工作得很好,我只是不知道如何运行。 run()中的代码{}是否在循环中执行? 我试着在里面放一个log.e,它只打印一次,那么它实际上是如何工作的呢

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);      
    new Thread(new ClientThread()).start();
}

public void onClick(View view) {
    try {
        EditText et = (EditText) findViewById(R.id.EditText01);
        String str = et.getText().toString();
        PrintWriter out = new PrintWriter(new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream())),
                true);
        out.println(str);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

class ClientThread implements Runnable {

    @Override
    public void run() {
        Log.e("in try","run");
        try {
            InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
            socket = new Socket(serverAddr, SERVERPORT);
        } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

}

要回答您的问题-否,
Runnable
中的
run()
方法不是在循环中执行的。它只执行一次

它只是表示将来可以做的事情,通常是在不同的
线程中进行

run()中的代码{}是否在循环中执行

  • 不,您提供的代码至少不会在循环中运行
注意:您可以使用其他方法在循环中调用它,就像处理程序可以通过调用-
handler.postDelayed(这是1000)将它再次发布到处理程序一样
1000毫秒一次

公共接口可运行- 表示可以执行的命令。通常用于在不同线程中运行代码

公共方法:

公开摘要无效运行()

开始执行类代码的活动部分。这种方法是可行的 在使用类创建的线程启动时调用 它实现了Runnable

可运行的基础知识-

使用
Runnable
接口,可以多次运行该类

范例-

class ClientThread implements Runnable {

    @Override
    public void run() {

         Log.e("in try","run");
         //Some code
    }
  }

//Multiple threads share the same object.
ClientThread  rc = new ClientThread ();
Thread t1 = new Thread(rc);
t1.start();
Thread.sleep(1000); // Waiting for 1 second before starting next thread
Thread t2 = new Thread(rc);
t2.start();
Thread.sleep(1000); // Waiting for 1 second before starting next thread
Thread t3 = new Thread(rc);
t3.start(); 

参考:.

上述答案中已解释了
可运行的功能。对于您对这些答案的评论:


如果套接字确实打开了一个连接,并且您看到了服务器输入上的数据,您是否进行了调试?它是否返回OutputStreamWriter对象?如果服务器关闭,您将无法发送任何内容。然而,这并不意味着android代码会失败。可以设置输出并将内容写入其缓冲区/流,但它永远不会输出。

为什么应用程序仍然能够连接到服务器?如果服务器关闭,我运行应用程序,我假设运行未连接到服务器,因此我在应用程序启动后启动服务器,然后单击“发送”,它仍然能够连接并将文本发送到服务器,这是怎么回事?请参阅我在回答中的注释。Appologise,全部删除,现在我的问题是上面我的主要帖子下的一条评论
为什么应用程序在重新启动后仍然能够连接到服务器?
-你确定它之前在第一次呼叫时启动过一次吗?你确定在代码中其他地方没有其他调用来启动这个可运行类吗?重新启动路由器并获取新的IP地址怎么样?没问题。只要您在方法中提供IP地址作为参数,您就可以始终使用传入的正确IP进行连接。请确保在重新启动应用程序后运行该应用程序。仅使用新IP进行了尝试,如果我在应用程序启动后启动服务器,则不会发送消息,因此这意味着它没有连接。非常感谢。