gpt4 book ai didi

java - 为什么我无法导入字符串数组,因为日志中有错误,显示 "java.util.ArrayList cannot be cast to java.lang.CharSequence"

转载 作者:行者123 更新时间:2023-12-02 10:01:43 24 4
gpt4 key购买 nike

我正在尝试设置一个按钮,使用数组(概念类似于基于文本的冒险游戏)来显示对话框的下一行onClick,但是当我导入.xml,这只是一个简单的存储所有对话框的内容。

package com.example.project;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn_message;
String[] messages;
int index = 0;

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

//Importing values
messages = getResources().getStringArray(R.array.messages);
btn_message=findViewById(R.id.btn_message);

//set Value to varibles

btn_message.setOnClickListener(this);


}

@Override
public void onClick(View v) {
index++;
btn_message.setText(messages [index]);
}
}

如果需要的话Logcat:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.CharSequence
at com.example.project.MainActivity.onClick(MainActivity.java:34)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

string.xml

<resources>
<string-array name="messages">
<item>test1</item>
<item>test2</item>
<item>test3</item>
<item>test4</item>
<item>test5</item>
<item>test6</item>
<item>test7</item>
<item>test8</item>
</string-array>
</resources>

布局:activity_main.xml

<Button
android:id="@+id/btn_message"
android:layout_width="713dp"
android:layout_height="146dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

预计单击按钮并且按钮上的文本发生变化,但应用程序崩溃的原因是:

java.util.ArrayList cannot be cast to java.lang.CharSequence

最佳答案

Button#setText()方法接收一个 String,它是 CharSequence 的实现,当您执行 messages[index] 时您将获得一个 ArrayList,其中包含元素中该行的每个单元格,因此是一个数组的数组。

您应该将它们收集在一个字符串中。一种方法是,如果列表是 List<String> ,是:

String stringMessage = String.join(", ", messages[index]);

那么你应该能够制作setText()校准无异常:

@Override
public void onClick(View v) {
index++;
String stringMessage = String.join(", ", messages[index]);
btn_message.setText(stringMessage);
}

像这样,您将通过逗号和空格加入它们 , ,如果您想以其他方式连接它们,只需在 #join() 的第一个参数中指定另一个连接字符串即可

如果 ArrayList 不是 String,则可以使用 lambda 执行相同的操作:

String messageString = messages[index].stream().map(Object::toString)
.collect(Collectors.joining(", "));

关于java - 为什么我无法导入字符串数组,因为日志中有错误,显示 "java.util.ArrayList cannot be cast to java.lang.CharSequence",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55570907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com