[英]Error when the setVisibility class is called
我嘗試從我的類MyFirebaseMessaging.java中自動執行一個方法,該方法通過雲通過Firebase消息接收消息,並在到達時激活所有這些代碼,並執行Home中的方法。
錯誤是,當我仍然聲明onCreate並全局聲明變量CardView cardUDatos時,它告訴我:
E / UncaughtException:java.lang.NullPointerException:嘗試在空對象引用上調用虛擬方法“ void android.support.v7.widget.CardView.setVisibility(int)”
MyFirebaseMessaging.java
public class MyFirebaseMessaging extends FirebaseMessagingService {
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
if(remoteMessage.getData() != null) {
Map<String,String> data = remoteMessage.getData();
String title = data.get("title");
final String message = data.get("message");
if (title.equals("Aceptar")) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Home SDI = new Home();
SDI.MostrarDatos();
}
});
}
}
}
}
Clase Home.java目錄的布局
CardView cardUDatos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
{
.
.
.
cardUDatos = (CardView) findViewById(R.id.cardview_user);
.
.
.
}
public void MostrarDatos(){ DatabaseReference UserInformation = FirebaseDatabase.getInstance().getReference(Common.User);
UserInformation.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
List<Object> map = (List<Object>) dataSnapshot.getValue();
String name
name = String.valueOf(map.get(2).toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// ...
}
});
cardUDatos.setVisibility(View.VISIBLE);
}
問題如下:
Home SDI = new Home();
您不應該嘗試以這種方式訪問活動。 這只會創建Activity的實例。 該實例與實際的Activity沒有任何關系(如果在前台運行)。 由於不會初始化cardUDatos
因此不會調用生命周期方法。
一種方法是實現LocalBroadcastReceiver
。 有關實現的詳細信息,請參閱此SO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.