我正在开发新闻,在我的adapter类中,我遇到了以下异常
埃德加,[20.10.19 13:50]
JAVA时间总体安排DateTimeParseException:无法在java的索引0处分析文本“20/10/2019”。时间总体安排DateTimeFormatter。java上的parseResolved0(DateTimeFormatter.java:1948)。时间总体安排DateTimeFormatter。在java上解析(DateTimeFormatter.java:1851)。时间LocalDateTime。在java上解析(LocalDateTime.java:486)。时间LocalDateTime。在yodgorbek解析(LocalDateTime.java:471)。科米洛夫。穆索巴卡扬吉利卡里。适配器。BBCSportAdapter。androidx的onBindViewHolder(BBCSportAdapter.kt:83)。回收视图。小装置。RecyclerView$适配器。androidx上的onBindViewHolder(RecyclerView.java:6781)。回收视图。小装置。RecyclerView$适配器。androidx上的bindViewHolder(RecyclerView.java:6823)。回收视图。小装置。RecyclerView$Recycler。androidx上的TryBindViewHolderByDadline(RecyclerView.java:5752)。回收视图。小装置。RecyclerView$Recycler。androidx上的TryGetViewHolderFormositionByDeadline(RecyclerView.java:6019)。回收视图。小装置。RecyclerView$Recycler。androidx上的getViewForPosition(RecyclerView.java:5858)。回收视图。小装置。RecyclerView$Recycler。androidx上的getViewForPosition(RecyclerView.java:5854)。回收视图。小装置。LinearLayoutManager$LayoutState。接下来(LinearLayoutManager.java:2230)在androidx。回收视图。小装置。直线布局经理。androidx的layoutChunk(LinearLayoutManager.java:1557)。回收视图。小装置。直线布局经理。在androidx中填充(LinearLayoutManager.java:1517)。回收视图。小装置。直线布局经理。androidx上的onLayoutChildren(LinearLayoutManager.java:612)。回收视图。小装置。回收视图。androidx上的dispatchLayoutStep2(RecyclerView.java:3924)。回收视图。小装置。回收视图。android上的onMeasure(RecyclerView.java:3336)。看法看法在androidx上测量(View.java:22260)。我很年轻。小装置。我很年轻。androidx的internalMeasureChildren(ConstraintLayout.java:1227)。我很年轻。小装置。我很年轻。android上的onMeasure(ConstraintLayout.java:1572)。看法看法在android上测量(View.java:22260)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6686)。小装置。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:22260)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6686)。小装置。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:22260)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6686)。小装置。框架布局。androidx上的onMeasure(FrameLayout.java:185)。appcompat。小装置。ContentFrameLayout。android上的onMeasure(ContentFrameLayout.java:143)。看法看法在android上测量(View.java:22260)。看法查看组。androidx上的measureChildWithMargins(ViewGroup.java:6686)。appcompat。小装置。操作Baroverlay布局。android上的onMeasure(ActionBarOverlayLayout.java:403)。看法看法在android上测量(View.java:22260)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6686)。小装置。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:22260)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6686)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1514)。小装置。线性布局。android上的measureVertical(LinearLayout.java:806)。小装置。线性布局。android上的onMeasure(LinearLayout.java:685)。看法看法在android上测量(View.java:22260)。看法查看组。android上的measureChildWithMargins(ViewGroup.java:6686)。小装置。框架布局。com上的onMeasure(FrameLayout.java:185)。Android内部的政策德考维。android上的onMeasure(DecorView.java:728)。看法看法在android上测量(View.java:22260)。看法ViewRootImpl。android上的performMeasure(ViewRootImpl.java:2569)。看法ViewRootImpl。android上的measureHierarchy(ViewRootImpl.java:1594)。看法ViewRootImpl。android上的performTraversals(ViewRootImpl.java:1862)。看法ViewRootImpl。android上的doTraversal(ViewRootImpl.java:1482)。看法ViewRootImpl$TraversalRunnable。在android上运行(ViewRootImpl.java:7124)。看法编舞$CallbackRecord。在android上运行(Choreographer.java:1008)。看法编舞android上的doCallbacks(Choreographer.java:804)。看法编舞doFrame(编舞)。
低于MyAdapter类
class BBCSportAdapter(private val context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var articleList: List<Article> = listOf()
companion object {
const val urlKey = "urlKey"
const val imageUrl = "imageUrl"
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.bbc_sport_item, null)
return ViewHolder(view)
}
@SuppressLint("NewApi")
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
(holder as ViewHolder).apply {
when(position){
0 -> {
header.visibility = ViewGroup.VISIBLE
item.visibility = ViewGroup.GONE
Picasso.get().load(articleList[position].urlToImage)
.into(bigImage)
}
else -> {
header.visibility = ViewGroup.GONE
item.visibility = ViewGroup.VISIBLE
articleTitle.text = articleList[position].title
articleSourceName.text = articleList[position].source.name
Picasso.get().load(articleList[position].urlToImage).into(image)
val input = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.getDefault())
val output = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
var d = Date()
try {
d = input.parse(articleList[5].publishedAt)
} catch (e: ParseException) {
try {
val fallback = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.getDefault())
fallback.timeZone = TimeZone.getTimeZone("UTC")
d = fallback.parse(articleList[5].publishedAt)
} catch (e2: ParseException) {
// TODO handle error
val formatted = output.format(d)
val timelinePoint = LocalDateTime.parse(formatted)
val now = LocalDateTime.now()
val elapsedTime = Duration.between(timelinePoint, now)
println(timelinePoint)
println(now)
elapsedTime.toMinutes()
articleTime.text = "${elapsedTime.toMinutes()}"
holder.itemView.setOnClickListener { v->
val intent = Intent(v.context, DetailActivity::class.java)
intent.putExtra("urlKey", articleList[position].url)
intent.putExtra("imageUrl", articleList[position].urlToImage)
v.context.startActivity(intent)
}
}
}
}
}
}
}
override fun getItemCount(): Int {
return articleList.size
}
fun setMovieListItems(articleList: List<Article>) {
this.articleList = articleList
notifyDataSetChanged()
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val image: ImageView = itemView.imageView
val articleTitle: TextView = itemView.articleTitle
val articleSourceName: TextView = itemView.articleSourceName
val imageCategory: ImageView = itemView.imageCategory
val articleTime: TextView = itemView.articleTime
val bigImage = itemView.bigImage
val header: CardView = itemView.header
val item: CardView = itemView.item
}
}
低于片段类
class BBCSportFragment : Fragment() {
private val listViewType: List<Int> = listOf()
var bbcSportAdapter : BBCSportAdapter? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_sport_bbc, container, false)
val recyclerView = view.findViewById (R.id.recyclerView) as RecyclerView
bbcSportAdapter = BBCSportAdapter(recyclerView.context)
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = bbcSportAdapter
val apiInterface = SportNewsInterface.create().getBBCSport()
// Getting interface
apiInterface.enqueue(object : Callback<SportNewsResponse> {
override fun onResponse(
call: Call<SportNewsResponse>?,
response: Response<SportNewsResponse>?
) {
if (response!!.body() != null) {
bbcSportAdapter!!.setMovieListItems(response.body()!!.articles)
}
}
override fun onFailure(call: Call<SportNewsResponse>?, t: Throwable?) {
}
})
return view
}
}
按照我读取代码的方式,您将收到一个publishedAt
字符串,该字符串应该看起来像2019-10-21T15:12:34 02
或2019-10-21T13:01:23Z
。如果无法解析它,代码将尝试使用从var d=date()
获取的日期和时间,即当前时间。
当你知道怎么做的时候,它可以很容易地完成。很抱歉我只能写Java代码。我需要信任你自己翻译。
String publishedAt = "2019-10-21T13:01:23Z";
Instant timelinePoint;
try {
timelinePoint = DateTimeFormatter.ISO_OFFSET_DATE_TIME
.parse(publishedAt, Instant::from);
} catch (DateTimeParseException dtpe) {
timelinePoint = Instant.now();
}
Instant now = Instant.now();
Duration elapsedTime = Duration.between(timelinePoint, now);
System.out.println(timelinePoint);
System.out.println(now);
System.out.println(elapsedTime.toMinutes());
当我刚刚运行这个片段时,我得到了以下输出:
2019-10-21T13:01:23Z
2019-10-21T16:17:49.719Z
196
无论偏移量是以小时和可选分钟的形式给出,还是以零的形式给出Z
,ISO_OFFSET_DATE_TIME都会以相同的方式解析字符串。因此,上面处理了两种格式。
没有任何理由将SimpleDateFormat
和Date
也加入到代码中。它只会让事情变得更复杂,却一无所获。此外,这些类的设计也很糟糕,前者尤其令人讨厌,而且早已过时,因此我强烈建议您删除它们,永远不要再碰它们。
java中的LocalDateTime
类。对于时间线上的某个点,您使用的时间不是正确的类别。如果字符串中的偏移量与JVM默认时区的UTC偏移量不同,则会得到具有不同隐含偏移量的LocalDateTime
对象。这意味着比较它们是没有意义的,你会得到它们之间不正确的经过时间。
对于您观察到的例外情况:如果您在两次尝试中都无法解析字符串,您正在将当前日期和时间(从date()
)格式化为dd/MM/yyyy
,例如21/10/2019
,然后尝试使用一个argLocalDateTime解析此字符串。parse()
。这有几个问题。首先,parse
方法需要ISO 8601格式。文件上说:
从文本字符串(如2007-12-03T10:15:30
)中获取LocalDateTime
的实例。
您可以看到格式21/10/2019
和2007-12-03T10:15:30
是不一样的。这就是您的异常的原因。异常消息说at index 0
,因为字符串中的index 0是一个两位数,并且该方法期望“年份的四位数或更多”(引用自DateTimeForcat.ISO_LOCAL_DATE
的留档)。第二,您不希望基于一天中没有时间的日期以分钟为单位测量经过的时间。第三,您不能将没有时间的日期字符串解析为LocalDateTime
(有一些技巧可以做到这一点,但它并不是这样工作的)。
LocalDateTime的文档。解析(字符序列)
DateTimeFormatter的文档。ISO_本地_日期
问题内容: 我目前正在从事一些简单的项目,并且在以下字符串中有日期: 并希望将此字符串转换为对象。我正在使用以下代码行来做到这一点。我搜索了站点,找到了解决方法: 但是我可能做错了,因为我总是会遇到异常: 这似乎是我正在使用的模式的问题,但尝试了不同的模式,但没有任何效果。 问题答案: 某些字段(例如,星期几字段和/或AM / PM标记)可能与您的默认字段不匹配。具有方法getErrorOffse
我正在开发新闻应用程序,我已经将从现在到那个日期的运行时间进行了转换,但当我运行代码时,我的适配器类中出现了以下异常 JAVA时间总体安排DateTimeParseException:无法在索引0处分析文本“09/10/2019”,无法在索引19处找到未分析的文本 低于我的适配器类 以下是JSON响应:
问题内容: 在照顾了几个现有的帖子之后,我仍然无法使我的SimpleDateFormat解析器正常工作。这是代码: 我总是以ParseException结尾。这是调试消息的输出: 06-09 23:52:17.478:DEBUG / DEBUG(2436):java.text.ParseException:无法解析的日期:06-09 23:52:17.478:DEBUG / DEBUG(2436)
我使用Java8来解析日期并找出两个日期之间的差异。 以下是我的片段: 当我运行时,我得到了错误: java.time.format.DateTimeParseException:无法在索引3解析文本
下面是我的字符串:convertdate:'2016-08-18 14:27:15.103+02' 和我的代码: 我想不是太复杂,买我看不出错误。字符串中的+02可能是原因吗?