Aller au contenu

Tableau 2 dimensions


frmoul

Recommended Posts

Bonsoir,

Je continu le développement d'une application.

Je lis un fichier et souhaite inscrire son contenu dans un tableau à 2 dimensions, pour traiter les données ensuite.

Ce point provoque des erreurs lorsque je lance "OnClickAffiche".

Je vous mets le code de "OnClickAffiche" et le logcat pour montrer les erreurs que ça génère.

Avez-vous une idée de ce qui se passe ?

Pour info, si j'enlève la ligne "tableau_fichier_data[x][y]=ligne2[y];", l'application n'impose plus une fermeture forcée.

public void OnClickAffiche(View view){
	String[][] tableau_fichier_data = null;

	//lecture du fichier et contenu mis dans variable "data"
	Context lecontext=getBaseContext();
	ReadSettings(lecontext);

	//recopie du fichier sous forme de tableau
	String[] result = data.split(retour_ligne);
	for (int x=0; x<result.length; x++){ 
		ligne = result[x];		
		String[] ligne2 = ligne.split(";");
		for (int y=0; y<ligne2.length ; y++){
			tableau_fichier_data[x][y]=ligne2[y];	
		}
	}
}

Voici ce que donne le logcat lorsque j'appuie sur le bouton qui appel "OnClickAffiche":

02-19 21:01:43.693: ERROR/AndroidRuntime(220): Uncaught handler: thread main exiting due to uncaught exception
02-19 21:01:43.934: ERROR/AndroidRuntime(220): java.lang.IllegalStateException: Could not execute method of the activity
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.View$1.onClick(View.java:2027)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.View.performClick(View.java:2344)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.View.onTouchEvent(View.java:4133)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.widget.TextView.onTouchEvent(TextView.java:6510)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.View.dispatchTouchEvent(View.java:3672)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.os.Looper.loop(Looper.java:123)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.app.ActivityThread.main(ActivityThread.java:4203)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at java.lang.reflect.Method.invokeNative(Native Method)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at java.lang.reflect.Method.invoke(Method.java:521)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at dalvik.system.NativeStart.main(Native Method)
02-19 21:01:43.934: ERROR/AndroidRuntime(220): Caused by: java.lang.reflect.InvocationTargetException
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at f.moulin.gestion.elevage.gestion.OnClickAffiche(gestion.java:224)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at java.lang.reflect.Method.invokeNative(Native Method)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at java.lang.reflect.Method.invoke(Method.java:521)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     at android.view.View$1.onClick(View.java:2022)
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     ... 21 more
02-19 21:01:43.934: ERROR/AndroidRuntime(220): Caused by: java.lang.NullPointerException
02-19 21:01:43.934: ERROR/AndroidRuntime(220):     ... 25 more

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Pierre87,

Merci pour ton intervention mais je ne comprends pas ce qu'il faut ajouter pour que ça marche.

j'ai cherché des infos sur "java.lang.NullPointerException" sur le net mais étant débutant je n'ai pas tout compris.

"elle n'est définie nulle part ailleurs"

Que faut-il définir et où ?

J'ai écrit tableau = null pour le vider de toute valeur. Si ce n'est pas ce qu'il fallait faire, merci de me le dire.

Freddy

Lien vers le commentaire
Partager sur d’autres sites

"tableau = null" ne veut pas dire "vider le tableau". La variable "tableau" est une référence sur un objet tableau, que, comme tout objet, il faut instancier. "tableau = null" veut simplement dire que l'on initialise la référence à null, ie. qu'on ne référence aucun objet.

Il te faut donc instancier ton tableau, ce que tu pourras faire de cette façon par exemple

String[][] tableau_fichier_data = new String[10][10];

Il te faut explicitement indiquer la taille du tableau (ici un tableau de 10x10). En Java, la taille des tableaux est fixe, ils ne sont pas auto-extensibles.

Si tu ne connais pas à priori la taille des données que tu vas stocker dans ton tableau, il faut utiliser une autre structure de données (une List, par exemple)

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Merci beaucoup pour la réponse.

J'avais mal compris la déclaration des tableaux.

Ca devrait aller beaucoup mieux !

Freddy

"tableau = null" ne veut pas dire "vider le tableau". La variable "tableau" est une référence sur un objet tableau, que, comme tout objet, il faut instancier. "tableau = null" veut simplement dire que l'on initialise la référence à null, ie. qu'on ne référence aucun objet.

Il te faut donc instancier ton tableau, ce que tu pourras faire de cette façon par exemple

String[][] tableau_fichier_data = new String[10][10];

Il te faut explicitement indiquer la taille du tableau (ici un tableau de 10x10). En Java, la taille des tableaux est fixe, ils ne sont pas auto-extensibles.

Si tu ne connais pas à priori la taille des données que tu vas stocker dans ton tableau, il faut utiliser une autre structure de données (une List, par exemple)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...