- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 Android 应用程序创建远程服务。我或多或少地从 Android Developers 网站复制了代码,并根据我的需要对其进行了重组。但是,当我进入 bindService 步骤时,我在 android.content.Context.getPackageName() 上得到了 NullPointerException。我做错了什么?
我在较早版本的应用程序中使用了进程中服务,但这还不足以满足我的需求。除了必要的代码更改之外,服务本身在两者之间保持不变。我查看了此处的所有结果,但它们要么不相关,要么对我没有任何帮助。
我已经尝试将调用从 onCreate 转移到 onStart。没有不同。 BinderActivity 的 onCreate 从未执行过。我尝试了 startService 而不是 bindService,但它给了我同样的错误。我已经检查过 this、intent 和 mConnection 都是非空的(它们是)。我知道该服务没有启动,但我正在使用 Context.BIND_AUTO_CREATE(如果没有启动它应该启动它)。除了在这个问题上挥舞一只死鸡,我不确定在这里还能做什么。
我的主要 Activity :
package com.example.trainchecker;
import android.content.Intent;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.os.Message;
import android.os.Messenger;
import java.io.*;
import java.util.ArrayList;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BinderActivity ba = new BinderActivity();
ba.BindService();
}
}
这是 BinderActivity,魔术应该在这里发生。相反,错误确实是:
package com.example.trainchecker;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.os.Message;
import android.os.Handler;
import android.os.Messenger;
public class BinderActivity extends Activity {
public Messenger ms = null;
private MainActivity ma;
class IncomingHandler extends Handler{
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
}
}
final Messenger mm = new Messenger(new IncomingHandler());
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
Log.d("MCon","Sentinel Online");
ms = new Messenger(service);
try {
Message msg = Message.obtain(null,TCService.MSG_REGISTER_CLIENT);
msg.replyTo = mm;
ms.send(msg);
} catch (RemoteException e){ e.printStackTrace();}
}
public void onServiceDisconnected(ComponentName className) {
Log.d("MCon","Sentinel Offline");
try {
Message msg = Message.obtain(null,2);
msg.replyTo = mm;
ms.send(msg);
} catch (RemoteException e){ e.printStackTrace();}
}
};
public void BindService() {
bindService(new Intent(this, TCService.class), mConnection, Context.BIND_AUTO_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());
}
这里是完整的错误:
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)
最佳答案
以编程方式实例化 Activity 实例不会触发生命周期,因此您的上下文在那里无效。将其传递给您的 BindService() 调用。从技术上讲,您的 BinderActivity 不需要存在并且可以存在于您的 MainAcitivity 或服务中。
关于java - bindService 上的 NullPointerException getPackageName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57946081/
我需要一种方法来限制对特定应用程序的服务使用。也就是说,我有一个包含用户可以安装的服务的应用程序和一个配套应用程序。我只希望配套应用能够使用该服务。我使用 bindIntent 调用该服务。 我一直在
我有一个使用远程服务的 Android 应用程序,我使用异步的 bindService() 绑定(bind)到它。 在绑定(bind)服务之前应用程序是无用的,所以我想简单地等到绑定(bind)完成后
在onCreate()我调用主要 Activity 的bindService()与 BIND_AUTO_CREATE标记,然后调用 unbindService()在 onDestroy() .然后我启
这是关于基于内存的 IPC(如 LocalService 示例)但对于在同一进程中运行的两个应用程序: 我有两个应用程序(App1、App2)和一个共享项目(Shared),它为两个应用程序定义了一些
我有一个在 API 14 中工作的项目。现在我正在迁移到 API 21,所以我正在做我需要的更改。 这是一个使用位置来跟踪路线的应用程序。我有一项服务可以处理位置信息。但是当我尝试绑定(bind)到该
以下代码不断抛出空指针异常... public class MainActivity extends Activity implements OnClickListener{ Button but;
我在将服务绑定(bind)到 Activity 时遇到问题。我得到 playing_service==null。我找不到我做错了什么。为什么 playing_service 为空?? MyActivi
我想知道 Context.bindService() 什么时候返回 false? 我试图让 onBind() 返回 null,但当 bindService 时它仍然返回 true > 被调用并且 on
作为 Android 开发的新手,我正在尝试做基础知识并构建一个媒体播放器。它在一项 Activity 中运行良好,但我现在将 MediaPlayer 内容移动到远程服务,以便它可以在 Activit
我正在尝试构建并运行一个用于 react native 应用程序的服务,在该服务运行后,我需要调用一些服务方法,这意味着我需要获取正在运行的服务的实例,所以我正在尝试使用bindservice()。
我正在尝试为 Android 应用程序创建远程服务。我或多或少地从 Android Developers 网站复制了代码,并根据我的需要对其进行了重组。但是,当我进入 bindService 步骤时,
我发现的许多类似问题都没有帮助解决我的问题。 以下是我看过的一些问题: ServiceConnection.onServiceConnected() never called after bindin
我有一个服务单例类,其中包含从同一进程调用的静态方法。我在应用程序启动时调用 startService。我也调用了 bindService,但现在我想知道这是否真的有必要。 最佳答案 这取决于您是否需
我正在实现基于 Dungeons 示例的计费服务(Google 建议您采用这种方式)。以下事实使它稍微复杂一些: 主要服务类位于库项目中(因为我想多次重新设计代码)。作为this stackoverf
我正在尝试开发一个连接 android 和 RedBear BLE shield 的应用程序。 第一次一切正常。但是当我第二次尝试连接到设备时,它不起作用。 OnServiceConnected()
我在 onCreate 中有一个 bindservice 需要很长时间,我试图通过将它移动到工作线程来解决这个问题,但它仍然导致 UI 等待。我能做什么 public void onCreate(Bu
我有一个与此相关的问题 question @mnish 大约一年前问过这个问题。 请看一下他的问题和代码。他实现了一个 ServiceConnection() 并将其传递给 bindService()
从所有代码示例来看,如果我们调用了#bindService,我们只想调用#unbindService(在同一上下文中),这是通过 boolean 检查完成的。 但是在#bindService 调用中没
据我了解,如果我希望服务在不受任何限制的情况下运行,则必须首先使用 startService(Intent i) 启动它。 我的问题是,如果我想在启动后立即绑定(bind)到服务,下面的代码是否可以保
我正在尝试使用 AIDL 开发 2 个应用程序(服务应用程序 + 客户端应用程序)的设置。我目前有 3 个模块的设置: android-agent-framework(仅包含 AIDL 文件的 and
我是一名优秀的程序员,十分优秀!