使用setText导致找不到Source

时间:2013-01-17 04:40:35

标签: android

我有一个程序可以将USB数据记录到我创建的文件中并且工作正常。 我试图使用setText显示一些这些数据,但是setText正确执行一次,然后在下次调用时我得到一个Source not found crash。

我在此运行中将USB数据保存到我的文件中:

    @Override
public void run() {
    ByteBuffer buffer = ByteBuffer.allocate(64);
    UsbRequest request = new UsbRequest();
    request.initialize(mConnection, mEndpointIntr);
    while (true) {
        request.queue(buffer, 64);
        if (mConnection.requestWait() == request) {
            znum.setText("help"); 
            savetofile("GOT data " + System.currentTimeMillis());
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
            }
        } else {
            Log.e(TAG, "requestWait failed, exiting");
            savetofile("10 requestWait failed, exiting");
            break;
        }
    }
}

如果我退出上面的setText行,程序运行愉快,将我的数据保存到文件中。 当我运行上面的代码时,程序崩溃,我得到Source not found指示。

如果我在savetofile行中休息时启动程序,则使用tvZnum设置更新布局以帮助解决问题。

然后我逐步执行代码并返回到setText行。

一切都很好,直到我第二次执行setText,然后崩溃。

它崩溃时似乎是在android.view.ViewRootImpl.checkThread()第4077行。我试着在我的帖子中添加一个屏幕截图,但我还没有足够的声望点。

我宣布:

    TextView znum;

在OnCreate中有这个:

    znum = (TextView) findViewById(R.id.tvZnum);

并且tvZnum在启动器和R中显示正常。

我知道答案必须简单但很简单,我无法理解。

有任何想法吗?

谢谢, 戴尔

编辑:这是logCat(希腊语给我,我无法弄清楚如何在这里格式化):

  

I / dalvikvm(1529):threadid = 3:对信号3作出反应

     

I / dalvikvm(1529):将堆栈跟踪写入'/data/anr/traces.txt'

     

I / System.out(1529):等待调试器解决...

     

I / System.out(1529):等待调试器解决...

     

I /处理(167):发送信号。 PID:1529 SIG:3

     

I / dalvikvm(1529):threadid = 3:对信号3作出反应

     

I / System.out(1529):等待调试器解决...

     

I / dalvikvm(1529):将堆栈跟踪写入'/data/anr/traces.txt'

     

I / System.out(1529):等待调试器解决...

     

I / System.out(1529):等待调试器解决...

     

I /处理(167):发送信号。 PID:1529 SIG:3

     

I / dalvikvm(1529):threadid = 3:对信号3作出反应

     

I / dalvikvm(1529):将堆栈跟踪写入'/data/anr/traces.txt'

     

I / System.out(1529):等待调试器解决...

     

I / System.out(1529):等待调试器解决...

     

I /处理(167):发送信号。 PID:1529 SIG:3

     

I / dalvikvm(1529):threadid = 3:对信号3作出反应

     

I / dalvikvm(1529):将堆栈跟踪写入'/data/anr/traces.txt'

     

I / System.out(1529):等待调试器解决...

     

I / System.out(1529):等待调试器解决...

     

I / System.out(1529):调试器已结算(1359)

     

I /处理(167):发送信号。 PID:1529 SIG:3

     

I / dalvikvm(1529):threadid = 3:对信号3作出反应

     

I / dalvikvm(1529):将堆栈跟踪写入'/data/anr/traces.txt'

     

D / dalvikvm(1529):threadid = 1:撤消后仍然暂停(sc = 1 dc = 1)

     

D / ProMeasure2DActivity(1529):意图:意图{   act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER]   FLG = 0x10000000的   cmp = com.android.missilelauncher / .MissileLauncherActivity}

     

D / ProMeasure2DActivity(1529):setDevice   UsbDevice [MNAME =的/ dev /总线/ USB / 001/002,mVendorId = 1240,mProductId = 63,mClass = 0,mSubclass = 0,mProtocol = 0,mInterfaces = [Landroid.os.Parcelable; @ 40f9e3b0]

     

D / ProMeasure2DActivity(1529):打开SUCCESS

     

D / UsbRequestJNI(1529):init

     

D / ViewRootImpl(1529):pckname = com.android.missilelauncher

     

I /处理(167):发送信号。 PID:1529 SIG:3

     

I / dalvikvm(1529):threadid = 3:对信号3作出反应

     

D / dalvikvm(1529):threadid = 11:撤消后仍然暂停(sc = 1 dc = 1)

     

I / dalvikvm(1529):将堆栈跟踪写入'/data/anr/traces.txt'

     

I / ActivityManager(167):显示   com.android.missilelauncher / .MissileLauncherActivity:+ 3s791ms

     

I / ActivityManager(167):不再需要com.android.email(pid 1266):   隐藏#16

     

D / Finsky(696):[1] 5.onFinished:安装状态复制   成功了。

1 个答案:

答案 0 :(得分:1)

基于我在阅读Luksprog的评论后所做的研究,这是实际的代码解决方案似乎有效:

  1. 删除znum =(TextView)findViewById(R.id.tvZnum);来自我的OnCreate。
  2. 替换znum.setText(“help”);使用此代码:

            this.runOnUiThread(new Runnable() {
                public void run() {
                    ((TextView) findViewById(R.id.tvZnum)).setText("help");
                }
            });
    

    我相信这样做的结果是将setText操作添加到主UI线程中的队列中。