2013-05-06 3 views
9

Ich versuche, mit Java und Eclipse Anwendungen zu machen (derzeit mit B4A, aber meine verfügbaren Ressourcen zu erweitern, und die Fähigkeit, Bibliotheken zu machen)IndexOutOfBoundsException: charAt: 0> = Länge 0 auf einigen Versionen von Android

Beim Versuch, einen Dialog mit Fragmenten zu implementieren, habe ich das Beispiel here gefolgt.

Ich halte

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 

ich versucht habe, das Debuggen immer, aber der Debugger hört nie auf jedem Fehler (und ich bin neu in diesem Debugger, so dass nicht sicher, wie dass man herauszufinden).

Kann jemand sehen, wo die Ausnahme verursacht wird? (Nur um sicherzustellen, dass es ist kein Fett Finger überall, ich über die Git heruntergeladen und ausprobiert und erhielt genau die gleichen Fehler in der logcat)

Hier ist meine 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(); 
} 
} 

und hier ist der 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; 
} 
} 

und meine String Ressourcendatei:

<?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> 

Komplett aus Stacktrace logcat: (nicht anders als oben)

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 

Edit: war auf dem Galaxy S3 läuft 4.1.2 läuft. Wenn ich es mit meinem Galaxy SL mit 2.3.4 ausprobiert habe, gibt es absolut keine Probleme mit dem Logcat. Dies sagt mir, dass es plattformbezogen ist, aber bei meinen Suchvorgängen habe ich nichts in Bezug auf die Android-Version gesehen. Follow-up-Frage, kennt jemand ein Problem mit JB (oder etwas anderem, das ich erwähnt habe), das für diesen Fehler verantwortlich sein könnte?

+0

Post komplette Stacktrace – njzk2

+0

Veröffentlichen Sie die Logcat-Ausgabe. – Neoh

+0

hast du ein lösung dafür? –

Antwort

1

Wahrscheinlich wird die Ausnahme von android.text.SpannableStringBuilder # charAt (int) geworfen.

/** 
* 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]; 
} 

Ich denke, eine Art Thread-unsichere Operation wird in Ihrem Code durchgeführt.

Zum Beispiel kann es sein, ein Versuch wert showEditDialog() von onCreate (Bundle) zu onResume() zu bewegen. Wenn es das Problem nicht löst, ist EditNameDialog # onCreateView die nächste Überprüfung.

Android API hat viele onCreateXxx Methoden, und es werden dokumentiert und undokumentiert Dinge, die wir vermeiden sollten innerhalb der Methoden zu tun.

Verwandte Themen