簡體   English   中英

調用setVisibility類時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM