当前位置: 首页 > 知识库问答 >
问题:

android中的Java线程回调

孔山
2023-03-14

不管什么原因,我的回拨电话打不通。基本上,我将使用我创建的tcp服务器进行群组聊天。我试图在java中创建一个线程,然后使用回调将我从套接字获得的信息提供给主活动。

当前收到得错误:

12-04 02:53:05.969  15143-15169/com.AndroidBabble E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-4340
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
public interface ResponseEvent {
  public void responseEvent();
}    
public class Main extends Activity implements ResponseEvent{
  Button btn;
  ClientTask client;
  String LOCALHOST = "localhost";
  int PORT = 5678;
  Thread thread;
  /**
   * Called when the activity is first created.
   */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn = (Button) findViewById(R.id.button);
//    Thread thread = new Thread(client = new ClientTask(this, LOCALHOST, PORT));
    client = new ClientTask(this, LOCALHOST, PORT);

  }

  public void button(View v){
    thread = new Thread(client);
    thread.start();

  }

  public void responseEvent(){
    Toast.makeText(getBaseContext(), "Trig", Toast.LENGTH_LONG).show();
  }


}

客户端任务

public class ClientTask implements Runnable{
  public Handler mHandler;
  private ResponseEvent re;
  BufferedReader in;
  Socket socket;
  String HOSTNAME;
  int PORT;
  String scan;

  public ClientTask(ResponseEvent event, String HOSTNAME, int PORT){
    re = event;
    this.HOSTNAME = HOSTNAME;
    this.PORT = PORT;
  }

  public void run(){
 //   try {
  //    socket = new Socket(HOSTNAME, PORT);
   //   in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

      re.responseEvent();
//    } catch (IOException ex) {
    }
  }

最后,我想通过响应事件传递一个字符串,它将获得它的主要内容。

共有1个答案

班宏毅
2023-03-14
 public void responseEvent(){
    Toast.makeText(getBaseContext(), "Trig", Toast.LENGTH_LONG).show();
  }

在线程的上下文中调用responseevent。但是toast必须由UI线程处理。由于responseevent是在活动内部定义的,您可以使用runOnUiThread在UI线程队列中发布一个Runnable,

 类似资料:
  • 问题内容: 我的android类中有以下线程。我如何从线程中获取err的值??? 我希望该值是方法的返回值,但是对于我一生来说,我无法获得该值… 问题答案: 您可以通过两种方式实现这一目标。 在 糟糕的 方式。创建一个可变对象,如整数 列表 ,然后让Thread(可运行)写入列表。您可以在外部类/方法的列表中访问值。 使用而不是。一个可以返回值

  • 除了隐式用户界面线程之外,我还制作了两个线程(可运行的),它们内部都有一个 while 循环,我定期检查我实现的消息队列中的更新。 一开始的问题是这两个while循环是无限的,它们变化得如此之快,如此之多,几乎耗尽了设备的所有CPU。所以我考虑让while循环在每个周期后Hibernate大约100毫秒,让其他线程完成它们的工作,但是我遇到了另一个问题: 现在,问题是线程Hibernate了100

  • 我正在开发应用程序(Matt的traceroute windows版本http://winmtr.net/),它创建了多线程,每个线程都有自己的进程(执行ping命令)。 使用阻塞队列(在任务执行之前保留任务) 平丝。JAVA 现在如果我创建多个线程,比如在一个循环中超过500个线程,并在池执行器中执行 执行线程 我确实知道LinkedBlockingQueue在执行任务之前持有任务。每个线程的进

  • 问题内容: 在android中,我正在创建用于url连接的线程。在线程中,我将响应消息存储在全局声明的字符串中。当我访问method方法时,它返回null。 当我调用该方法时,它返回null。 问题答案: 您真的只想使用它,尝试一下

  • 问题内容: 今天有人在采访中问我有关Java线程概念的问题吗?问题是… 什么是线程? 我们为什么要穿线? 线程上的实时示例。 我们可以在Spring框架服务类中创建线程吗? flex可以调用线程吗? 除了Thread的定义之外,我没有回答任何问题,我也是从互联网中学到的。 谁能对此清楚地解释我。 更新 : 线程和普通的Java类之间有什么区别。为什么我们需要线程…我可以在线程中执行业务逻辑吗?我可

  • 问题内容: 我有一个方法。值在内部被更改,我想将其返回给该方法。有没有办法做到这一点? 问题答案: 可以使用局部最终变量数组。该变量必须是非基本类型,因此可以使用数组。你还需要同步两个线程,例如使用CountDownLatch: 你也可以这样使用an Executor和a Callable: