簡體   English   中英

使用全局變量?

[英]Using global variables?

我正在嘗試使用將在當前日期調用的全局變量。 我已經單擊了按鈕,但要使用該日期進行計算,因此為什么要將其轉換為全局變量。 我嘗試了一種方法,但沒有讀取日期,應用程序崩潰了。 如果有人可以幫助,將不勝感激

全球艙-

public class GlobalClass extends Application{

private Date date;

public Date getDate(){
    return date;
}
public void setDate(Date DDate){
    date = DDate;
}

CreateLine.Java(主Java類,在這里我試圖調用全局變量-

public class CreateLine extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_line);
    myDb = new DatabaseHelper(this);


    GlobalClass globalVariable = (GlobalClass) getApplicationContext();
    globalVariable.setShippers20(28);
    final int shippers20 = globalVariable.setShippers20();

    GlobalClass globalVariable1 = (GlobalClass) getApplicationContext();
    globalVariable1.setShippers30(27);
    final int shippers30 = globalVariable.setShippers30();

    GlobalClass globalVariable2 = (GlobalClass) getApplicationContext();
    globalVariable2.setShippers20(10);
    final int time10 = globalVariable.setTime10();

    GlobalClass globalVariable3 = (GlobalClass) getApplicationContext();
    globalVariable3.getDate();
    Date Date = globalVariable3.getDate()

        }

    SimpleDateFormat dateFormat = new SimpleDateFormat("yy/MM/dd HH:mm");
    datedisplay.setText(dateFormat.format(Date));
}

堆棧跟蹤

10-30 14:22:51.010 13812-13812 / com.almac.tracker E / AndroidRuntime:致命例外:主進程:com.almac.tracker,PID:13812 java.lang.RuntimeException:無法啟動活動ComponentInfo {com。 almac.tracker / com.almac.tracker.CreateLine}:java.lang.NullPointerException:嘗試在android.app.ActivityThread.performLaunchActivity()上的空對象引用上調用虛擬方法'long java.util.Date.getTime()'。 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)上的ActivityThread.java:2817)android.app.ActivityThread $ H.handleMessage(ActivityThread.java)上android.app.ActivityThread.-wrap11(未知源:0) :1593),位於android.os.Handler.dispatchMessage(Handler.java:105),位於android.os.Looper.loop(Looper.java:164),位於android.app.ActivityThread.main(ActivityThread.java:6540),位於Java com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)上的.lang.reflect.Method.invoke(本機方法)com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 767) 原因:java.lang.NullPointerException:嘗試在java.text的java.util.Calendar.setTime(Calendar.java:1749)的空對象引用上調用虛擬方法'long java.util.Date.getTime()'。 com.almac.tracker.CreateLine上的java.text.DateFormat.format(DateFormat.java:341)上的.SimpleDateFormat.format(SimpleDateFormat.java:981)在java.text.SimpleDateFormat.format(SimpleDateFormat.java:974)在com.almac.tracker.CreateLine處。 android.app.Activity.performCreate(Activity.java:6980)上的onCreate(CreateLine.java:343)android.app.ActivityThread.performLaunchActivity(ActivityThread.java)上android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)上:2770)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)在android.app.ActivityThread.-wrap11(未知源:0)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThread) .java:6540),位於com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240),位於com.android.internal.os.ZygoteInit的java.lang.reflect.Method.invoke(本機方法) .main(ZygoteInit.java:767)10-30 14:22:51.084 13812-13817 / com.almac.tracker I / zygote:執行完整的代碼緩存收集,代碼= 105KB,數據= 79KB 10-30 14:22: 51.085 13812-13817 / com.almac.tracker I /合子:代碼緩存收集后,代碼= 74KB,數據= 42KB

首先,您嘗試獲取日期而不先設置日期。 考慮使用方法setDate並設置日期,然后再使用它。 或者在聲明時將其初始化為

private Date date = new Date();

接下來,我認為您不應該依賴getApplicationContext()方法。

如果要使用可從所有類訪問的全局變量,請使用靜態字段。

public class GlobalClass {
    private static Date date = new Date();
    public static Date getDate(){
        return date;
    }
    public static void setDate( Date DDate ){
        date = DDate;
    }
}

然后,您可以使用GlobalClass.setDate()GlobalClaas.getDate()從任何類設置或獲取日期

你快到了! 只需稍作更改即可保持Application類重載:

public class GlobalClass extends Application{

    private Date date;

    public Date getDate(){
        return date == null ? new Date() : this.date;
    }
    public void setDate(Date DDate){
        this.date = DDate;
    }
}

現在要使用它,您需要在Activity中執行以下操作:

public class CreateLine extends AppCompatActivity {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yy/MM/dd HH:mm");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_line);

        myDb = new DatabaseHelper(this);


        // set date in your global variable
        ((GlobalClass) getApplication()).setDate(new Date());

        // get date value previously set
        Date mDate = ((GlobalClass) getApplicatio()).getDate();

        datedisplay.setText(dateFormat.format(mDate));

    }           

}

這可能對您有用。

只是一些提醒

1-覆蓋您的Application類,您需要在每次需要設置或獲取日期時進行強制轉換。 2-在Activity類之外(如果有多個),則需要具有上下文,以便可以獲取Application對象,然后獲取或設置Date值: ((GlobalClass) ((Activity) mContext).getApplication()).getDate() ,其中mContext是一個Activity,還需要將其強制轉換為Activity類型。

希望這可以幫助。 干杯

暫無
暫無

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

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