我正在尝试使用一个将在当前日期调用的全局变量。我点击按钮就可以得到日期,但我需要使用日期进行计算,因此我将其转换为全局变量。我尝试了一种方法,但它没有读取日期,应用程序崩溃了。如果有人能帮忙,将不胜感激
全球类别-
public class GlobalClass extends Application{
private Date date;
public Date getDate(){
return date;
}
public void setDate(Date DDate){
date = DDate;
}
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:致命异常:main进程:com.almac.tracker,PID:13812java.lang.RuntimeException:无法启动活动ComponentInfo{com.alma.tracker/com.alma.tracker.CreateLine}:java.lang.NullPointerException:试图对null对象引用调用虚拟方法"long java.util.Date.getTime()"在android.app.ActivityThread.performLaunchActivity(ActivityThreads.java:2817)在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:2892)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)位于android.app.ActivityThread.main(ActivityThreads.java:6540)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:767)由以下原因引起:java.lang.NullPointerException:试图对null对象引用调用虚拟方法"long java.util.Date.getTime()"位于java.util.Calendar.setTime(Calendar.java:1749)位于java.text.SimpleDateFormat.format(SimpleDateFormat.java:981)位于java.text.SimpleDateFormat.format(SimpleDateFormat.java:974)位于java.text.DateFormat.format(DateFormat.java:341)网址:com.almac.tracker.CreateLine.onCreate(CreateLine.java:343)在android.app.Activity.performCreate(Activity.java:6980)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)在android.app.ActivityThread.performLaunchActivity(ActivityThreads.java:2770)在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:2892)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)位于android.app.ActivityThread.main(ActivityThreads.java:6540)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:767)10-30 14:22:51.084 13812-13817/com.almac.tracker I/合子:进行完整的代码缓存收集,代码=105KB,数据=79KB10-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()
设置或获取任何类别的日期
您就快到了!只需稍作更改即可保持应用程序类过载:
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;
}
}
现在要使用它,你需要在你的活动中这样做:
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-覆盖应用程序类时,每次需要设置或获取日期时都需要进行强制转换。2-在Activities类之外(如果不止一个),您需要有一个上下文,以便获取Application对象,然后获取或设置Date值:((GlobalClass) ((Activity) mContext).getApplication()).getDate()
,其中mContext是一个Activity,您还需要将其强制转换为Activity类型。
希望这能有所帮助。干杯