0

データを送受信するAndroidアプリに取り組んでいます。アプリには、いくつかのテックスビューのボタンがあります。ボタンを押すと、データ(2文字)が送信されます。送信されたデータは、2 つの tekst ビューに表示されます。

私は2つの整数で同じことをしましたが、それはうまくいきました。バイトと文字で同じことをしたいのですが、それは失敗します。

logcat は次のエラーを返します: 10-28 09:27:19.338: E/AndroidRuntime(13138): android.content.res.Resources$NotFoundException: String resource ID #0x0

以下は、onClick リスナー コードです。

  @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 がクラッシュします。この関数には、3 つの 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 には次のような 2 つのメソッドがあります。

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

1) 最初のメソッドは、CharSequence として渡される TextView にテキストを直接割り当てます (String、StringBuffer、Spannable など)

そして、あなたはパラメータとして渡しcharています。これcharは型キャストされint、それを as として呼び出し、値が Resources で定義されていない ID をTextView.setText(int)持つ Resource String を検索します。int

キャストcharStringlikeString.valueOf(char)と入力して、一度試してみてください...

于 2013-10-28T09:34:14.700 に答える
1

使用しているメソッドの署名は CharSequence を取るため、文字のシーケンスです。を使用してsetText(someEmptyString + Byte1)、someEmptyString ("" として定義) と Byte1 の連結から一連の文字を作成します。

于 2013-10-28T09:01:52.857 に答える
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 に答える
0

のようないくつかの変更を加えて設定します

 Ytext.setText(""+Byte1);
于 2013-10-28T08:55:29.327 に答える