gpt4 book ai didi

android - 如何显示来自非 UI 类的警报对话框?出现错误 - 无法在未调用 Looper.prepare() 的线程内创建处理程序

转载 作者:行者123 更新时间:2023-11-29 00:42:32 25 4
gpt4 key购买 nike

出现类似 -java.lang.RuntimeException 的错误:无法在未调用 Looper.prepare() 的线程内创建处理程序

我正在创建有很多 Activity 的应用程序。如果用户在特定时间(15 分钟)内没有响应,那么 15 分钟后我会显示一个对话框,询问用户“你还在那里吗?”如果用户按“否”,应用程序应该关闭。我试图在 Application idle time

但我没有创建 ControlApplication.java我直接从我的每个 Activity 中调用了 touch() 。并从另一个对我的应用程序来说是全局的 java 文件调用 Waiter 类构造函数。这是我的代码
服务员.java

public class Waiter extends Thread
{
private static final String TAG=Waiter.class.getName();
private long lastUsed;
private long period;
private boolean stop;
private Context killContext;

public Waiter( long period, Context context )
{
this.period=period;
stop=false;
killContext = context;
}

public void run()
{
long idle=0;
this.touch();
do
{
idle=System.currentTimeMillis()-lastUsed;
Log.d(TAG, "Application is idle for -------------------------------------->"+idle +" ms");
Log.d(TAG, "lastUsed is -------------------------------------->"+lastUsed +" ms");
Log.d(TAG, "currentTimeMillis is -------------------------------------->"+System.currentTimeMillis() +" ms");
try
{
Thread.sleep(5000); //check every 50 seconds
}
catch (InterruptedException e)
{
Log.d(TAG, "----------------Waiter interrupted!-----------------------------------");
}
if(idle > period)
{
idle=0;
Log.d(TAG, "----------------inside if-----------------------------------");
AlertDialog.Builder killBuilder = new AlertDialog.Builder( killContext );
killBuilder.setMessage("Are you still there ?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
android.os.Process.killProcess(
android.os.Process.myPid() );
}
});
Log.d(TAG, "----------------inside if killBuilder.create();;-----------------------------------");
AlertDialog alert = killBuilder.create();
Log.d(TAG, "----------------inside if alert.show();-----------------------------------");
alert.show();
}
}
while(!stop);
Log.d(TAG, "--------------------------------Finishing Waiter thread-----------------------------");
}

public synchronized void touch()
{
lastUsed=System.currentTimeMillis();
}

public synchronized void forceInterrupt()
{
this.interrupt();
}

public synchronized void setPeriod(long period)
{
this.period=period;
}

但是在 alert.show();我遇到了以上错误。请帮忙。

最佳答案

AlertDialog 无法在任何上下文中显示,当前 Activity 除外。因此,您必须确保 killContext 扩展了 Activity 类,并且它现在正在屏幕上写入。

关于android - 如何显示来自非 UI 类的警报对话框?出现错误 - 无法在未调用 Looper.prepare() 的线程内创建处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8534670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com