我正在制作一个解析在线xml Feed的应用。我使用了片段和标签。
下面是代码
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.listview_file, container, false);
allPress_listView = (ListView) v.findViewById(R.id.listView_for_all);
progressBar=(ProgressBar)v.findViewById(R.id.progress_bar);
return v;
/* return inflater.inflate(R.layout.afragment, container, false);
listView=(ListView)fi*/
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
/* ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,Cheese );
listView.setAdapter(adapter);*/
progressBar.setVisibility(View.VISIBLE);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try
{
//Thread.sleep(5000);
new DoSomeTask().execute();
}catch(Exception e){}
// myPd_ring.dismiss();
}
}).start();
}
问题是当我在安装了Android 4.1.2版的三星Galaxy Mini上运行应用程序时,它运行时不会崩溃,但是当我在较低版本上运行应用程序时,它会崩溃。以下是错误。
E/AndroidRuntime(13631): FATAL EXCEPTION: Thread-164034
E/AndroidRuntime(13631): java.lang.ExceptionInInitializerError
E/AndroidRuntime(13631): at com.sl.sx.APR$1.run(AllReleases.java:74)
E/AndroidRuntime(13631): at java.lang.Thread.run(Thread.java:864)
E/AndroidRuntime(13631): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
E/AndroidRuntime(13631): at android.os.Handler.<init>(Handler.java:121)
E/AndroidRuntime(13631): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:607)
E/AndroidRuntime(13631): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:607)
E/AndroidRuntime(13631): at android.os.AsyncTask.<clinit>(AsyncTask.java:190)
E/AndroidRuntime(13631): ... 2 more
答案 0 :(得分:2)
首先,应该在UI线程上创建并运行异步任务(请参阅“线程规则”http://developer.android.com/reference/android/os/AsyncTask.html)。
以下是相关规则:
要解决您的问题,您应该将new DoSomeTask().execute();
移出Runnable
,或者如果您坚持在Runnable
中启动它,那么请使用Activity.runOnUiThread()
({{3} })
E.g。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
progressBar.setVisibility(View.VISIBLE);
new DoSomeTask().execute();
}
答案 1 :(得分:0)
我猜测DoSomeTask
是一个AsyncTask,你试图从后台线程开始。 AsyncTasks只能从UI线程启动。
更改为 -
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
/* ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,Cheese );
listView.setAdapter(adapter);*/
progressBar.setVisibility(View.VISIBLE);
new DoSomeTask().execute();
}