安卓:为什么我得到这些AsyncTask的错误? [英] Android: why i get these AsyncTask Error?
问题描述
我有读从DB一些信息的asyncTaskProc和UI上的写...
i have an asyncTaskProc that read some info from a DB and write it on the ui...
在code工作perfectcly在Android 4.0,但不能在2.3工作... 这里是code
the code works perfectcly on Android 4.0 but doesn't work on 2.3... here is the code
新的AsyncTask
NEW ASYNCTASK
`公共类IceCastPoll扩展的TimerTask {
`public class IceCastPoll extends TimerTask {
public IceCastPoll() {
}
@TargetApi(9)
public void run() {
new AsyncTaskProc().execute();
}
}`
的AsyncTask的实施
THE ASYNCTASK implementation
@TargetApi(9)
class AsyncTaskProc extends AsyncTask<Void, String, Void> {
List<Stream> streams=null;
@Override
protected void onPostExecute(Void result) {
textSong =(TextView) findViewById(R.id.textViewCurrentSong);
textArtist =(TextView) findViewById(R.id.textViewCurrentArtist);
textTit=(TextView) findViewById(R.id.textViewTit);
textArt=(TextView) findViewById(R.id.TextViewArt);
copertina=(ImageView) findViewById(R.id.imageViewCopertina);
new DownloadImageTask((ImageView) findViewById(R.id.imageViewCopertina)).execute("http://service.uniradiocesena.it/OnAir.jpg");
try {
for (Stream stream: streams) {
try
{
//Thread.sleep(5000);
//textSong.setText((stream.getCurrentSong()));
textArt.setText("Artista:");
textTit.setText("Titolo:");
StringTokenizer tokens = new StringTokenizer(stream.getCurrentSong(), "-");
String first = tokens.nextToken();
String second = tokens.nextToken();
textSong.setText(first);
textArtist.setText(second);
} catch (Exception e) {
//Thread.sleep(5000);
textSong.setText((stream.getCurrentSong()));
textArt.setText("Rotazione:");
textTit.setText("");
textArtist.setText("");
}
}
} catch (Exception e) {
//Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_SHORT).show();
}
}
@Override
protected Void doInBackground(Void... unused) {
Scraper scraper = new IceCastScraper();
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
streams = scraper.scrape(new URI("http://r35798.ovh.net:8000/"));
} catch (ScrapeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show();
}
return (null);
}
}`
中的logcat的错误
THE LOGCAT ERRORS
11-07 11:09:49.729: W/dalvikvm(18983): Exception Ljava/lang/RuntimeException; thrown while initializing Landroid/os/AsyncTask;
11-07 11:09:49.729: W/dalvikvm(18983): threadid=9: thread exiting with uncaught exception (group=0x40018560)
11-07 11:09:49.739: E/AndroidRuntime(18983): FATAL EXCEPTION: Timer-0
11-07 11:09:49.739: E/AndroidRuntime(18983): java.lang.ExceptionInInitializerError
11-07 11:09:49.739: E/AndroidRuntime(18983): at com.example.appuniradiocesena.SwipeyTabsSampleActivity$IceCastPoll.run(SwipeyTabsSampleActivity.java:233)
11-07 11:09:49.739: E/AndroidRuntime(18983): at java.util.Timer$TimerImpl.run(Timer.java:284)
11-07 11:09:49.739: E/AndroidRuntime(18983): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-07 11:09:49.739: E/AndroidRuntime(18983): at android.os.Handler.<init>(Handler.java:121)
11-07 11:09:49.739: E/AndroidRuntime(18983): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
11-07 11:09:49.739: E/AndroidRuntime(18983): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
11-07 11:09:49.739: E/AndroidRuntime(18983): at android.os.AsyncTask.<clinit>(AsyncTask.java:152)
11-07 11:09:49.739: E/AndroidRuntime(18983): ... 2 more
任何建议,这将是非常非常一个preciated!
Any suggestion it will be very very apreciated !
和SRY的英文错误:D
and sry for english mistakes :D
推荐答案
您应该开始AsyncTask的一个处理程序可在主线程创建的。所以用这个替换您的的run()
法IceCastPoll:
You should start AsyncTask with a Handler created on main thread. So replace your run()
method in IceCastPoll with this one:
private Handler handler = new Handler(Looper.getMainLooper());
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
new AsyncTaskProc().execute();
}
});
}
这篇关于安卓:为什么我得到这些AsyncTask的错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!