J'ai un problème avec mon application Android. J'ai un bouton et un événement associé, mais une erreur survient lorsque je clique pour la première fois.
"les portées ne peuvent avoir une longueur nulle".
. Mais lorsque je clique pour la deuxième fois, l’événement onclick s’exécute bien. Regarde mon code Java:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button selectAltitude = (Button) findViewById(R.id.buttonAltitude1);
final Button selectAltitude2 = (Button) findViewById(R.id.buttonAltitude2);
selectAltitude2.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
String tempAlt = selectAltitude2.getText().toString();
selectAltitude2.setText(selectAltitude.getText().toString());
selectAltitude.setText(tempAlt);
}
});
}
Le code XML avec les deux boutons (un avertissement déconseillé se produit):
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@Android:color/black">
<Button
Android:id="@+id/buttonAltitude1"
style="?android:attr/buttonBarButtonStyle"
Android:layout_width="39dp"
Android:layout_height="42dp"
Android:layout_marginLeft="250dp"
Android:layout_x="257dp"
Android:layout_y="419dp"
Android:background="@drawable/drawable1"
Android:focusableInTouchMode="true"
Android:gravity="center_vertical"
Android:includeFontPadding="false"
Android:linksClickable="true"
Android:minHeight="10dp"
Android:minWidth="64dp"
Android:paddingLeft="10dp"
Android:paddingRight="5dp"
Android:scrollHorizontally="true"
Android:text="@string/button_meters"
Android:textColor="@Android:color/black"
Android:textSize="22sp"
Android:textStyle="bold" />
<Button
Android:id="@+id/buttonAltitude2"
style="?android:attr/buttonBarButtonStyle"
Android:layout_width="65dp"
Android:layout_height="42dp"
Android:layout_marginLeft="250dp"
Android:layout_x="295dp"
Android:layout_y="419dp"
Android:background="@drawable/drawable2"
Android:clickable="true"
Android:focusableInTouchMode="true"
Android:gravity="center_vertical"
Android:includeFontPadding="false"
Android:linksClickable="true"
Android:minHeight="10dp"
Android:minWidth="64dp"
Android:paddingLeft="15dp"
Android:paddingRight="5dp"
Android:scrollHorizontally="true"
Android:text="@string/button_feet"
Android:textColor="@Android:color/black"
Android:textSize="25sp"
Android:textStyle="bold" />
Lorsque je clique sur la première fois que Log cat interagit avec:
04-06 20: 01: 39.865: I/Capteurs (6946): sendDelay --- 200000000 04-06
20: 01: 39.865: D/SensorManager (6946): JNI - sendDelay 04-06
20: 01: 39.865: I/SensorManager (6946): définition du délai normal = vrai 04-06
20: 01: 39.890: E/SpannableStringBuilder (6946): SPAN_EXCLUSIVE_EXCLUSIVE
les portées ne peuvent avoir une longueur nulle 04-06 20: 01: 39.890:
E/SpannableStringBuilder (6946): les étendues SPAN_EXCLUSIVE_EXCLUSIVE ne peuvent pas
avoir une longueur nulle
pouvez-vous aider ne?;)
J'ai rencontré les mêmes erreurs dans LogCat. Dans mon cas, cela est causé par le clavier tiers que j'utilise. Lorsque je rétablis le clavier Android, l'entrée d'erreur n'apparaît plus.
C’est la cause la plus probable de ce problème car il existe également un rapport de bogue pour SwiftKey:
Pour essayer de déboguer cette erreur, allez d’abord sur votre terminal/console Android et exécutez cette commande:
ps | grep THE_ERROR_PID_YOU_GET_(IT_IS_A_NUMBER)
si la sortie apparaît comme votre application, c’est votre application qui cause l’erreur. Essayez de chercher Strings
vide que vous passez dans la layout
.
J'ai eu exactement ce même problème et c'était de ma faute car je passais un String
vide dans ma mise en page. Après avoir changé le ""
en " "
, cette erreur a disparu.
Si vous n'obtenez pas votre application à partir de la sortie de la console, c'est quelque chose d'autre qui la cause (probablement, comme d'autres l'ont dit, le clavier Android).
Je sais que je suis un peu en retard. Si quelqu'un a encore besoin d'aide pour avoir cliquez sur la deuxième fois pour que l'événement onclick soit exécuté , j'ai supprimé ceci:
Android:focusableInTouchMode="true"
L'événement onClick fonctionnera désormais au premier clic.