setText崩溃我的应用程序 - inStream.read

时间:2013-09-05 08:45:30

标签: android crash stream textview settext

我遇到了setText(TextView)的问题。

view        = EgridView.getChildAt( iterator );
parameter   = (TextView) view.findViewById( R.id.gridItemParameter );


if( modbus.readAvailable() > 0 ){
    if( !((data = modbus.readData()).equals("")) ){





Log.i("-------------TEST-----------", data); // <-------- wrok
//Toast.makeText(getApplicationContext(), data , Toast.LENGTH_LONG).show(); <----- work
// parameter.setText( "test" ); <----------- work
parameter.setText( data ); // <--------- crash





    }
}

为什么** parameter.setText(data); **崩溃我的应用程序?


更多代码:

public int readAvailable(){
    try{
        return inStream.available();
    }  catch( Exception e ){
        return 0;
    }
}

public String readData(){
    try{
        if( isConnected == true && socket.isConnected() && inStream != null ){
            int     i;
            int     oneByte;

            byte    byteArray[] = new byte[ 100 ];

            int     available   = inStream.available();
            String  data        = "";                                               

            if( available > 0 ){
                inStream.read( byteArray );

                for( i = 0; i < available; i++ ){
                    oneByte  = byteArray[ i ] & 0xff;
                    data = data.concat( Integer.toString( oneByte ) + " " );
                }                                                                               

                return data; // <-----
            } else {
                    return "";
            }
        } else {
            errorText = "no communication";
            return "";
        }

    } catch( Exception e ){
        errorText = e.getMessage();

        return "";
    }
}

如果在readData()中我写返回“test”; 然后工作

如果在readData()中我写返回byteArray.toString(); 然后工作

如果在readData()中,我写为(i = 0; i&lt; 10; i ++){然后工作

如果在readData()中,我写 for(i = 0; i&lt; 11; i ++){然后崩溃

在这种情况下,

int available = 13.

我的问题对我来说不合逻辑。请指教。

感谢所有答案

2 个答案:

答案 0 :(得分:0)

您只能在UI线程上修改UI元素,例如TextView。

从Android文档中查看此链接:http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)

答案 1 :(得分:0)

我想你的最终字符串数据

使数据无法填充

所以你的变量数据仍为空

并尝试setText(null),这就是原因..

尝试将Final String Data更改为String Data =“”

如果readData函数存在问题

尝试此解决方案

            InputStream is = conn.getInputStream();

            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            String line = null;
            try {
                while ((line = reader.readLine()) != null) {
                    sb.append((line + "\n"));
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    is.close(); 
                } catch (IOException e) {
                    e.printStackTrace(); 
                }
            }
            Toast.makeText(con, "Return Nya = " +sb.toString(), 0).show();
            Log.v("TEST" , "Return Nya = " + sb.toString());

            is.close();