类TextView的setText方法抛出无法解释的异常

时间:2015-03-07 23:45:04

标签: java android exception textview

我写了Android客户端。 ClientThread类实现了Runnable接口,这是run方法:

ClientThread.java

 public void run() {
   connect(); //connects the server

   String msg = ""; //holds the msg recieved from server
   try {
      while(connected && (msg = br.readLine())!= null)
      {
         //System.out.println("Server:"+msg);
          if (!msg.isEmpty())
              creatingActivity.displayServerAnswer("Server:"+msg);

         //notify observers//
         this.setChanged();
        //notify+send out recieved msg to Observers
         this.notifyObservers(msg);
      }
   }
   catch(IOException ioe) { }
   finally { disconnect(); connected = false; }
  }

目的是在设备屏幕上显示服务器答案。

MainActivity.java

    public void displayServerAnswer(String answer){
        TextView textView = (TextView)findViewById(R.id.mainTextView);
        try {
            textView.setText(answer);
        }
        catch(Exception e){

    }
}

由于某种原因,当调用textView.setText(answer);时会抛出异常。我不知道哪种。在我用try-catch块包装行之前,程序停止了运行。 现在我抓住异常并且什么都不做。 即使抛出异常,文本也会设置。 那么如何才能找出这个例外呢?

修改 正如评论中提到的,通过检查异常对象消息字段:

  

只有创建了视图hirarchy的原始线程才能触及它   视图

所以现在我理解异常,但我不明白为什么它只在第二次抛出,客户端线程调用creatingActivity.displayServerAnswer("Server:"+msg);

2 个答案:

答案 0 :(得分:1)

  public void displayServerAnswer(String answer){
    TextView textView = (TextView)findViewById(R.id.mainTextView);
    try {
        textView.setText(answer);
    }
    catch(Exception e){
      e.printStackTrace();
    }
}

您正在捕获异常但未对其执行任何操作。打印堆栈跟踪将显示引发异常的代码行。

答案 1 :(得分:0)

这是因为您在run方法中设置了后台线程中的文本。 使用runonUithread或handler更改text.inside run方法。:)