以下例外意味着什么; 我该怎么解决?
这是代码:
Toast toast = Toast.makeText(mContext, "Something", Toast.LENGTH_SHORT);
Run Code Online (Sandbox Code Playgroud)
这是例外:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.widget.Toast.<init>(Toast.java:68)
at android.widget.Toast.makeText(Toast.java:231)
Run Code Online (Sandbox Code Playgroud) 我遇到了一个奇怪的问题,它只出现在特定设备上(或者至少在我测试我的应用程序的大约 10 个其他设备中不存在)。
有时,当应用程序应该显示一个进度对话框,然后显示一个包含消息的 Toast 时,它反而崩溃了;在 Play Console 上看,我看到了这个堆栈跟踪:
java.lang.RuntimeException:
at android.view.InputChannel.nativeReadFromParcel (Native Method)
at android.view.InputChannel.readFromParcel (InputChannel.java:148)
at android.view.IWindowSession$Stub$Proxy.addToDisplay (IWindowSession.java:796)
at android.view.ViewRootImpl.setView (ViewRootImpl.java:750)
at android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:298)
at android.view.WindowManagerImpl.addView (WindowManagerImpl.java:91)
at android.widget.Toast$TN.handleShow (Toast.java:732)
at android.widget.Toast$TN$1.run (Toast.java:631)
at android.os.Handler.handleCallback (Handler.java:739)
at android.os.Handler.dispatchMessage (Handler.java:95)
at android.os.Looper.loop (Looper.java:145)
at android.app.ActivityThread.main (ActivityThread.java:6939)
at java.lang.reflect.Method.invoke (Native Method)
at java.lang.reflect.Method.invoke (Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1199)
Run Code Online (Sandbox Code Playgroud)
进度条和 Toast 应该每 5 秒显示一次。
如您所见,一切都发生在 Android 内部(没有参考我的实际代码),但我相信以下是所涉及的代码片段。
这是显示进度条的地方:
public abstract class FragmentNetworkingBenderAsyncTask<I, O> extends BenderAsyncTask<I, O> {
@SuppressLint("StaticFieldLeak")
private …Run Code Online (Sandbox Code Playgroud) public class MainActivity extends Activity
{
int min, sec;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
min = 5;
sec = 0;
final TextView timer1 = (TextView) findViewById(R.id.timer1);
timer1.setText(min + ":" + sec);
Thread t = new Thread() {
public void run() {
sec-=1;
if (sec<0) {
min-=1;
sec=59;
}
timer1.setText(min + ":" + sec);
try
{
sleep(1000);
}
catch (InterruptedException e)
{}
}
};
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)
这是Java中的线程的代码,但它不起作用.你能帮助我吗?
它的计时器从5分钟到0点倒计时.