Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Problème size et index d'un tableau de tableau

Je ne comprend pas :s

Sujet résolu
    2 janvier 2013 à 10:38:08

    Bonjour, en lançant mon code j'ai une erreur de ce type:

    01-02 09:29:51.236: E/AndroidRuntime(532): FATAL EXCEPTION: main
    01-02 09:29:51.236: E/AndroidRuntime(532): java.lang.RuntimeException: Unable to start activity ComponentInfo{rapport.presse.cim/rapport.presse.cim.Tableau}: java.lang.ArrayIndexOutOfBoundsException: length=20; index=20
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.ActivityThread.access$600(ActivityThread.java:123)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.os.Looper.loop(Looper.java:137)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at java.lang.reflect.Method.invokeNative(Native Method)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at java.lang.reflect.Method.invoke(Method.java:511)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at dalvik.system.NativeStart.main(Native Method)
    01-02 09:29:51.236: E/AndroidRuntime(532): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=20; index=20
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at rapport.presse.cim.Tableau.onCreate(Tableau.java:202)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.Activity.performCreate(Activity.java:4465)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
    01-02 09:29:51.236: E/AndroidRuntime(532): 	... 11 more
    


    Pourtant je ne pense pas me tromper:

    @Override
    for (int i = 0; i < 5; i++){
            	mDataMap.add(new ArrayList<String>());
            	for (int j = cpt; j < cpt+20; j++){
                	textViewTab[i][j] = (TextView) findViewById(textViewId[j].getResId());
                	cpt=+20;
                }
            	new AsyncDownloadTab(mDataMap.get(i), textViewTab[i]).execute(url, "choix", mVariable, "date", mDate[i]);
            }
    	}
    

    J'ai un double tableau, je rentre dans le tableau de tableau via ma première boucle et ensuite je m'occupe d'initialer mes Textview dans les cellules de chaque tableau.
    Quand j'ai fini l'étape pour le premier tableau je lance l'asyncDownload en envoyant ce tableau en paramètre.

    Dans ma classe asynchrone j'ai ça:

    @Override
    	protected void onPostExecute(List<String> result) {
    		super.onPostExecute(result);
    		if (mListChiffres != null){	
    			for(int i = 0; i < mTextViewMap.length; i++){
    				mTextViewMap[i].setText(mListChiffres.get(i));	
    			}
    		}
    	}
    


    Voilà je ne vois pas trop où j'ai fait une erreur.

    Voilci mes 2 classes concernées (la classe http est dc je ne la montre pas):

    Classe tableau:
    package rapport.presse.cim;
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.TableLayout;
    import android.widget.TextView;
    
    public class Tableau extends Activity {
    	
    	//protected static final View mCaseTableLayout16 = null;
    	
    	public String[] mDate = {"2007", "2008", "2009", "2010", "2011"};
    
    	enum TextViewId{
    		mDataNbNumCol1(R.id.dataNbNum1),
    		mDataTirageCol1(R.id.dataTirage1),
    		mDataDiffTotCol1(R.id.dataDiffTot1),
    		mDataDiffPayCol1(R.id.dataDiffPay1),
    		mDataVindCol1(R.id.dataVind1),
    		mDataAbPrintCol1(R.id.dataAbPrint1),
    		mDataAbGroupCol1(R.id.dataAbGroup1),
    		mDataVNumPCol1(R.id.dataVNumP1),
    		mDataVTiersCol1(R.id.dataVTiers1),
    		mDataAdCol1(R.id.dataAd1),
    		mDataNonAdCol1(R.id.dataNonAd1),
    		mDataAffCol1(R.id.dataAff1),
    		mDataAutreDiffMCol1(R.id.dataAutreDiffM1),
    		mDataAdBisCol1(R.id.dataAdBis1),
    		mDataNonAdBisCol1(R.id.dataNonAdBis1),
    		mDataPushCol1(R.id.dataPush1),
    		mDataPullCol1(R.id.dataPull1),
    		mDataPullBisCol1(R.id.dataPullBis1),
    		mDataDisPubCol1(R.id.dataDisPub1),
    		mDataDiffDCol1(R.id.dataDiffD1),	
    		
            mDataNbNumCol2(R.id.dataNbNum2),
            mDataTirageCol2(R.id.dataTirage2),
            mDataDiffTotCol2(R.id.dataDiffTot2),
            mDataDiffPayCol2(R.id.dataDiffPay2),
            mDataVindCol2(R.id.dataVind2),
            mDataAbPrintCol2(R.id.dataAbPrint2),
            mDataAbGroupCol2(R.id.dataAbGroup2),
            mDataVNumPCol2(R.id.dataVNumP2),
            mDataVTiersCol2(R.id.dataVTiers2),
            mDataAdCol2(R.id.dataAd2),
            mDataNonAdCol2(R.id.dataNonAd2),
            mDataAffCol2(R.id.dataAff2),
            mDataAutreDiffMCol2(R.id.dataAutreDiffM2),
            mDataAdBisCol2(R.id.dataAdBis2),
            mDataNonAdBisCol2(R.id.dataNonAdBis2),
            mDataPushCol2(R.id.dataPush2),
            mDataPullCol2(R.id.dataPull2),
            mDataPullBisCol2(R.id.dataPullBis2),
            mDataDisPubCol2(R.id.dataDisPub2),
            mDataDiffDCol2(R.id.dataDiffD2),
    
            mDataNbNumCol3(R.id.dataNbNum3),
            mDataTirageCol3(R.id.dataTirage3),
            mDataDiffTotCol3(R.id.dataDiffTot3),
            mDataDiffPayCol3(R.id.dataDiffPay3),
            mDataVindCol3(R.id.dataVind3),
            mDataAbPrintCol3(R.id.dataAbPrint3),
            mDataAbGroupCol3(R.id.dataAbGroup3),
            mDataVNumPCol3(R.id.dataVNumP3),
            mDataVTiersCol3(R.id.dataVTiers3),
            mDataAdCol3(R.id.dataAd3),
            mDataNonAdCol3(R.id.dataNonAd3),
            mDataAffCol3(R.id.dataAff3),
            mDataAutreDiffMCol3(R.id.dataAutreDiffM3),
            mDataAdBisCol3(R.id.dataAdBis3),
            mDataNonAdBisCol3(R.id.dataNonAdBis3),
            mDataPushCol3(R.id.dataPush3),
            mDataPullCol3(R.id.dataPull3),
            mDataPullBisCol3(R.id.dataPullBis3),
            mDataDisPubCol3(R.id.dataDisPub3),
            mDataDiffDCol3(R.id.dataDiffD3),
    
            mDataNbNumCol4(R.id.dataNbNum4),
            mDataTirageCol4(R.id.dataTirage4),
            mDataDiffTotCol4(R.id.dataDiffTot4),
            mDataDiffPayCol4(R.id.dataDiffPay4),
            mDataVindCol4(R.id.dataVind4),
            mDataAbPrintCol4(R.id.dataAbPrint4),
            mDataAbGroupCol4(R.id.dataAbGroup4),
            mDataVNumPCol4(R.id.dataVNumP4),
            mDataVTiersCol4(R.id.dataVTiers4),
            mDataAdCol4(R.id.dataAd4),
            mDataNonAdCol4(R.id.dataNonAd4),
            mDataAffCol4(R.id.dataAff4),
            mDataAutreDiffMCol4(R.id.dataAutreDiffM4),
            mDataAdBisCol4(R.id.dataAdBis4),
            mDataPushCol4(R.id.dataPush4),
            mDataPullCol4(R.id.dataPull4),
            mDataPullBisCol4(R.id.dataPullBis4),
            mDataDisPubCol4(R.id.dataDisPub4),
            mDataDiffDCol4(R.id.dataDiffD4),
    
            mDataNbNumCol5(R.id.dataNbNum5),
            mDataTirageCol5(R.id.dataTirage5),
            mDataDiffTotCol5(R.id.dataDiffTot5), 
            mDataDiffPayCol5(R.id.dataDiffPay5),   
            mDataVindCol5(R.id.dataVind5),
            mDataAbPrintCol5(R.id.dataAbPrint5),
            mDataAbGroupCol5(R.id.dataAbGroup5),
            mDataVNumPCol5(R.id.dataVNumP5),
            mDataVTiersCol5(R.id.dataVTiers5),
            mDataAdCol5(R.id.dataAd5),
            mDataNonAdCol5(R.id.dataNonAd5),
            mDataAffCol5(R.id.dataAff5),
            mDataAutreDiffMCol5(R.id.dataAutreDiffM5),
            mDataAdBisCol5(R.id.dataAdBis5),
            mDataNonAdBisCol5(R.id.dataNonAdBis5),
            mDataPushCol5(R.id.dataPush5),
            mDataPullCol5(R.id.dataPull5),
            mDataPullBisCol5(R.id.dataPullBis5),
            mDataDisPubCol5(R.id.dataDisPub5),
            mDataDiffDCol5(R.id.dataDiffD5);
    
    		private int resId;
    		private TextViewId(int r){
    			this.resId = r;
    		}
    		public int getResId(){
    			return this.resId;
    		}
    	}
    	
    	enum ButtonId{
    		
    		mNbNum(R.id.nbNum),
            mTirage(R.id.tirage),
            mDiffTot(R.id.diffTot),
        	mPullBis(R.id.pullBis);
        	
    		private int resId;
    		private ButtonId(int r){
    			this.resId = r;
    		}
    		public int getResId(){
    			return this.resId;
    		}
    	}
    	
    	enum TableId{
    		
    		mTableLayout1(R.id.tableLayout1),
    		mTableLayout2(R.id.tableLayout2),
    		mTableLayout6(R.id.tableLayout3),
    		mTableLayout7(R.id.tableLayout4);
    
    		private int resId;
    		private TableId(int r){
    			this.resId = r;
    		}
    		public int getResId(){
    			return this.resId;
    		}
    	}
    	
    	public TextViewId[] textViewId = TextViewId.values();
    	
    	public TextView[] textViewMap = new TextView[20];
    	
        public TextView[][] textViewTab = new TextView[5][textViewMap.length];
        
        
        
        public ButtonId[] buttonId = ButtonId.values();
        public Button[] buttonMap = new Button[buttonId.length]; //4
        
        public List<ArrayList<String>> mDataMap = new ArrayList<ArrayList<String>>(5); //5 colonnes 
        
        public TableId[] tableId = TableId.values();
        public TableLayout[] tableMap = new TableLayout[tableId.length]; //4
    	
    	public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.tableau);
            
    
            final String url="http://192.168.1.100/cimPresse.php?donnee=getResultats";
    
            
            /**================================================
    		Récupération des passages de variable
    		================================================**/
            Bundle extra = getIntent().getExtras();
            String mVariable = extra.getString("choix");
           // Log.i("log_tag", mVariable);
            int cpt = 0;
            for (int i = 0; i < 5; i++){
            	mDataMap.add(new ArrayList<String>());
            	for (int j = cpt; j < cpt+20; j++){
                	textViewTab[i][j] = (TextView) findViewById(textViewId[j].getResId());
                	cpt=+20;
                }
            	new AsyncDownloadTab(mDataMap.get(i), textViewTab[i]).execute(url, "choix", mVariable, "date", mDate[i]);
            }
            
            for (int k = 0; k < buttonId.length; k++){
            	tableMap[k] = (TableLayout) findViewById(tableId[k].getResId());
            	tableMap[k].setVisibility(View.GONE);
            	
            	buttonMap[k] = (Button) findViewById(buttonId[k].getResId());
            	buttonMap[k].setOnClickListener(new MyTabListener(tableMap[k]));
            }
    	}
    }
    

    Classe asynchrone:
    package rapport.presse.cim;
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.AsyncTask;
    import android.util.Log;
    import android.widget.TextView;
    
    public class AsyncDownloadTab extends AsyncTask<String, Integer, List<String>> {
    
    	private InputStream mInputStream;
    	private HttpConnexionTab mHttpConnexionTab = new HttpConnexionTab();
    	
    	public  List<String> mListChiffres = new ArrayList<String>();
    	private TextView[] mTextViewMap;
    	private int cpt;
    
    
    	
    	public AsyncDownloadTab(ArrayList<String> mChiffres, TextView[] textViewMap){
    		this.mListChiffres = mChiffres;
    		this.mTextViewMap = textViewMap;
    		this.cpt = cpt;
    	}
    	@Override
    	protected List<String> doInBackground(String... params) {
    		// TODO Auto-generated method stub
    		String url = params[0];
    		String key1= params[1];
    		String choix = params[2];
    		String key2 = params[3];
    		String date = params[4];
    		mInputStream = mHttpConnexionTab.getConnexionHttp(url, key1, choix, key2, date);
    		String res = mHttpConnexionTab.convertToString(mInputStream);
    		mListChiffres = mHttpConnexionTab.parseJsonFile(res);
    		return mListChiffres;
    	}
    	
    	@Override
    	protected void onPostExecute(List<String> result) {
    		super.onPostExecute(result);
    		if (mListChiffres != null){	
    			for(int i = 0; i < mTextViewMap.length; i++){
    				mTextViewMap[i].setText(mListChiffres.get(i));	
    			}
    		}
    	}
    			
    			/**mDataTirage1.setText(mChiffresCol1.mDataTirage);
    			mDataDiffTot1.setText(mChiffresCol1.mDataDiffTot);
    			mDataDiffPay1.setText(mChiffresCol1.mDataDiffPay);
    			mDataVind1.setText(mChiffresCol1.mDataVind);
    			mDataAbPrint1.setText(mChiffresCol1.mDataAbPrint);
    			mDataAbGroup1.setText(mChiffresCol1.mDataAbGroup);
    			mDataVNumP1.setText(mChiffresCol1.mDataVNumP);
    			mDataVTiers1.setText(mChiffresCol1.mDataVTiers);
    			mDataAd1.setText(mChiffresCol1.mDataAd);
    			mDataNonAd1.setText(mChiffresCol1.mDataNonAd);
    			mDataAff1.setText(mChiffresCol1.mDataAff);
    			mDataAutreDiffM1.setText(mChiffresCol1.mDataAutreDiffM);
    			mDataAdBis1.setText(mChiffresCol1.mDataAdBis);
    			mDataNonAdBis1.setText(mChiffresCol1.mDataNonAdBis);
    			mDataPush1.setText(mChiffresCol1.mDataPush);
    			mDataPull1.setText(mChiffresCol1.mDataPull);
    			mDataPullBis1.setText(mChiffresCol1.mDataPullBis);
    			mDataDisPub1.setText(mChiffresCol1.mDataDisPub);
    			mDataDiffD1.setText(mChiffresCol1.mDataDiffD);
    		}
    		else {
    			mDataNbNum1.setText("-");
    			mDataTirage1.setText("-");
    			mDataDiffTot1.setText("-");
    			mDataDiffPay1.setText("-");
    			mDataVind1.setText("-");
    			mDataAbPrint1.setText("-");
    			mDataAbGroup1.setText("-");
    			mDataVNumP1.setText("-");
    			mDataVTiers1.setText("-");
    			mDataAd1.setText("-");
    			mDataNonAd1.setText("-");
    			mDataAff1.setText("-");
    			mDataAutreDiffM1.setText("-");
    			mDataAdBis1.setText("-");
    			mDataNonAdBis1.setText("-");
    			mDataPush1.setText("-");
    			mDataPull1.setText("-");
    			mDataPullBis1.setText("-");
    			mDataDisPub1.setText("-");
    			mDataDiffD1.setText("-");
    		}**/
    	}
    


    Réglé, je devais utiliser un autre indice pour mon tableau d'id et donc ma boucle devient:

    int cpt = 0;
            int indexTextViewId = 0;
            
            for (int i = 0; i < textViewTab.length; i++){
            	mDataMap.add(new ArrayList<String>());
            	for (int j = cpt; j < cpt+sizeDate; j++){
                	textViewTab[i][j] = (TextView) findViewById(textViewId[indexTextViewId].getResId());
                	indexTextViewId++;
                }
            	new AsyncDownloadTab(mDataMap.get(i), textViewTab[i]).execute(url, "choix", mVariable, "date", mDate[i]);
            }
    
    • Partager sur Facebook
    • Partager sur Twitter

    [Android] Problème size et index d'un tableau de tableau

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown