Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 在绑定服务中实例化Messenger时出现NullPointerException_Android_Android Service_Message - Fatal编程技术网

Android 在绑定服务中实例化Messenger时出现NullPointerException

Android 在绑定服务中实例化Messenger时出现NullPointerException,android,android-service,message,Android,Android Service,Message,嗨,谢谢你的支持 我有一个服务,它绑定到我的main活动 当我试图在服务中实例化一个新的Messenger表单以与活动通信时 Messenger mService = new Messenger(mBinder); 确切地说,当执行到达这一点时,我得到了NullPointerException 以下是服务代码: public class LocalService extends Service { public int i; public ArrayList<String

嗨,谢谢你的支持

我有一个
服务
,它绑定到我的
main活动

当我试图在
服务
中实例化一个新的
Messenger
表单以与活动通信时

Messenger mService = new Messenger(mBinder);
确切地说,当执行到达这一点时,我得到了NullPointerException

以下是服务代码:

public class LocalService extends Service {
    public int i;
    public ArrayList<String> al;
     // Binder given to clients
    private final IBinder mBinder = new LocalBinder();
    Messenger mService = new Messenger(mBinder);
    public Task t;

    /**
     * Class used for the client Binder.  Because we know this service always
     * runs in the same process as its clients, we don't need to deal with IPC.
     */
    public class LocalBinder extends Binder {
        LocalService getService() {
            // Return this instance of LocalService so clients can call public methods
            return LocalService.this;
        }
    }

    public void sayHello() {

        // Create and send a message to the service
        Message msg = Message.obtain(null, 1, 0, 0);
        try {
            mService.send(msg);
        } catch (RemoteException e) {
             e.printStackTrace();
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        Log.e("", "sono nel service");
        t= new Task();
        t.execute();
        return mBinder;
    }   
public类LocalService扩展服务{
公共国际一级;
公共ArrayList al;
//给客户的活页夹
private final IBinder mBinder=new LocalBinder();
信使mService=新信使(mBinder);
公共任务t;
/**
*用于客户端绑定器的类。因为我们总是知道此服务
*与客户端在同一进程中运行,我们不需要处理IPC。
*/
公共类LocalBinder扩展了Binder{
LocalService getService(){
//返回此LocalService实例,以便客户端可以调用公共方法
返回LocalService.this;
}
}
公共空间{
//创建并向服务发送消息
Message msg=Message.get(null,1,0,0);
试一试{
mService.send(msg);
}捕获(远程异常){
e、 printStackTrace();
}
}
@凌驾
公共IBinder onBind(意向){
Log.e(“,“sono nel服务”);
t=新任务();
t、 执行();
返回mBinder;
}   
这是我的日志:

12-22 13:17:03.382: E/AndroidRuntime(1625): FATAL EXCEPTION: main
12-22 13:17:03.382: E/AndroidRuntime(1625): java.lang.RuntimeException: Unable to instantiate service com.example.quotes.LocalService: java.lang.NullPointerException
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2347)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.app.ActivityThread.access$1600(ActivityThread.java:130)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.os.Looper.loop(Looper.java:137)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.app.ActivityThread.main(ActivityThread.java:4745)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at java.lang.reflect.Method.invokeNative(Native Method)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at java.lang.reflect.Method.invoke(Method.java:511)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at dalvik.system.NativeStart.main(Native Method)
12-22 13:17:03.382: E/AndroidRuntime(1625): Caused by: java.lang.NullPointerException
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.os.Binder.queryLocalInterface(Binder.java:230)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.os.IMessenger$Stub.asInterface(IMessenger.java:27)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.os.Messenger.<init>(Messenger.java:139)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at com.example.quotes.LocalService.<init>(LocalService.java:21)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at java.lang.Class.newInstanceImpl(Native Method)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at java.lang.Class.newInstance(Class.java:1319)
12-22 13:17:03.382: E/AndroidRuntime(1625):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2344)
12-22 13:17:03.382: E/AndroidRuntime(1625):     ... 10 more
12-22 13:17:03.382:E/AndroidRuntime(1625):致命异常:main
12-22 13:17:03.382:E/AndroidRuntime(1625):java.lang.RuntimeException:无法实例化服务com.example.quotes.LocalService:java.lang.NullPointerException
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.app.ActivityThread.handleCreateService(ActivityThread.java:2347)
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.app.ActivityThread.access$1600(ActivityThread.java:130)
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.os.Handler.dispatchMessage(Handler.java:99)上
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.os.Looper.loop(Looper.java:137)
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.app.ActivityThread.main(ActivityThread.java:4745)
12-22 13:17:03.382:E/AndroidRuntime(1625):位于java.lang.reflect.Method.Invokenactive(本机方法)
12-22 13:17:03.382:E/AndroidRuntime(1625):位于java.lang.reflect.Method.invoke(Method.java:511)
12-22 13:17:03.382:E/AndroidRuntime(1625):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-22 13:17:03.382:E/AndroidRuntime(1625):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-22 13:17:03.382:E/AndroidRuntime(1625):在dalvik.system.NativeStart.main(本机方法)
12-22 13:17:03.382:E/AndroidRuntime(1625):由以下原因引起:java.lang.NullPointerException
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.os.Binder.queryLocalInterface(Binder.java:230)上
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.os.IMessenger$Stub.a界面(IMessenger.java:27)
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.os.Messenger上。(Messenger.java:139)
12-22 13:17:03.382:E/AndroidRuntime(1625):位于com.example.quotes.LocalService.(LocalService.java:21)
12-22 13:17:03.382:E/AndroidRuntime(1625):位于java.lang.Class.newInstanceImpl(本机方法)
12-22 13:17:03.382:E/AndroidRuntime(1625):位于java.lang.Class.newInstance(Class.java:1319)
12-22 13:17:03.382:E/AndroidRuntime(1625):在android.app.ActivityThread.handleCreateService(ActivityThread.java:2344)
12-22 13:17:03.382:E/AndroidRuntime(1625):…还有10个

不要将null作为此行中的参数发送:

Message msg = Message.obtain(null, 1, 0, 0);

问题解决了,我发布了这个帖子,以防有人感兴趣:

Messenger是可打包的,因此可以放入Intent extra中。调用bindService()的活动将Messenger附加为Intent上的extra。该服务从Intent中获取该Messenger。 当服务需要向活动发送消息时,服务会通过Messenger发送消息。 主活动上的处理程序通过handleMessage接收消息


问题已解决。

谢谢,但我不明白这是否与问题有关,因为目前我甚至无法实例化Messenger。此外,这是一条空消息?还是一条仅包含“1”的消息?
null
不引用消息,而是引用
处理程序。
OP正在使用此构造函数:
获取(处理程序h,int-what,int-arg1,int-arg2)
答案不清楚,您是如何解决问题的。显示一些代码。