我想要什么?:写一个方法:
第一:获取日期。
第二:将其设为字符串。
3rd :将setText(String)转换为EditText。
我做了什么:
private void setToday() {
String dateToday = "";
DateFormat df = new SimpleDateFormat("dd MM yyyy, HH:mm");
dateToday = df.format(Calendar.getInstance().getTime());
EditText title = (EditText) findViewById(R.id.Title);
dateToday = df.toString();
title.setText(dateToday);
}
同时:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
EditText&按钮:
<EditText
android:id="@+id/Title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Title" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Today"
android:onClick="setToday"/>
它应该做什么?:在Utopia中,这应该是日期,关注EditText并将日期放入EditText。
它的作用是什么?:单击按钮=应用程序崩溃。
这是一款全新的应用。我甚至只尝试过:
private void setToday() {
EditText title = (EditText) findViewById(R.id.Title);
title.setText("HOY");
}
它仍然崩溃。我做错了什么,却无法弄清楚它是什么。
编辑:我设法找到了logcat:FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not find method setToday(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:4232)
at android.view.View$PerformClick.run(View.java:17298)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)
感谢您的帮助。
PS:这是我的所有代码:
爪哇
package com.example.android.notastxt;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.EditText;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void setToday() {
String dateToday = "HOY";
DateFormat df = new SimpleDateFormat("dd MM yyyy, HH:mm");
dateToday = df.format(Calendar.getInstance().getTime());
EditText title = (EditText) findViewById(R.id.Title);
dateToday = df.toString();
title.setText(dateToday);
}
}
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.notastxt.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/Title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Title" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Today"
android:onClick="setToday"/>
</LinearLayout>
<EditText
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="start"
android:hint="Write" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save" />
</LinearLayout>
答案 0 :(得分:3)
只谈你的日期工作......
您的代码:
String dateToday = "";
DateFormat df = new SimpleDateFormat("dd MM yyyy, HH:mm");
dateToday = df.format(Calendar.getInstance().getTime()); // <-- Good, you have your string representing date-time value. But then you replace it two lines below.
EditText title = (EditText) findViewById(R.id.Title);
dateToday = df.toString(); // <-- Why ask for a description of the formatter?
title.setText(dateToday);
...正在用格式化程序的描述替换您想要的日期时间字符串。应该是:
DateFormat df = new SimpleDateFormat("dd MM yyyy, HH:mm");
String dateToday = df.format(Calendar.getInstance().getTime());
EditText title = (EditText) findViewById(R.id.Title);
title.setText(dateToday);
更好的是,停止使用这些麻烦的旧日期时间类。它们现在已经遗留下来,取而代之的是java.time类。对于Android,请参阅下面的最后一个项目符号。
Instant
是UTC中时间轴上的一个时刻。它取代java.util.Date
,但更精细的分辨率为纳秒而不是毫秒。
Instant instant = Instant.now() ;
应用您想要查看挂钟时间的时区。对于任何给定时刻,日期和时间都因区域而异。 Europe/Paris
中的中午是Asia/Kolkata
中较晚的时间,America/Montreal
中的时间较早。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
让java.time自动本地化。
Locale locale = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.LONG ).withLocale( locale ) ;
String output = zdt.format( f ) ;
或指定自定义模式。
Locale locale = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd MM uuuu, HH:mm" , locale ) ;
String output = zdt.format( f ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
答案 1 :(得分:1)
我应该得到你所有的笑声。这只是新手的错误。
更改
private void setToday() {
有关
public void setToday(View View) {
Voilà!它完美无瑕。
我使用了来自@Basil Bourque的代码:https://stackoverflow.com/a/46415908/8662218
DateFormat df = new SimpleDateFormat("dd MM yyyy, HH:mm");
String dateToday = df.format(Calendar.getInstance().getTime());
EditText title = (EditText) findViewById(R.id.Title);
title.setText(dateToday);
谢谢你,巴兹尔。
问题解决了。