Я пытаюсь отправить уведомление из одного приложения в другое, используя Firebase Cloud Messaging. Я провел пару дней, пытаясь понять, в чем проблема. Я передал тело уведомления указанному c идентификатору токена. Когда я отлаживаю свое приложение, оно говорит «mService недоступен», а когда я запускаю приложение, оно выдает исключение NullPointerException. Содержание, которое я пытаюсь отправить, соответствует моему анализу.
Я проверил интерфейс IFCMService, FCMClient и класса Main, все они в порядке, но я все еще не понимаю, почему я получаю нулевой ответ. Я также проверил свой ключ сервера, и это хорошо. Я видел несколько похожих вопросов, но ни один не смог указать, почему эта проблема может возникнуть. Любезно, я был бы очень признателен за вашу помощь. Ниже приведен мой код IFCMService
public interface IFCMService {
@Headers({"Authorization:key=" + "<YOUR SERVER KEY>",
"Content-Type:application/json"})
@POST("fcm/send")
Call<FCMResponse> sendMessage(@Body Sender body);
}
FCMClient class
public class FCMClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseURL)
{
if (retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
Это объявление и конкретный c код, где я получаю ошибку. В разделе «mService.sendMessage (content)» создается исключение NullPointerException.
protected void sendRequestDriver(String driverId){
Toast.makeText(MainActivity.this,"send driver",Toast.LENGTH_SHORT).show();
DatabaseReference tokens = FirebaseDatabase.getInstance().getReference(Common.token_tbl);
tokens.orderByKey().equalTo(driverId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postsnapshot:dataSnapshot.getChildren())
{
Token token = postsnapshot.getValue(Token.class);
String json_lat_lng = new Gson().toJson(new LatLng(mLastLocation.getLatitude(),mLastLocation.getLongitude()));
Notification notification = new Notification("X", json_lat_lng);
Sender content = new Sender(notification,token.getToken());
mService.sendMessage(content)
.enqueue(new Callback<FCMResponse>() {
@Override
public void onResponse(Call<FCMResponse> call, Response<FCMResponse> response) {
if (response.body().success == 1)
{
Toast.makeText(MainActivity.this,"Request sent",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(MainActivity.this,"Failed",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<FCMResponse> call, Throwable t) {
Log.e("ERROR",t.getMessage());
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}