gpt4 book ai didi

java - IndexOutOfBoundsException: charAt: 0 >= length 0 在某些版本的 Android 上

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:20 26 4
gpt4 key购买 nike

我正在尝试使用 Java 和 Eclipse 制作应用程序(目前使用 B4A,但想扩展我的可用资源和制作库的能力)

当尝试使用 fragment 实现对话框时,我遵循了示例 here .

我一直在努力

05-06 13:40:21.060: E/SensorManager(18538): thread start
05-06 13:40:21.105: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0

我试过调试,但调试器永远不会因任何错误而停止(而且我是这个调试器的新手,所以不确定如何解决这个问题)。

有没有人看到异常是在哪里引起的? (只是为了确保它不是任何地方的胖手指,我通过 git 下载并尝试了它,并在 logcat 中收到了完全相同的错误)

这是我的 mainActivity.java:

package com.example.fragmenttest;
import com.example.fragmenttest.EditNameDialog.EditNameDialogListener;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements EditNameDialogListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_edit_name);
showEditDialog();
}

private void showEditDialog() {
FragmentManager fm = getSupportFragmentManager();
EditNameDialog editNameDialog = new EditNameDialog();
editNameDialog.show(fm, "fragment_edit_name");
}

@Override
public void onFinishEditDialog(String inputText) {
Toast.makeText(this, "Hi, " + inputText, Toast.LENGTH_SHORT).show();
}
}

这里是 EditNameDialog.java:

package com.example.fragmenttest;

import android.support.v4.app.DialogFragment;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager.LayoutParams;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;


public class EditNameDialog extends DialogFragment implements OnEditorActionListener {

public interface EditNameDialogListener {
void onFinishEditDialog(String inputText);
}

private EditText mEditText;

public EditNameDialog() {
// Empty constructor required for DialogFragment
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_edit_name, container);
mEditText = (EditText) view.findViewById(R.id.txt_your_name);
getDialog().setTitle("Hello");

// Show soft keyboard automatically
mEditText.requestFocus();
getDialog().getWindow().setSoftInputMode(
LayoutParams.SOFT_INPUT_STATE_VISIBLE);
mEditText.setOnEditorActionListener(this);

return view;
}

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (EditorInfo.IME_ACTION_DONE == actionId) {
// Return input text to activity
EditNameDialogListener activity = (EditNameDialogListener) getActivity();
activity.onFinishEditDialog(mEditText.getText().toString());
this.dismiss();
return true;
}
return false;
}
}

和我的字符串资源文件:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">fragmentTest</string>
<string name="hint_value">hint</string>
<string name="your_name">Your name</string>

</resources>

从 logcat 完成 StackTrace:(与顶部没有区别)

05-06 13:40:21.060: E/SensorManager(18538): thread start
05-06 13:40:21.105: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.105: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.110: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.200: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.205: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.205: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.210: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.215: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.275: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.275: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.300: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.300: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.300: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.470: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.470: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.725: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0
05-06 13:40:21.725: E/Dynamiclayout(18538): java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0

编辑:在运行 4.1.2 的 Galaxy S3 上运行。在运行 2.3.4 的 Galaxy SL 上试用时,绝对没有 logcat 问题。这告诉我它与平台相关,但在我的搜索中,我没有看到任何与 Android 版本相关的信息。跟进问题,有没有人知道 JB(或我提到的任何其他问题)可能导致此错误的问题?

最佳答案

可能,异常是由 android.text.SpannableStringBuilder#charAt(int) 抛出的。

/**
* Return the char at the specified offset within the buffer.
*/
public char charAt(int where) {
int len = length();
if (where < 0) {
throw new IndexOutOfBoundsException("charAt: " + where + " < 0");
} else if (where >= len) {
throw new IndexOutOfBoundsException("charAt: " + where + " >= length " + len);
}

if (where >= mGapStart)
return mText[where + mGapLength];
else
return mText[where];
}

我想您的代码中执行了某种线程不安全的操作。

例如,可能值得尝试将 showEditDialog() 从 onCreate(Bundle) 移动到 onResume()。如果它不能解决问题,接下来要检查 EditNameDialog#onCreateView。

Android API 有很多 onCreateXxx 方法,我们应该避免在这些方法中做一些已记录和未记录的事情。

关于java - IndexOutOfBoundsException: charAt: 0 >= length 0 在某些版本的 Android 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16393791/

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