Android ClassCastException 对象[] 到字符串[]
Android ClassCastException Object[] to String[]
嗨,各位程序员 <3
我想通过 broadcastReceiver 将一个字符串数组从我的服务传输到我的 MainActivity。
字符串数组包装在 Intent 中。
但是当我试图让 String[] 脱离我的 intent
那么它是一个对象数组,我不能只使用 intent.getStringArrayExtra(String).
然后我试了这个:
如何在Java中将对象数组转换为字符串数组?
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
但它也不起作用:/
public class MainActivity extends Activity implements View.OnClickListener {
final String LOG_TAG = "mainActivityLogs";
Button btnStartService;
private int numberOfFinishedTasks = 0;
private List<String> finishedTasksInTheLast60Sec = new ArrayList<>();
private int startedTasks = 0;
private ProgressBar pbService;
private Handler progressHandler = new Handler();
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//results in java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
finishedTasksInTheLast60Sec = Arrays.asList(intent.getStringArrayExtra("finishedTasks"));
//results in java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
Object[] objectArray = intent.getStringArrayExtra("finishedTasks");
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
finishedTasksInTheLast60Sec = Arrays.asList(stringArray);
numberOfFinishedTasks += finishedTasksInTheLast60Sec.size();
for (String finishedTask : finishedTasksInTheLast60Sec) {
Log.d(LOG_TAG, finishedTask);
}
}
};
此函数在服务文件 MyService 中,var finishedTasks 仅包含已关闭的线程的名称:
private void sendBroadcast(List<String> finishedTasks) {
Intent intent = new Intent("myServiceUpdate");
intent.putExtra("finishedTasks", finishedTasks.toArray());
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
希望您能提供帮助,如果您需要整个代码,请发短信给我 :)
发送时,通过以下方式将List类型转换为ArrayList类型:
intent.putStringArrayListExtra("finishedTasks",(ArrayList<String>)finishedTasks);
在接收时通过 :
获取数据
List stringList = getIntent().getStringArrayListExtra("finishedTasks");
嗨,各位程序员 <3
我想通过 broadcastReceiver 将一个字符串数组从我的服务传输到我的 MainActivity。
字符串数组包装在 Intent 中。
但是当我试图让 String[] 脱离我的 intent
那么它是一个对象数组,我不能只使用 intent.getStringArrayExtra(String).
然后我试了这个:
如何在Java中将对象数组转换为字符串数组?
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
但它也不起作用:/
public class MainActivity extends Activity implements View.OnClickListener {
final String LOG_TAG = "mainActivityLogs";
Button btnStartService;
private int numberOfFinishedTasks = 0;
private List<String> finishedTasksInTheLast60Sec = new ArrayList<>();
private int startedTasks = 0;
private ProgressBar pbService;
private Handler progressHandler = new Handler();
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//results in java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
finishedTasksInTheLast60Sec = Arrays.asList(intent.getStringArrayExtra("finishedTasks"));
//results in java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
Object[] objectArray = intent.getStringArrayExtra("finishedTasks");
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
finishedTasksInTheLast60Sec = Arrays.asList(stringArray);
numberOfFinishedTasks += finishedTasksInTheLast60Sec.size();
for (String finishedTask : finishedTasksInTheLast60Sec) {
Log.d(LOG_TAG, finishedTask);
}
}
};
此函数在服务文件 MyService 中,var finishedTasks 仅包含已关闭的线程的名称:
private void sendBroadcast(List<String> finishedTasks) {
Intent intent = new Intent("myServiceUpdate");
intent.putExtra("finishedTasks", finishedTasks.toArray());
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
希望您能提供帮助,如果您需要整个代码,请发短信给我 :)
发送时,通过以下方式将List类型转换为ArrayList类型:
intent.putStringArrayListExtra("finishedTasks",(ArrayList<String>)finishedTasks);
在接收时通过 :
获取数据 List stringList = getIntent().getStringArrayListExtra("finishedTasks");