android toast更新,【已解决】Android中在新线程中调用Toast.makeText导致程序崩溃

【问题】

之前虽然已经实现了,可以通过在新建的线程中,及时动态更新进度条的问题了:

但是结果却在:Toast.makeText(getApplicationContext(), "歌曲下载完毕", Toast.LENGTH_SHORT).show();

的位置,导致程序崩溃。

【解决过程】

1.参考:

发现,好像要去实现,不同线程之间的,send message。

所以去试试。

结果是,用了如下代码:package crifan.com.downloadsongtastemusic;

import java.io.File;

import java.io.IOException;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.StrictMode;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.widget.EditText;

import android.widget.ProgressBar;

//import android.widget.TextView;

import android.widget.Toast;

import android.content.Intent;

public class MainActivity extends Activity {

private ProgressBar pgbDownload;

private int downloadedPercent = 0;

public static final int maxPercent = 100;

private Handler progressBarHandler = new Handler();

/** Called when the user clicks the Download button */

public void preformDownload(View view) {

......

try {

fullFilename.createNewFile();

fullFilename.setWritable(Boolean.TRUE);

// Start lengthy operation in a background thread

new Thread(new Runnable() {

public void run() {

crifanLib.UpdateProgressCallback updateProgressCallback = new crifanLib.UpdateProgressCallback() {

public void updateProgress(long currentSize, long totalSize){

downloadedPercent = (int)((currentSize * 100) / totalSize);

pgbDownload.setProgress(downloadedPercent);

if(downloadedPercent >= maxPercent)

{

progressBarHandler.post(downloadComplete);

}

}

};

songtaste.stDownloadFromUrl(strSongUrl, fullFilename, updateProgressCallback);

}

}).start();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

final Runnable downloadComplete = new Runnable() {

@Override

public void run() {

Toast.makeText(getApplicationContext(), "歌曲下载完毕", Toast.LENGTH_SHORT).show();

pgbDownload.setProgress(0);

}

};

}

始终都还是无法执行到:

Toast.makeText(getApplicationContext(), "歌曲下载完毕", Toast.LENGTH_SHORT).show();

所以,还是没搞懂,到底如何才能执行到UI线程中的Toast

2.再去参考:

去直接使用

//progressBarHandler.post(downloadComplete);

runOnUiThread(downloadComplete);

结果还是不行。

3.结果后来才发现,原来之前使用:

progressBarHandler.post(downloadComplete);

runOnUiThread(downloadComplete);

以及:final Runnable downloadComplete = new Runnable() {

//@Override

public void run() {

Toast.makeText(getApplicationContext(), "歌曲下载完毕", Toast.LENGTH_SHORT).show();

pgbDownload.setProgress(0);

}

};

或final Runnable downloadComplete = new Runnable() {

@Override

public void run() {

Toast.makeText(getApplicationContext(), "歌曲下载完毕", Toast.LENGTH_SHORT).show();

pgbDownload.setProgress(0);

}

};

结果,其实都是可以正常运行的。

只不过,调试时,给

Toast.makeText(getApplicationContext(), "歌曲下载完毕", Toast.LENGTH_SHORT).show();

打断点,是无法执行到的。

很是诡异。

【总结】

再次验证了,Eclipse/ADT中的调试,是多么的烂,竟然没有“继续运行”,最多只有函数返回的F7,导致调试很不方便。

至少,此处无法很顺利很方便的,调试执行到Toast.makeText。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值