java.lang.RuntimeException: 无法在未调用 Looper.prepare() 错误的线程内创建处理程序
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() Error
SongList Code in the image无法理解实际的错误是什么以及为什么会出现 caused.Error,如下所示。
W/System.err: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
W/System.err: at android.os.Handler.<init>(Handler.java:200)
W/System.err: at android.os.Handler.<init>(Handler.java:114)
W/System.err: at android.app.Activity.<init>(Activity.java:754)
W/System.err: at android.app.ListActivity.<init>(ListActivity.java:175)
W/System.err: at com.example.vipul.finalproject.PlayListActivity.<init>(PlayListActivity.java:0)
W/System.err: at com.example.vipul.finalproject.SongList.scanSongs(SongList.java:296)
W/System.err: at com.example.vipul.finalproject.activities.ActivityMenuMain$ScanSongs.doInBackground(ActivityMenuMain.java:299)
W/System.err: at com.example.vipul.finalproject.activities.ActivityMenuMain$ScanSongs.doInBackground(ActivityMenuMain.java:289)
W/System.err: at android.os.AsyncTask.call(AsyncTask.java:295)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
查看 this article 了解整个 Looper
/Handler
关系。
长话短说,您的 Thread#run()
方法必须遵循如下结构:
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
mHandler = new Handler();
Looper.loop();
}
}).start();
The best explanation on why 你需要一个线程上的循环程序来保存指令,另一个线程来执行它们。在多线程应用程序中,任务可能会在执行其他任务时出现。
SongList Code in the image无法理解实际的错误是什么以及为什么会出现 caused.Error,如下所示。
W/System.err: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
W/System.err: at android.os.Handler.<init>(Handler.java:200)
W/System.err: at android.os.Handler.<init>(Handler.java:114)
W/System.err: at android.app.Activity.<init>(Activity.java:754)
W/System.err: at android.app.ListActivity.<init>(ListActivity.java:175)
W/System.err: at com.example.vipul.finalproject.PlayListActivity.<init>(PlayListActivity.java:0)
W/System.err: at com.example.vipul.finalproject.SongList.scanSongs(SongList.java:296)
W/System.err: at com.example.vipul.finalproject.activities.ActivityMenuMain$ScanSongs.doInBackground(ActivityMenuMain.java:299)
W/System.err: at com.example.vipul.finalproject.activities.ActivityMenuMain$ScanSongs.doInBackground(ActivityMenuMain.java:289)
W/System.err: at android.os.AsyncTask.call(AsyncTask.java:295)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:234)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
查看 this article 了解整个 Looper
/Handler
关系。
长话短说,您的 Thread#run()
方法必须遵循如下结构:
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
mHandler = new Handler();
Looper.loop();
}
}).start();
The best explanation on why 你需要一个线程上的循环程序来保存指令,另一个线程来执行它们。在多线程应用程序中,任务可能会在执行其他任务时出现。