0

我正在开发一个发送和接收数据的 android 应用程序。在应用程序中,我有一个按钮和一些 texviews。当我按下按钮时,将发送数据(两个字符)。并且已经发送的数据将显示在两个 tekst 视图中。

我对两个整数做了同样的事情,现在我想对字节和字符做同样的事情,但失败了。

logcat 给出以下错误: 10-28 09:27:19.338: E/AndroidRuntime(13138): android.content.res.Resources$NotFoundException: String resource ID #0x0

下面是 onClick lisener 代码:

  @Override
  public void onClick(View v) {
                 
   // Control value
   ArrayOutput[0] = 'B';
   ArrayOutput[1] = 'B';

                                                
 //Creating TextView Variable
 TextView text = (TextView) findViewById(R.id.tv);
                 
 //Creating TextView Variable
TextView statustext = (TextView) findViewById(R.id.status);
                 
                 
       //Sets the new text to TextView (runtime click event)
 text.setText("You Have click the button");

                
// Convert string to bytes
ArrayOutput[0] = ArrayRecieved[0];
ArrayOutput[1] = ArrayRecieved[1];
                
 final char Byte1 = (char) ArrayOutput[0];
 final char Byte2 = (char) ArrayOutput[1];
                
final TextView Xtext = (TextView) findViewById(R.id.xtext);              
final TextView Ytext = (TextView) findViewById(R.id.ytext);
Ytext.setText(Byte1);
Xtext.setText(Byte2);
                
                     
 try
 {
   statustext.setText("Sending....");
   server.send(ArrayOutput);
         statustext.setText("Sending succes");
 } 
       catch (IOException e)
 {
      statustext.setText("Sending failed");
      Log.e("microbridge", "problem sending TCP message", e);
 }  
    }
 });

有人知道问题可能是什么吗?欢迎任何建议!如果我需要提供更多信息,请说出来。

更新

谢谢大家的建议!对于 onclick 功能,它可以工作!我尝试对接收功能做同样的事情。当有可用数据时调用此事件处理函数。

当我使用 setText 函数时,它会在几个周期后使我的 ap 崩溃,在这个函数中我有三个 settext 操作。只有第一个被调用(然后应用程序崩溃)。当我更改这些操作的顺序时,仍然只调用第一个。会不会是应用显示第一个 settext 操作但崩溃了?我使用虚拟数据,所以当调用事件处理函数时,实际接收到的数据没有被使用,但应用程序在第一次操作后仍然崩溃。有人有建议吗?

另一方面,每秒发送一次数据。

下面是 onRecieve(事件处理程序)函数:

@Override
public void onReceive(com.example.communicationmodulebase.Client client, byte[] data)
{
                
    Log.e(TAG, "In handler!");
                
    //Control value
    ArrayRecieved[0] = 'C';
    ArrayRecieved[1] = 'B';

    if (data.length < 2){
        return;
    }
                
   // Set data that has been recieved in array
   //ArrayRecieved[0] = data[0];
   //ArrayRecieved[1] = data[1];
                
   char Byte1 = (char) ArrayRecieved[0] ;
   char Byte2 = (char) ArrayRecieved[1] ;
                
   TextView Xtext = (TextView) findViewById(R.id.xtext);                 
   TextView Ytext = (TextView) findViewById(R.id.ytext);
   Xtext.setText(""+Byte2);
   Ytext.setText(""+Byte1);

   TextView textRecvStatus = (TextView) findViewById(R.id.RecvStatusText);
   textRecvStatus.setText("In handler!");
                                    
   }

});

4

5 回答 5

2

TextView 有两种方法,例如

TextView.setText(CharSequence) and TextView.setText(int).

1) 第一种方法直接将文本分配给 TextView,该文本作为 CharSequence 传递(可以是 String、StringBuffer、Spannable...)
2) 第二种方法搜索您在 Resources 中定义的 String 资源,ID 作为参数传递。

char你作为参数传递。这char是类型转换int并调用它,TextView.setText(int)并搜索具有该 ID 的资源字符串,该intID 的值未在资源中定义。

键入 cast charas StringlikeString.valueOf(char)并尝试一次...

于 2013-10-28T09:34:14.700 回答
1

您正在使用的方法的签名采用 CharSequence,因此是字符序列。使用setText(someEmptyString + Byte1),您可以从 someEmptyString(您将定义为“”)和 Byte1 的串联中创建一个字符序列。

于 2013-10-28T09:01:52.857 回答
0

设置一些变化,比如

 Ytext.setText(""+Byte1);
于 2013-10-28T08:55:29.327 回答
0

setText()需要字符串或资源 id (int)。如果要显示数值,则需要将其转换为字符串,即:

setText(String.valueOf(someInt));
于 2013-10-28T08:56:33.740 回答
0

尝试如下:

Ytext.setText(""+Byte1);
Xtext.setText(""+Byte2);
于 2013-10-28T08:56:40.827 回答