2013-10-28 82 views
0

我正在致力於發送和接收數據的android應用程序。在應用程序中,我有一個按鈕幾個texviews。當我按下按鈕時,數據(兩個字符)將被髮送。並且已發送的數據將以兩個最初的視圖顯示。setText嘗試顯示字節值時崩潰應用程序

我做了兩個整數和現在的工作,現在我想要做的字節和字符和失敗。

的logcat中提供了以下錯誤: 9月10日至28日:27:19.338:E/AndroidRuntime(13138):android.content.res.Resources $ NotFoundException:字符串資源ID#爲0x0

Beloww是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操作,但崩潰?我使用虛擬數據,所以當調用eventhandler函數時,實際接收到的數據不會被使用,但仍然會在第一次操作後崩潰。有人有消氣嗎?

另一方面,數據每秒發送一次。

下面是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!"); 

    } 

});

+0

我已經更新我的職務和我收到的功能。當我評論所有的settext操作時,應用程序不會崩潰。感謝您使用我的發送代碼上的插件。 – Roy08

回答

2

TextView的有兩種方法等

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

1)第一種方法直接分配一個文本的TextView其作爲傳遞CharSequence的(可以是字符串,StringBuffer的,Spannable ...)
2)第二方法的搜索對於您在資源中使用作爲參數傳遞的ID定義的字符串資源。

並且您通過char作爲參數。此char類型被轉換成int並調用它作爲TextView.setText(int)並搜索資源字符串與那int ID其值沒有在資源中定義。

類型轉換charStringString.valueOf(char),並嘗試一次...

+0

謝謝你的回覆!發送數據的作品!只有在接收功能中它不起作用。它只顯示一個setText操作,然後崩潰(?)。我更新了我的代碼。你可以看一下嗎? – Roy08

+0

你正在得到哪個錯誤? –

+0

我可以讀出Catlog,因爲USB連接到Arduino上的USB主機控制器。有沒有辦法找出錯誤可能是什麼?我猜這是以下錯誤:logcat提供以下錯誤:10-28 09:27:19.338:E/AndroidRuntime(13138):android.content.res.Resources $ NotFoundException:字符串資源ID#0x0 – Roy08

0

組與像

Ytext.setText(""+Byte1); 
+0

感謝您對發送操作的建議,它僅適用於接收操作(我更新了我的文章)應用程序在第一次setText操作後崩潰。 – Roy08

+0

檢查Byte2是否爲空 –

+0

嗨,字節填充在行:char Byte2 =(char)ArrayRecieved [1];並且該數組填充在:ArrayRecieved [1] ='B'; – Roy08

0

setText()一些變化預計字符串或資源ID(INT)。如果你想顯示的數值,你需要將其轉換爲字符串,即:

setText(String.valueOf(someInt)); 
0

試試如下:

Ytext.setText(""+Byte1); 
Xtext.setText(""+Byte2); 
+0

感謝您的評論,發送功能的建議工作。我試圖使用相同的接收功能,但它失敗後一次setText操作。我在我的帖子中更新了我的代碼。你有什麼建議嗎? – Roy08

+0

@ Roy08什麼是崩潰?也發生崩潰。 – GrIsHu

+0

該應用程序總崩潰,我不能告訴你catlog數據,因爲android手機通過USB連接到一個帶有USB主控制器的Arduino。當我在onRecieve函數中註釋setText操作時,應用程序不會崩潰。 – Roy08

1

您正在使用方法的簽名需要一個的CharSequence,因此字符序列。使用setText(someEmptyString + Byte1),您可以從someEmptyString(您將定義爲「」)和Byte1的串聯創建一系列字符。

相關問題