无法在 android 中循环使用 Toast 消息
Unable to use Toast message in loop in android
我正在制作一个 android 应用程序,其中
1) 循环开始并检查连接是否存在
2)如果是,则执行TASK A并退出
3) 如果不是,则显示一条 TOAST 消息
然后转到步骤 1
为了实现这一点,我尝试将 Toast 消息放入循环中并尝试
1)创建一个 class 扩展异步任务并在 doBackground() 中显示 Toast
2)创建处理程序。我在 postDelayed
中显示了 Toast 消息
3)在 runOnUiThread() 中显示 toast
他们都是同一个命
对于较小的值(<10s),应用程序将无限期停止
较大的值(=30s),App会强制关闭
int t=0;
while (!t=1)
{
ConnectionCheck2 cd = new ConnectionCheck2(mContext);
Boolean isInternetPresent = cd.isConnectingToInternet();
if (isInternetPresent)
{
//TASK A
t=1;
}
else
{
//made call to Handler, Asynch Tasks and runOnUiThread here to display the Toast message below
Toast.makeText(MainActivity.this,"Internet is NOT connected",
Toast.LENGTH_SHORT).show();
}
}
class ConnectionCheck 构造函数使用 class 显示 toast 消息的上下文进行初始化。它有一个名为 isConnectingToInternet() 的方法,用于检查是否存在互联网连接。此 class 和功能的真实性已得到证实。
我试过了
public void doSomeWork()
{
final Timer someTimer= new Timer ();
someTimer.schedule (new TimerTask () {
@Override
public void run()
{
ConnectionCheck2 cd = new ConnectionCheck2(MainActivity.this.getApplicationContext());
final Boolean isInternetPresent = cd.isConnectingToInternet();
runOnUiThread (new Thread(new Runnable() {
public void run()
{
if (isInternetPresent)
{
Change();
someTimer.cancel();
}
Toast.makeText(MainActivity.this.getApplicationContext(),"NOT Connected",Toast.LENGTH_SHORT).show();
}
}));
}
}, 1000, 5000);
if (g==1)
{
Toast.makeText(MainActivity.this.getApplicationContext(), "Internet is connected", Toast.LENGTH_SHORT).show();
}
}//doSomeWork
public void Change()
{
g=1;
}
//g is declared as a global variable
但是,如果我最初将网络关闭然后再打开,则不会显示已连接互联网
我将 toast 消息放在 runOnUithread() 但我的问题是,如果我删除了控制条件,则控件首先转到 toast 消息,上面写着 "internet is connected"(后面的语句定时器)然后到 "NOt connected" 一个。此外,当找到 Internet 连接并执行 timer.cancel() 时,控件不会转到计时器后面的语句,而是退出。按照我的想法,首先应该执行定时器模块,然后应该执行它后面的语句,当且仅当 timer.cancel() 条件为真
虽然循环不是一个好方法,但您可以在每个指定的时间值后 运行 TimerTask 到 运行。
Timer someTimer= new Timer ();
someTimer.schedule (new TimerTask () {
@Override
public void run () {
// do your Checking here, for toast use runOnUIThread() or handler.
}
}, 0, 100);
备注:
- 0 用于 运行 随叫随到
- 100 是 运行 每 100 秒。
更新
final Timer someTimer = new Timer ();
someTimer.schedule (new TimerTask () {
@Override
public void run () {
ConnectionCheck2 cd = new ConnectionCheck2 (MainActivity.this.getApplicationContext ());
final Boolean isInternetPresent = cd.isConnectingToInternet ();
runOnUiThread (new Thread (new Runnable () {
public void run () {
if (isInternetPresent) {
Change ();
someTimer.cancel ();
return;
}
Toast.makeText (MainActivity.this.getApplicationContext (), "NOT Connected", Toast.LENGTH_SHORT).show ();
}
}));
}
}, 0, 5000);
if (g == 1) {
Toast.makeText (MainActivity.this.getApplicationContext (), "Internet is connected", Toast.LENGTH_SHORT).show ();
}
}
我正在制作一个 android 应用程序,其中
1) 循环开始并检查连接是否存在
2)如果是,则执行TASK A并退出
3) 如果不是,则显示一条 TOAST 消息 然后转到步骤 1
为了实现这一点,我尝试将 Toast 消息放入循环中并尝试
1)创建一个 class 扩展异步任务并在 doBackground() 中显示 Toast
2)创建处理程序。我在 postDelayed
中显示了 Toast 消息3)在 runOnUiThread() 中显示 toast
他们都是同一个命
对于较小的值(<10s),应用程序将无限期停止
较大的值(=30s),App会强制关闭
int t=0;
while (!t=1)
{
ConnectionCheck2 cd = new ConnectionCheck2(mContext);
Boolean isInternetPresent = cd.isConnectingToInternet();
if (isInternetPresent)
{
//TASK A
t=1;
}
else
{
//made call to Handler, Asynch Tasks and runOnUiThread here to display the Toast message below
Toast.makeText(MainActivity.this,"Internet is NOT connected",
Toast.LENGTH_SHORT).show();
}
}
class ConnectionCheck 构造函数使用 class 显示 toast 消息的上下文进行初始化。它有一个名为 isConnectingToInternet() 的方法,用于检查是否存在互联网连接。此 class 和功能的真实性已得到证实。
我试过了
public void doSomeWork()
{
final Timer someTimer= new Timer ();
someTimer.schedule (new TimerTask () {
@Override
public void run()
{
ConnectionCheck2 cd = new ConnectionCheck2(MainActivity.this.getApplicationContext());
final Boolean isInternetPresent = cd.isConnectingToInternet();
runOnUiThread (new Thread(new Runnable() {
public void run()
{
if (isInternetPresent)
{
Change();
someTimer.cancel();
}
Toast.makeText(MainActivity.this.getApplicationContext(),"NOT Connected",Toast.LENGTH_SHORT).show();
}
}));
}
}, 1000, 5000);
if (g==1)
{
Toast.makeText(MainActivity.this.getApplicationContext(), "Internet is connected", Toast.LENGTH_SHORT).show();
}
}//doSomeWork
public void Change()
{
g=1;
}
//g is declared as a global variable
但是,如果我最初将网络关闭然后再打开,则不会显示已连接互联网
我将 toast 消息放在 runOnUithread() 但我的问题是,如果我删除了控制条件,则控件首先转到 toast 消息,上面写着 "internet is connected"(后面的语句定时器)然后到 "NOt connected" 一个。此外,当找到 Internet 连接并执行 timer.cancel() 时,控件不会转到计时器后面的语句,而是退出。按照我的想法,首先应该执行定时器模块,然后应该执行它后面的语句,当且仅当 timer.cancel() 条件为真
虽然循环不是一个好方法,但您可以在每个指定的时间值后 运行 TimerTask 到 运行。
Timer someTimer= new Timer ();
someTimer.schedule (new TimerTask () {
@Override
public void run () {
// do your Checking here, for toast use runOnUIThread() or handler.
}
}, 0, 100);
备注:
- 0 用于 运行 随叫随到
- 100 是 运行 每 100 秒。
更新
final Timer someTimer = new Timer ();
someTimer.schedule (new TimerTask () {
@Override
public void run () {
ConnectionCheck2 cd = new ConnectionCheck2 (MainActivity.this.getApplicationContext ());
final Boolean isInternetPresent = cd.isConnectingToInternet ();
runOnUiThread (new Thread (new Runnable () {
public void run () {
if (isInternetPresent) {
Change ();
someTimer.cancel ();
return;
}
Toast.makeText (MainActivity.this.getApplicationContext (), "NOT Connected", Toast.LENGTH_SHORT).show ();
}
}));
}
}, 0, 5000);
if (g == 1) {
Toast.makeText (MainActivity.this.getApplicationContext (), "Internet is connected", Toast.LENGTH_SHORT).show ();
}
}