第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android“只有創(chuàng)建視圖層次結(jié)構(gòu)的原始線程才能觸及其視圖。

Android“只有創(chuàng)建視圖層次結(jié)構(gòu)的原始線程才能觸及其視圖。

皈依舞 2019-05-30 13:10:31
Android“只有創(chuàng)建視圖層次結(jié)構(gòu)的原始線程才能觸及其視圖。我用Android制作了一個簡單的音樂播放器。每首歌的視圖包含一個SeekBar,實現(xiàn)方式如下:public class Song extends Activity implements OnClickListener,Runnable {     private SeekBar progress;     private MediaPlayer mp;     // ...     private ServiceConnection onService = new ServiceConnection() {           public void onServiceConnected(ComponentName className,             IBinder rawBinder) {               appService = ((MPService.LocalBinder)rawBinder).getService(); // service that handles the MediaPlayer               progress.setVisibility(SeekBar.VISIBLE);               progress.setProgress(0);               mp = appService.getMP();               appService.playSong(title);               progress.setMax(mp.getDuration());               new Thread(Song.this).start();           }           public void onServiceDisconnected(ComponentName classname) {               appService = null;           }     };這個很好用?,F(xiàn)在我要一個計時器來計算這首歌的進(jìn)度的秒/分鐘。所以我把TextView在布局中,用findViewById()在……里面onCreate(),把這個放進(jìn)去run()后progress.setProgress(pos):String time = String.format("%d:%d",             TimeUnit.MILLISECONDS.toMinutes(pos),             TimeUnit.MILLISECONDS.toSeconds(pos),             TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(                     pos))             );currentTime.setText(time);  // currentTime = (TextView) findViewById(R.id.current_time);但最后一行給了我一個例外:android.view.ViewRoot$CalledFromWrongThreadException:只有創(chuàng)建視圖層次結(jié)構(gòu)的原始線程才能觸摸其視圖。然而,我在這里所做的與我在這里所做的事情基本上是一樣的。SeekBar-在onCreate,然后觸摸它run()-但這并沒有給我這種抱怨.
查看完整描述

4 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗 獲得超9個贊

您必須將更新UI的后臺任務(wù)部分移到主線程上。這里有一個簡單的代碼:

runOnUiThread(new Runnable() {

    @Override
    public void run() {

        // Stuff that updates the UI

    }});

文件Activity.runOnUiThread.

只需將其嵌套在后臺運行的方法中,然后復(fù)制粘貼在塊中間實現(xiàn)任何更新的代碼。只包含盡可能少的代碼,否則就會開始破壞后臺線程的用途。


查看完整回答
反對 回復(fù) 2019-05-30
?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗 獲得超4個贊

我解決了這個問題runOnUiThread( new Runnable(){ ..內(nèi)run():

thread = new Thread(){
        @Override
        public void run() {
            try {
                synchronized (this) {
                    wait(5000);

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            dbloadingInfo.setVisibility(View.VISIBLE);
                            bar.setVisibility(View.INVISIBLE);
                            loadingText.setVisibility(View.INVISIBLE);
                        }
                    });

                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Intent mainActivity = new Intent(getApplicationContext(),MainActivity.class);
            startActivity(mainActivity);
        };
    };  
    thread.start();


查看完整回答
反對 回復(fù) 2019-05-30
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊

我的解決辦法是:

private void setText(final TextView text,final String value){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            text.setText(value);
        }
    });}

在后臺線程上調(diào)用此方法。


查看完整回答
反對 回復(fù) 2019-05-30
?
qq_遁去的一_1

TA貢獻(xiàn)1725條經(jīng)驗 獲得超8個贊

通常,涉及用戶界面的任何操作都必須在主線程或ui線程中執(zhí)行,即onCreate()執(zhí)行事件處理。確保這一點的一種方法是使用runOnUiThread(),另一個是使用處理程序。

ProgressBar.setProgress()它有一個機(jī)制,它總是在主線程上執(zhí)行,所以這就是它工作的原因。

查看完整回答
反對 回復(fù) 2019-05-30
  • 4 回答
  • 0 關(guān)注
  • 968 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號