user2115240
user2115240

Reputation: 29

Changing UI from another thread

UPDATED: I updated it seith some logs inputs, than you for your help.

I'm applying the following code:

@Override
public void run() {

     byte[] bytes = null;

     int TIMEOUT = 5000;

     int status = connection.bulkTransfer(ep, bytes, ep.getMaxPacketSize(), TIMEOUT);

     Log.d(TAG, "status: " + status);

     write_to_screen( bytes );

}

public void write_to_screen( byte[] bytes  ) {

    Log.d(TAG, "bytes: " + bytes);

    String str_non_final = null;

    try {

        str_non_final = new String( bytes, "UTF-8");
        Log.d(TAG, "str_non_final : " + str_non_final );

    } catch (UnsupportedEncodingException e) {

        e.printStackTrace();

    }   

    final String str = str_non_final;

    Log.d(TAG, "str: " + str);

    runOnUiThread(new Runnable() {@Override public void run()
    {
       textView7.setText( str );
       Log.d(TAG, "UI updated");
    }
    });

}   

The result of the logcat is as follows:

D/EthernetActivity(15721): open SUCCESS

D/EthernetActivity(15721): status: -1

D/EthernetActivity(15721): bytes: null

so it would seem to me that the problem is in "str_non_final = new String( bytes, "UTF-8");". What is wrong with this?

Upvotes: 0

Views: 84

Answers (1)

Jignesh Ansodariya
Jignesh Ansodariya

Reputation: 12695

in this statement

str_non_final = new String( bytes, "UTF-8");

you are using byte and which is null as printed in your logcat. so it will throw the NullPointerException and your catch is able to handle only UnsupportedEncodingException.

make sure that bytes should not null before call

write_to_screen( bytes );

Upvotes: 1

Related Questions