Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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
Java Can';t在未调用Looper prepare的线程内创建处理程序_Java_Android - Fatal编程技术网

Java Can';t在未调用Looper prepare的线程内创建处理程序

Java Can';t在未调用Looper prepare的线程内创建处理程序,java,android,Java,Android,我想在调用函数时从服务中创建警报窗口 public class MyCustomService extends Service { private WindowManager windowManager; private ImageView chatHead; WindowManager.LayoutParams params; private static Context mContext; IBinder mBinder = new LocalBinder(); public st

我想在调用函数时从服务中创建警报窗口

public class MyCustomService extends Service {

private WindowManager windowManager;
private ImageView chatHead;
WindowManager.LayoutParams params;
private static Context mContext;



IBinder mBinder = new LocalBinder();

public static Socket client;


@Override
public IBinder onBind(Intent intent) {
    return mBinder;
}

public class LocalBinder extends Binder {
    public MyCustomService getServerInstance() {
        return MyCustomService.this;
    }
}




// Fires when a service is first initialized
public void onCreate() {
    super.onCreate();
    this.mContext = this;

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);



}


// Fires when a service is started up
@Override
public int onStartCommand(Intent intent, int flags, int startId) {


            IO.Options opts = new IO.Options();
            opts.query = "auth_token=51";
            try {
                client = IO.socket("http://192.168.0.106:3000/",opts);
                client.on("message", onMessage);

                client.connect();
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }



    return START_STICKY;
}



@Override
public void onDestroy() {

    client.disconnect();
    client.close();
    if (chatHead != null) windowManager.removeView(chatHead);
}


 public void addView()
{
  windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

  chatHead = new ImageView(mContext);
  chatHead.setImageResource(R.drawable.android_head);

  WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.WRAP_CONTENT,
    WindowManager.LayoutParams.WRAP_CONTENT,
    WindowManager.LayoutParams.TYPE_PHONE,
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
    PixelFormat.TRANSLUCENT);

  params.gravity = Gravity.TOP | Gravity.LEFT;
  params.x = 0;
  params.y = 100;

  windowManager.addView(chatHead, params);
}


private Emitter.Listener onMessage = new Emitter.Listener() {
    @Override
    public void call(Object... args) {

        addView();

    }
};

}
表单
onCreat
服务其工作没有任何错误

但是当我想从另一个函数调用它时

addView
当我向套接字发送新数据时调用此函数,所以我只想

警报窗口

当我从套接字收到消息时,如果调用函数
addView

表单
onMessage
函数 错误是什么

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

但是如果我从

onMessage
服务的工作

公共无效调用(对象…args)
不是从UI线程调用的。你可以通过电脑来做

公共无效调用(对象…参数)
不是从UI线程调用的。你可以通过电脑来做

onCreate 
Handler mHandler = new Handler(Looper.getMainLooper());
...
...
...
private Emitter.Listener onMessage = new Emitter.Listener() {

   @Override
   public void call(Object... args) {

      mHandler.post(new Runnable(){

         @Override
         public void run (){
         addView();
         }
     });
};