Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';导入字符串数组,因为日志中有一个错误,上面写着;java.util.ArrayList不能强制转换为java.lang.CharSequence“;_Java_Android_Classcastexception - Fatal编程技术网

为什么可以';导入字符串数组,因为日志中有一个错误,上面写着;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(索引
}