相关疑难解决方法(0)

无法在未调用Looper.prepare()的线程内创建处理程序

以下例外意味着什么; 我该怎么解决?

这是代码:

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)

android ui-thread android-toast

919
推荐指数
17
解决办法
72万
查看次数

应用程序代码外的 Android RuntimeException

我遇到了一个奇怪的问题,它只出现在特定设备上(或者至少在我测试我的应用程序的大约 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)

java android

7
推荐指数
1
解决办法
153
查看次数

用于计时器的Android线程

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点倒计时.

java android

4
推荐指数
2
解决办法
3万
查看次数

标签 统计

android ×3

java ×2

android-toast ×1

ui-thread ×1