Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t在未调用Looper.prepare()的线程内创建处理程序这意味着什么?_Android - Fatal编程技术网

Android Can';t在未调用Looper.prepare()的线程内创建处理程序这意味着什么?

Android Can';t在未调用Looper.prepare()的线程内创建处理程序这意味着什么?,android,Android,我有以下代码来解析来自Facebook的JSon响应: doInBackground(JSONObject... params) { try { JSONArray posts = params[0].getJSONArray("notifications"); notifications.clear(); for (int i = 0; i < posts.length(); i++) { Notifications info = new N

我有以下代码来解析来自Facebook的JSon响应:

doInBackground(JSONObject... params) {
   try {
     JSONArray posts = params[0].getJSONArray("notifications");
     notifications.clear();
     for (int i = 0; i < posts.length(); i++) {
     Notifications info = new Notifications();
     JSONObject tempobj = (JSONObject) posts.get(i);
     //some code here related to parse...
       }
     }catch(Ex...xxx){}
     sort();
}
doInBackground(JSONObject…参数){
试一试{
JSONArray posts=params[0]。getJSONArray(“通知”);
通知。清除();
对于(int i=0;i
我的排序方法如下:

private void sort() {
        mActivity.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                Log.e("sort called", "sort called" + actualListView.getSelectedItemPosition());
                try {
                    Collections.sort(notifications, new Comparator<Notifications>() {

                        @Override
                        public int compare(Notifications object1, Notifications object2) {

                            int time1 = Integer.parseInt(object1.updated_time);
                            int time2 = Integer.parseInt(object2.updated_time);
                            if (time1 < time2)
                                return 1;
                            else if (time1 > time2)
                                return -1;
                            return 0;
                        }
                    });
                } catch (Exception e) {
                    Log.e("java.util.Collections", "Error occurred in sorting the notifications");
                    e.printStackTrace();
                }
            }
        });

    }
private void sort(){
mActivity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Log.e(“调用排序”,“调用排序”+actualListView.getSelectedItemPosition());
试一试{
Collections.sort(通知、新比较器(){
@凌驾
公共int比较(通知对象1、通知对象2){
int time1=Integer.parseInt(object1.updated_time);
int time2=Integer.parseInt(object2.updated_time);
如果(时间1<时间2)
返回1;
否则如果(时间1>时间2)
返回-1;
返回0;
}
});
}捕获(例外e){
Log.e(“java.util.Collections”,“对通知进行排序时出错”);
e、 printStackTrace();
}
}
});
}
在onPostExecute方法中,我调用另一个方法来更新UI: 但我面临着一个例外。 日志如下:

STACK_TRACE=java.lang.ExceptionInInitializerError
at
com.platinumapps.fragments.NotificationFragment$NotificationRequestListener.onComplete(NotificationFragment.java:241)
at
com.facebook.android.AsyncFacebookRunner$3.run(AsyncFacebookRunner.java:391)
Caused by: 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.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask.<clinit>(AsyncTask.java:152)
... 2 more
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.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
at android.os.AsyncTask.<clinit>(AsyncTask.java:152)
at
com.platinumapps.fragments.NotificationFragment$NotificationRequestListener.onComplete(NotificationFragment.java:241)
at
com.facebook.android.AsyncFacebookRunner$3.run(AsyncFacebookRunner.java:391)
STACK\u TRACE=java.lang.ExceptionInInitializeError
在
com.platinumapps.fragments.NotificationFragment$NotificationRequestListener.onComplete(NotificationFragment.java:241)
在
com.facebook.android.AsyncFacebookRunner$3.run(AsyncFacebookRunner.java:391)
原因:java.lang.RuntimeException:无法在线程内创建处理程序
尚未调用Looper.prepare()的
android.os.Handler.(Handler.java:121)
位于android.os.AsyncTask$InternalHandler。(AsyncTask.java:421)
位于android.os.AsyncTask$InternalHandler。(AsyncTask.java:421)
在android.os.AsyncTask.(AsyncTask.java:152)
... 还有两个
java.lang.RuntimeException:无法在尚未创建的线程内创建处理程序
调用Looper.prepare()
android.os.Handler.(Handler.java:121)
位于android.os.AsyncTask$InternalHandler。(AsyncTask.java:421)
位于android.os.AsyncTask$InternalHandler。(AsyncTask.java:421)
在android.os.AsyncTask.(AsyncTask.java:152)
在
com.platinumapps.fragments.NotificationFragment$NotificationRequestListener.onComplete(NotificationFragment.java:241)
在
com.facebook.android.AsyncFacebookRunner$3.run(AsyncFacebookRunner.java:391)
代码有什么问题?请帮帮我。谢谢。

您正在
doInBackground
中调用
sort()
,它调用
runOnUiThread
。。。将该pert移动到
onPostExecute
,因为您无法在
doInBackground
中调用
runOnUiThread

 doInBackground(JSONObject... params) {
 try {
 JSONArray posts = params[0].getJSONArray("notifications");
 notifications.clear();
 for (int i = 0; i < posts.length(); i++) {
 Notifications info = new Notifications();
 JSONObject tempobj = (JSONObject) posts.get(i);
 //some code here related to parse...
   }
 }catch(Ex...xxx){}
 //sort();  //need to be moved
}

onPostExecute() {
   sort();
  .....
}
doInBackground(JSONObject…参数){
试一试{
JSONArray posts=params[0]。getJSONArray(“通知”);
通知。清除();
对于(int i=0;i
您是否仔细阅读了stacktrace?或者用谷歌搜索异常名称?如果我在doInBackGround()中编写排序代码,那么它会正常工作吗?您已经在这样做了,您需要将对排序的调用移动到onPostExecuteno中,在sort mehod中,我是UI线程中的排序列表。如果我编写这段代码:Collections.sort(通知,new Comparator(){@Override public int compare(Notifications object1,Notifications object2){//xxxxx});在doInbackground中,它是写方式吗??