为什么可以';导入字符串数组,因为日志中有一个错误,上面写着;java.util.ArrayList不能强制转换为java.lang.CharSequence“;
我试图设置一个按钮,使用数组(概念类似于基于文本的冒险游戏)显示对话框的下一行为什么可以';导入字符串数组,因为日志中有一个错误,上面写着;java.util.ArrayList不能强制转换为java.lang.CharSequence“;,java,android,classcastexception,Java,Android,Classcastexception,我试图设置一个按钮,使用数组(概念类似于基于文本的冒险游戏)显示对话框的下一行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 androi
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>
<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" />
测试1
测试2
测试3
测试4
测试5
测试6
测试7
测试8
布局:activity\u main.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>
<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转换为java.lang.CharSequence
试试这个可能会有帮助
index++; btn_message.setText(messages [index].toString());
按钮#setText()
方法接收一个字符串,该字符串是CharSequence的一个实现,当您执行messages[index]
操作时,您将获得一个数组列表,其中包含元素中行的每个单元格,因此是一个数组
你应该把它们收集在一个字符串中。如果列表为list
,一种方法是:
String stringMessage = String.join(", ", messages[index]);
然后,您应该能够毫无例外地进行setText()
cal:
@Override
public void onClick(View v) {
index++;
String stringMessage = String.join(", ", messages[index]);
btn_message.setText(stringMessage);
}
这样,您将使用coma和空格,
连接它们,如果您想以其他方式连接它们,只需在#join()的第一个参数中指定另一个连接字符串
如果ArrayList不是字符串,则可以使用lambdas执行相同的操作:
String messageString = messages[index].stream().map(Object::toString)
.collect(Collectors.joining(", "));
如果onClick用于避免超出范围的异常,则可以将其设置为以下条件
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);
messages = getResources().getStringArray(R.array.messages);
btn_message=findViewById(R.id.btn_message);
//set Value to varibles
btn_message.setText(messages[index++]);
btn_message.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(index < messages.length) {
btn_message.setText(messages[index]);
index++;
}else{
index = 0;
btn_message.setText(messages[index++]);
}
}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
按钮btn_消息;
字符串[]消息;
int指数=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
messages=getResources().getStringArray(R.array.messages);
btn_消息=findViewById(R.id.btn_消息);
//将值设置为变量
btn_message.setText(messages[index++]);
btn_message.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
if(索引
}