Android 使用setText会导致找不到源

Android 使用setText会导致找不到源,android,Android,我有一个程序,可以将USB数据记录到我创建的文件中,并且运行良好。 我试图使用setText显示一些数据,但是setText正确执行一次,然后下次调用它时,我得到一个sourcenotfound崩溃 在此运行中,我正在将USB数据保存到我的文件中: @Override public void run() { ByteBuffer buffer = ByteBuffer.allocate(64); UsbRequest request = new UsbRequest();

我有一个程序,可以将USB数据记录到我创建的文件中,并且运行良好。 我试图使用setText显示一些数据,但是setText正确执行一次,然后下次调用它时,我得到一个sourcenotfound崩溃

在此运行中,我正在将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;
        }
    }
}
如果我rem掉上面的setText行,程序运行得很愉快,将数据保存到一个文件中。 当我像上面那样运行代码时,程序崩溃,我得到一个Source not found指示

如果我在savetofile行上以一个中断来启动程序,那么布局将使用tvZnum set进行更新,以帮助我更好地完成任务

然后我一步一步地遍历代码,返回到setText行

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

当它崩溃时,它似乎位于android.view.ViewRootImpl.checkThread()行4077。我试图在我的帖子中添加一张截屏图片,但我还没有足够的声望点数

我宣布:

    TextView znum;
并在OnCreate中创建:

    znum = (TextView) findViewById(R.id.tvZnum);
tvZnum在发射装置和R中表现良好

我知道答案一定很简单,但我想不出来

有什么想法吗

谢谢, 戴尔

编辑:这里是logCat(我是希腊语,我不知道如何在这里格式化):

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

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

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

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

I/进程(167):发送信号。PID:1529信号:3

I/dalvikvm(1529):线程ID=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信号:3

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

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

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

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

I/进程(167):发送信号。PID:1529信号:3

I/dalvikvm(1529):线程ID=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信号:3

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

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

D/dalvikvm(1529):线程ID=1:撤消后仍挂起(sc=1 dc=1)

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

D/Promeasure2Activity(1529):设置设备 UsbDevice[mName=/dev/bus/usb/001/002,mVendorId=1240,mProductId=63,mClass=0,mSubclass=0,mProtocol=0,minterface=[Landroid.os.Parcelable;@40f9e3b0]

D/Promeasure2Activity(1529):开放式成功

D/UsbRequestJNI(1529):初始

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

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

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

D/dalvikvm(1529):threadid=11:撤消后仍挂起(sc=1 dc=1)

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

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

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

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


根据我在读了Luksprog的评论后所做的研究,以下是实际的代码解决方案:

  • 从我的OnCreate中删除znum=(TextView)findViewById(R.id.tvZnum)
  • 将znum.setText(“帮助”)替换为以下代码:

            this.runOnUiThread(new Runnable() {
                public void run() {
                    ((TextView) findViewById(R.id.tvZnum)).setText("help");
                }
            });
    
    我相信这样做的结果是将setText操作添加到主UI线程中的队列中


  • 请把日志寄出去output@Henry不确定这是否是您想要的logCat方式。在tcpip上使用adb时,我从PowerCmd捕获了它。视图必须从主UI线程而不是后台线程更新(我假设您正在这样做)。它第一次起作用是因为您可能在
    onCreate
    方法中启动线程,这会给您一点时间,直到视图实际显示在屏幕上(并且会引发异常)。使用
    rununuithread
    或在
    znum
    上发布
    Runnable
    来设置文本(发布方法)。@Luksprog谢谢!有了这些信息,我想出了一个解决方案(我想)。我对标记答案不太在行。我看不到将评论标记为答案的方法,所以我会发布一个答案,如果我找到了方法,我会给你评分。