簡體   English   中英

從另一個班級獲得價值

[英]Get value from another class

我想從另一個班級獲得價值,但是當我在第二堂課上獲得價值時,它為null。 我認為這是由於bcs何時向此String添加了某些內容而導致代碼無法運行。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

很多不重要的代碼.......................................

FirebaseDatabase database5 = FirebaseDatabase.getInstance();
    DatabaseReference myRef5 = database5.getReference("userdata");

    myRef5.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.

很多非關鍵的代碼....................................

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                    @Override
                    public boolean onMarkerClick(final Marker marker) {

很多不重要的代碼...........................................

new CountDownTimer(2000, 1000) {

           public void onTick(long millisUntilFinished) {

           }
           public void onFinish() {

               progressBar.setVisibility(View.GONE);
               textViewPleaseWait.setVisibility(View.INVISIBLE);

               recipientEmail = marker.getTitle();
               Log.i("omg", recipientEmail);

               dialogBuilder.setMessage("Username: " + usernameAlert + "\n" + "Gender: " + genderAlert
                                       + "\n" + "Age: " + ageAlert + "\n" + marker.getSnippet() + "\n" + marker.getTitle());

               dialogBuilder.setPositiveButton("Send message", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface arg0, int arg1) {
                       Intent intent = new Intent(getApplicationContext(), SendMessage.class);
                       startActivity(intent);

                       recipientEmail = marker.getTitle();
                   }
               });

               dialogBuilder.setNegativeButton("Close", null);
               dialogBuilder.show();


           }
       }.start();

}

這是...。我在計時器完成后將值設置為receiveEmail,但是我必須通過單擊地圖上的標記來運行計時器。 我無法在此計時器bcs值之外設置值receiveEmail。 因此,當我在另一個類中調用它時,通常:

MapsActivity mapsActivity = new MapsActivity();

    recipientUsername2 = mapsActivity.getRecipientEmail();
    Log.i("values2", mapsActivity.recipientEmail);

在運行第二項活動后,應用崩潰。

08-28 21:34:25.943 4609-4609/com.samo.facedatefb E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.samo.facedatefb, PID: 4609
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.samo.facedatefb/com.samo.facedatefb.SendMessage}: java.lang.NullPointerException: println needs a message
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2526)
    at android.app.ActivityThread.access$800(ActivityThread.java:169)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5549)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
 Caused by: java.lang.NullPointerException: println needs a message
    at android.util.Log.println_native(Native Method)
    at android.util.Log.i(Log.java:160)
    at com.samo.facedatefb.SendMessage.onCreate(SendMessage.java:79)
    at android.app.Activity.performCreate(Activity.java:5975)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2526) 
    at android.app.ActivityThread.access$800(ActivityThread.java:169) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) 
    at android.os.Handler.dispatchMessage(Handler.java:111) 
    at android.os.Looper.loop(Looper.java:194) 
    at android.app.ActivityThread.main(ActivityThread.java:5549) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759) 

請問你能幫幫我嗎?

在這里,您將創建一個新的 MapsActivity實例(可能為 ):

MapsActivity mapsActivity = new MapsActivity();

在下面的兩行中,您嘗試閱讀以下內容:

recipientUsername2 = mapsActivity.getRecipientEmail();

難怪它是空的。 這個MapsActivity不是您要尋找的MapsActivity ... (這只是絕地絕招)。

盡量把握這樣說:當您設置recipientEmail在MapsActivity場,你把它寫在一張紙上。 隨着new MapsActivity()構造函數調用,你得到的文件從你的抽屜里一個新的作品-一個不同的,而現在你試着讀的東西掉紙張,您對其他一書中寫道...

為了獲得該信息,您必須將其放置在某處-將其設置為您要傳遞的類的實例,將其設置為您計划在下一個使用的類中的字段,等等。

然而,這一次,我想設置recipientEmail字符串作為額外的SendMail活動將是要走的路:

Intent intent = new Intent(getApplicationContext(), SendMessage.class);
intent.putExtra("RECIPIENT_EMAIL", marker.getTitle());
startActivity(intent); //this has to be after the putExtra call

當您嘗試在SendMail活動中訪問它時:

String recipientEmail = null;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    throw new IllegalStateException("No email address found at SendMail activity!");
} else {
    recipientEmail = extras.getString("RECIPIENT_EMAIL");
}

另外,請閱讀當我不得不處理Extras時通常會轉向的這個問題的答案。

另一件事:訪問對象成員的推薦方法是將其設置為私有vland add getter方法,並在適用時設置setter方法。 僅使變量可訪問是有問題的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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