Java 如何创建一个实例来调用Android中服务类的活动方法?
在我的Android项目中,我有一个服务类,从中我将值传递给片段的一个静态方法 这是我的服务类代码- 在我的HomeFragment类中,我初始化了如下实例-Java 如何创建一个实例来调用Android中服务类的活动方法?,java,android,Java,Android,在我的Android项目中,我有一个服务类,从中我将值传递给片段的一个静态方法 这是我的服务类代码- 在我的HomeFragment类中,我初始化了如下实例- static HomeFragment instance; public static HomeFragment getInstance() { return instance; } public void updateLocationText(final String latitude, final
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);
}
});
}
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+"");
}
然后对服务类使用如下方法-
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);
}
});
}
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+"");
}
这些代码的工作方式与我在fragment类中的工作方式完全相同
现在,问题是-
--------------
我想在我的活动课上做同样的工作。为此,我创建了如下实例-
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);
}
});
}
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+"");
}
然后在服务类中,我调用了如下方法-
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);
}
});
}
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+"");
}
但在这里,使用实例在活动类中调用它,它会得到null指针异常。
我不明白为什么会发生这样的事情,因为同样的工作在片段中进行得很好,但在活动中这样做时实际发生了什么问题
因此,如果有人帮助我找到问题并解决它,那将是非常好的。这是一个糟糕的解决方案,您不能根据UI类的实例使用广播接收器。如果您需要您的UI收到接收器中发生的事件的通知,您可以使用一些Rx总线或类似的解决方案,将事件推送到总线上,然后您的UI将订阅所述总线并对事件做出反应 另一个选项是将您的活动声明为singleInstance,然后通过start intent将有效负载传递给它,如果活动已在运行,则会在onNewIntent中接收到该启动意图。try eventbushttps://github.com/greenrobot/EventBus 从活动或片段中接收的服务