Java bindService上的NullPointerException getPackageName()
我正在尝试为android应用程序创建远程服务。我或多或少地从Android开发者网站上复制了代码,为我的目的对其进行了重新配置。但是,当我进入bindService步骤时,我在android.content.Context.getPackageName()上得到了一个NullPointerException。我做错了什么 我在早期版本的应用程序中使用了进程内服务,但这还不足以满足我的需求。服务本身在两者之间保持不变,只是在代码中进行了必要的更改。我已经看了这里的所有结果,但它们要么没有关联,要么对我没有任何帮助 我已尝试将呼叫从onCreate移动到onStart。没有区别。从未执行BinderActivity的onCreate。我尝试了startService而不是bindService,但它给了我同样的错误。我已经检查过这个、意图和mConnection都是非null的(它们是)。我知道服务没有启动,但我使用的是Context.BIND\u AUTO\u CREATE(如果没有启动,应该启动它)。除了在这个问题上挥舞着一只死鸡,我不知道在这里还能做什么 我的主要活动:Java bindService上的NullPointerException getPackageName(),java,android,Java,Android,我正在尝试为android应用程序创建远程服务。我或多或少地从Android开发者网站上复制了代码,为我的目的对其进行了重新配置。但是,当我进入bindService步骤时,我在android.content.Context.getPackageName()上得到了一个NullPointerException。我做错了什么 我在早期版本的应用程序中使用了进程内服务,但这还不足以满足我的需求。服务本身在两者之间保持不变,只是在代码中进行了必要的更改。我已经看了这里的所有结果,但它们要么没有关联,要
package com.example.trainschecker;
导入android.content.Intent;
导入android.os.Bundle;
导入com.google.android.material.floatingactionbutton.floatingactionbutton;
导入androidx.appcompat.app.appcompat活动;
导入androidx.appcompat.widget.Toolbar;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入android.content.Context;
导入android.os.Message;
导入android.os.Messenger;
导入java.io.*;
导入java.util.ArrayList;
导入android.widget.TextView;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BinderActivity ba=新的BinderActivity();
ba.BindService();
}
}
这就是BinderActivity,魔法应该在这里发生。相反,该错误会:
package com.example.trainschecker;
导入android.app.Activity;
导入android.content.ComponentName;
导入android.content.Context;
导入android.content.Intent;
导入android.content.ServiceConnection;
导入android.os.IBinder;
导入android.os.RemoteException;
导入android.util.Log;
导入android.os.Message;
导入android.os.Handler;
导入android.os.Messenger;
公共类BinderActivity扩展了活动{
公共信使ms=null;
私人活动硕士;
类IncomingHandler扩展了Handler{
@凌驾
公共无效handleMessage(消息消息消息){
超级handleMessage(msg);
}
}
最终通讯器mm=新通讯器(新输入手柄());
专用ServiceConnection mConnection=新ServiceConnection(){
服务连接上的公共无效(组件名称类名称,IBinder服务){
Log.d(“MCon”、“Sentinel Online”);
ms=新信使(服务);
试一试{
Message msg=Message.get(null,TCService.msg\u REGISTER\u CLIENT);
msg.replyTo=mm;
send女士(msg);
}catch(远程异常e){e.printStackTrace();}
}
ServiceDisconnected上的公共void(ComponentName类名称){
Log.d(“MCon”、“Sentinel离线”);
试一试{
Message msg=Message.get(null,2);
msg.replyTo=mm;
send女士(msg);
}catch(远程异常e){e.printStackTrace();}
}
};
公共服务(){
bindService(新意图(this,TCService.class),mConnection,Context.BIND\u AUTO\u CREATE);
}
}
最后是服务本身。那里不多,但它是我的:
package com.example.trainchecker;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import java.util.ArrayList;
import android.os.Message;
import android.os.Messenger;
public class TCService extends Service {
ArrayList<Messenger> mc = new ArrayList<>();
@Override
public IBinder onBind(Intent i) {
Log.d("TCS", "Binding Now");
return mm.getBinder();
}
static final int MSG_REGISTER_CLIENT = 1;
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
mc.add(msg.replyTo);
break;
case 2:
mc.remove(msg.replyTo);
break;
default:
super.handleMessage(msg);
}
}
}
final Messenger mm = new Messenger(new IncomingHandler());
}
package com.example.trainschecker;
导入android.app.NotificationChannel;
导入android.app.NotificationManager;
导入android.app.Service;
导入android.content.Context;
导入android.content.Intent;
导入android.os.Handler;
导入android.os.IBinder;
导入android.util.Log;
导入java.util.ArrayList;
导入android.os.Message;
导入android.os.Messenger;
公共类TCService扩展服务{
ArrayList mc=新的ArrayList();
@凌驾
公共IBinder onBind(意向一){
Log.d(“TCS”,“立即生效”);
返回mm.getBinder();
}
静态最终int MSG_寄存器_客户端=1;
类IncomingHandler扩展了Handler{
@凌驾
公共无效handleMessage(消息消息消息){
开关(msg.what){
案例1:
mc.add(msg.replyTo);
打破
案例2:
mc.移除(msg.replyTo);
打破
违约:
超级handleMessage(msg);
}
}
}
最终通讯器mm=新通讯器(新输入手柄());
}
以下是全部错误:
09-15 11:39:04.518 15448-15448/com.example.trainchecker E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.trainchecker, PID: 15448
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.trainchecker/com.example.trainchecker.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:133)
at android.content.ComponentName.<init>(ComponentName.java:128)
at android.content.Intent.<init>(Intent.java:4468)
at com.example.trainchecker.BinderActivity.BindService(BinderActivity.java:58)
at com.example.trainchecker.MainActivity.onCreate(MainActivity.java:65)
at android.app.Activity.performCreate(Activity.java:6285)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.access$900(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-15 11:39:04.518 15448-15448/com.example.trainschecker E/AndroidRuntime:致命异常:main
流程:com.example.trainschecker,PID:15448
java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.trainchecker/com.example.trainchecker.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Context.getPackageName()
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
在android.app.ActivityThread.access$900(ActivityThread.java:150)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:171)
位于android.app.ActivityThread.main(ActivityThread.java:5417)