gpt4 book ai didi

java - 如何创建一个实例来调用Android中服务类的 Activity 方法?

转载 作者:行者123 更新时间:2023-12-02 09:44:09 29 4
gpt4 key购买 nike

在我的 Android 项目中,我有一个服务类,我从其中将值传递给 fragment 的一个静态方法。

这是我的服务类的代码-

    public class MyLocationService extends BroadcastReceiver {

public static final String ACTION_PROCESS_UPDATE = "my package name";

@Override
public void onReceive(Context context, Intent intent) {

if(intent != null) {
final String action = intent.getAction();
if(ACTION_PROCESS_UPDATE.equals(action)) {
LocationResult result = LocationResult.extractResult(intent);

if(result != null) {
Location location = result.getLastLocation();
String location_string = new StringBuilder(""+location.getLatitude())
.append("/")
.append(location.getLongitude())
.toString();

try {
HomeFragment.getInstance().updateLocationText(""+location.getLatitude(), ""+location.getLongitude());

} catch (Exception e) {
Toast.makeText(context, location_string, Toast.LENGTH_SHORT).show();
Log.e("##Error:", e+"");
}

}

}
}

}
}

在我的 HomeFragment 类中,我已经初始化了实例,如下所示 -

static HomeFragment instance;
public static HomeFragment getInstance() {
return instance;
}

然后使用服务类的方法,如下所示-

 public void updateLocationText(final String latitude, final String longitude) {

getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Log.e("#MY_LOCATION:", latitude+"/ "+longitude);
databaseReference = FirebaseDatabase.getInstance().getReference("users");
databaseReference.child(userEmail).child("latitude").setValue(latitude);
databaseReference.child(userEmail).child("longitude").setValue(longitude);


}
});

}

这些代码的工作方式与我在 fragment 类中所做的方式完全一样。

现在,问题是 -----------------------------

我想在我的 Activity 类中做同样的工作。为此,我创建了如下实例 -

 static AllUsersActivity instance;

public static AllUsersActivity getInstance() {
return instance;
}

然后在服务类中我调用了如下方法 -

try {
AllUsersActivity.getInstance().updateLocationText3(""+location.getLatitude(), ""+location.getLongitude());
} catch (Exception e) {
Toast.makeText(context, location_string, Toast.LENGTH_SHORT).show();
Log.e("##Error:", e+"");
}

但是在这里,使用实例在 Activity 类中调用它,会出现空指针异常。我不明白为什么会发生这种情况,因为同样的工作在 fragment 中进展顺利,但在 Activity 中执行此操作时实际上会发生什么问题。

所以,如果有人能帮助我找到问题并解决它,那就太好了。

最佳答案

这是一个糟糕的解决方案,您无法根据 UI 类的实例来使用广播接收器。如果您需要向 UI 通知接收器中发生的事件,您可以使用一些 Rx 总线或类似的解决方案,将事件推送到总线上,然后您的 UI 将订阅所述总线并对事件使用react。

另一种选择是将您的 Activity 声明为 singleInstance,然后通过启动 Intent 将有效负载传递给它,如果该 Activity 已在运行,则该有效负载将在 onNewIntent 中接收。

关于java - 如何创建一个实例来调用Android中服务类的 Activity 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797283/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com