J'ai un problème, problème très ennuyeux, et je n'ai absolument aucune idée de ce qui le cause! J'essaie de faire une application Android capable de lire un fichier XML, en ajoutant des données du fichier XML à une ArrayList, puis en plaçant ArrayList dans un Spinner. Voici une partie de ma classe Raccourcis.Android: Spinner d'ouverture Close force avec ArrayList
Shortcuts.java
Spinner selection = (Spinner) findViewById(R.id.shortcutsSpinner); //Defining the Spinner
/*ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.shortcut_selection, android.R.layout.simple_spinner_item); //Defining the items in the Spinner
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
selection.setAdapter(adapter); //Setting the items to the Spinner*/
ArrayList<String> items;
try {
items = scanner.getCategorys();
} catch (FileNotFoundException e) {
items = null;
e.printStackTrace();
} catch (XmlPullParserException e) {
items = null;
e.printStackTrace();
} catch (IOException e) {
items = null;
e.printStackTrace();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
ArrayAdapter<CharSequence> adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
selection.setAdapter(adapter);
selection.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
final String simulatorCommands = getString(R.string.Simulator_Commands); //Setting Shortcuts
final String controlSurfaceCommands = getString(R.string.Control_Surface_Commands);
TextView Text = (TextView)findViewById(R.id.shortcutsText); //Defining the TextView
Spinner selection = (Spinner) findViewById(R.id.shortcutsSpinner); //Defining the Spinner
Voici une partie de ma classe Scanner
de Scanner.java
public ArrayList<String> getCategorys() throws XmlPullParserException, IOException {
ArrayList<String> categorys = new ArrayList<String>();
categorys.add("Please select a category");
//START ADDING HERE
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
File file = new File(Environment.getExternalStorageDirectory()+ "/fsx_kneeboard/categories.xml");
FileInputStream fis = new FileInputStream(file);
parser.setInput(new InputStreamReader(fis));
parser.next();
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG && parser.getName().equals("name")) {
categorys.add(parser.getText());
}
parser.next();
eventType = parser.getEventType();
}
return categorys;
}
Je peux entrer dans le Activit du scanner y, mais quand j'essaie d'ouvrir le Spinner, j'obtiens une force proche, et ceci dans le logcat.
04-09 17: 30: 56,452: D/AndroidRuntime (9980): Arrêt VM 9/4 17: 30: 56,452: W/dalvikvm (9980): threadid = 1: fil sortant avec uncaught exception (groupe = 0x4001d7e8) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): FATAL EXCEPTION: principal 04-09 17: 30: 56.482: E/AndroidRuntime (9980): java.lang.NullPointerException 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:355) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android .widget.ArrayAdapter.getDropDownView (ArrayAdapter.java:376) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.widget.Spinner $ DropDownAda pter.getDropDownView (Spinner.java:329) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.Spinner $ DropDownAdapter.getView (Spinner.java:325) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.AbsListView.obtainView (AbsListView.java:1294) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.ListView. measureHeightOfChildren (ListView.java:1198) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.ListView.onMeasure (ListView.java:1109) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.ViewGroup.measureChildWithMargins (ViewGroup. java: 3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.widget.LinearLayout.measureChildBef oreLayout (LinearLayout.java:1012) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.LinearLayout.measureVertical (LinearLayout.java:381) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.LinearLayout.onMeasure (LinearLayout.java:304) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.View.measure (Voir. java: 8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1012) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.widget.LinearLayout.measureVertical (LinearLayout.java:381) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.widget.LinearLay out.onMeasure (LinearLayout.java:304) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à com.android.internal.widget.WeightedLinearLayout.onMeasure (WeightedLinearLayout.java:60) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): sur android.view. ViewGroup.measureChildWithMargins (ViewGroup.java: 3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.FrameLayout.onMeasure (FrameLayout.java:245) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:3132) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.widget.FrameLayout.onMeasure (FrameLayout.java:245) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.view.View.measure (View.java:8171) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.ViewRoot.performTraversals (ViewRoot.java:801) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.view.ViewRoot.handleMessage (ViewRoot.java:1727) 04-09 17:30: 56.482: E/AndroidRuntime (9980): à l'adresse android.os.Handler.dispatchMessage (Handler.java:99) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): at android.os.Looper.loop (Looper.java:123) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse android.app.ActivityThread.main (ActivityThread.java:4627) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à java.lang.reflect.Method.invokeNative (méthode native) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à java.lang.reflect.Method.invoke (Method.java : 521) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à l'adresse com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) 04-09 17: 30: 56.482 : E/AndroidRuntime (9980): à com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) 04-09 17: 30: 56.482: E/AndroidRuntime (9980): à dalvik.syst em.NativeStart.main (méthode native)
Je ne comprends pas beaucoup le logcat, je suis nouveau à Java. Je sais que le problème est dans ce morceau de code; quand je le supprime, le Spinner s'ouvre et fonctionne en me montrant 'Veuillez sélectionner une catégorie'.
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG && parser.getName().equals("name")) {
categorys.add(parser.getText());
}
parser.next();
eventType = parser.getEventType();
}
Mais ce code me semble propre, n'importe quelle aide s'il vous plaît? Merci pour le temps et l'aide, je serai très reconnaissant, zeokila.
J'ai édité la boucle while, j'ai dû ajouter eventType = parser.getEventType(); au-dessus de parser.next(); Maintenant, il ne force pas fermer, mais il montrera simplement s'il vous plaît sélectionnez une catégorie, mais pas les données supplémentaires dans le fichier XML, merci pour votre aide si, aucune donnée n'est meilleure que la force se ferme. –
Mais je suppose que c'est un autre problème, vous avez résolu le FC, merci –