2017-12-06 1 views
-4

지난 3 개월 동안 Android Studio를 처음 사용했습니다. 내 오류 아래에 어떤 아이디어? 감사! 라이더 응용 프로그램의 상태가 0 일 때 알림이 수신됩니다.서비스 (Android Notification) : null 객체 참조에서 가상 메소드 'boolean java.lang.String.equals (java.lang.Object)'호출 시도

다음은 서비스 자바 클래스 및 모델 자바 클래스입니다. MainActivity.java에서 이미 서비스를 호출하지만 아래 오류가있는 MainActvity를 입력하면 응용 프로그램이 중단됩니다.

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.mariamsyafiqah.coolblogserver, PID: 6206 
       java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 
        at com.example.mariamsyafiqah.coolblogserver.Service.ListenRiderApplication.onChildAdded(ListenRiderApplication.java:56) 
        at com.google.android.gms.internal.zzbox.zza(Unknown Source) 
        at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source) 
        at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

ListenRiderApplication.java

public class ListenRiderApplication extends Service implements ChildEventListener { 
FirebaseDatabase db; 
DatabaseReference riderApplication; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    db = FirebaseDatabase.getInstance(); 
    riderApplication = db.getReference("Rider"); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    riderApplication.addChildEventListener(this); 
    return super.onStartCommand(intent, flags, startId); 
} 

public ListenRiderApplication() { 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
    //Trigger here 
    RiderApplication request = dataSnapshot.getValue(RiderApplication.class); 
    if(request.getStatus().equals("0")) 
     showNotification(dataSnapshot.getKey(), request); 
} 

private void showNotification(String key, RiderApplication request) { 
    Intent intent = new Intent(getBaseContext(), RiderAppStatus.class); 
    //intent.putExtra("userPhone", request.getPhone()); 
    PendingIntent contentIntent = PendingIntent.getActivity(getBaseContext(),0,intent,0); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(getBaseContext()); 

    builder.setAutoCancel(true) 
      .setDefaults(Notification.DEFAULT_ALL) 
      .setTicker("Rider Coolblog") 
      .setContentInfo("New rider registration") 
      .setContentText("You have new rider registered #"+key) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentIntent(contentIntent); 

    NotificationManager manager = (NotificationManager)getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); 

    //If you want to many notification show, you need to give uniqie ID for each Notification 
    int randomInt = new Random().nextInt(9999-1)+1; 
    manager.notify(randomInt,builder.build()); 

} 

@Override 
public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

} 

@Override 
public void onChildRemoved(DataSnapshot dataSnapshot) { 

} 

@Override 
public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

} 

@Override 
public void onCancelled(DatabaseError databaseError) { 

} 
} 

RiderApplication.java

public class RiderApplication { 
private String phone, name, availability, noPlate; 
private String status; 

public RiderApplication() {} 

public RiderApplication(String phone, String availability, String name, String noPlate) { 
    this.phone = phone; 
    this.availability = availability; 
    this.name = name; 
    this.noPlate = noPlate; 
    this.status = "0"; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getStatus() { return status; } 
public void setStatus(String status) { this.status = status; } 

public String getAvailability() { 
    return availability; 
} 

public void setAvailability(String availability) { 
    this.availability = availability; 
} 

public String getNoPlate() { 
    return noPlate; 
} 

public void setNoPlate(String noPlate) { 
    this.noPlate = noPlate; 
} 
} 

답변

-2

onChildAdded 방법에

if(request.getStatus()!=null && request.getStatus().equals("0")) 
     showNotification(dataSnapshot.getKey(), request); 
+0

덕분에 다음 코드를보십시오! 내 오류를 해결 :) –

관련 문제