2012-01-17 2 views
-2

Je récupère et affiche la liste de texte en fonction du bouton/de la catégorie cliqué/sélectionné. J'essaie également de laisser l'utilisateur entrer le texte et que cela sera sauvegardé dans la base de données et sera affiché au bas de tout le texte courant de la catégorie active/sélectionnée qui est affichée. Mais j'ai un problème J'ai essayé d'enlever toutes les vues enfant des vues parents en obtenant le nombre d'éléments de la base de données puis j'ai essayé d'insérer les données dans la base de données et enfin j'essaye d'obtenir tous les éléments après avoir inséré un nouveau et construire Tout en faisant cela, je reçois ArrayOutOfBound Exception.Je ne sais pas pourquoi je reçois cette erreur et aussi si c'est un moyen efficace d'accomplir cela.Veuillez me guider.Impossible d'afficher les valeurs mises à jour à partir de la base de données dans android

public class Independent extends Activity implements OnClickListener { 
public TextView[] mainText; 
public LinearLayout[] textLayout; 
public LinearLayout textLayoutContainer; 
public ScrollView scrollView; 
EditText tv; 
int x, y, z; 
public String catagory; 

public Independent() { 
    catagory = ""; 
}// End of Constructor 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.catagories_list); 
    textLayoutContainer = (LinearLayout) findViewById(R.id.text_linearlayout); 
    scrollView = (ScrollView) findViewById(R.id.scrollView1); 
    Button addTextButton = (Button) findViewById(R.id.b_add); 
    Button editTextButton = (Button) findViewById(R.id.b_edit); 
    Button deleteTextButton = (Button) findViewById(R.id.b_delete); 
    addTextButton.setOnClickListener(this); 
    editTextButton.setOnClickListener(this); 
    deleteTextButton.setOnClickListener(this); 
    ImageButton generalButton = (ImageButton) findViewById(R.id.imageButton1); 
    ImageButton foodButton = (ImageButton) findViewById(R.id.imageButton2); 
    generalButton.setOnClickListener(this); 
    foodButton.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.imageButton1: 
     if (catagory == "General") { 
      Dialog gend = new Dialog(Independent.this); 
      gend.setTitle("Message"); 
      TextView tv2 = new TextView(Independent.this); 
      tv2.setText("General catagory is already selected."); 
      gend.setContentView(tv2); 
      gend.setCancelable(true); 
      gend.show(); 
     } else { 
      catagory = "General"; 
      IndependentDB genData = IndependentDB.getInstance(); 
      genData.open(this); 
      ArrayList<TextHolder> genList = new ArrayList<TextHolder>(); 
      genList = genData.getAllTextFromGenT(); 
      genData.close(); 
      x = genList.size(); 
      String xstr = new StringBuilder().append(x).toString(); 
      System.out.println(xstr); 
      mainText = new TextView[x]; 
      textLayout = new LinearLayout[x]; 
      if (!genList.isEmpty()) { 
       for (int i = 0; i < x; i++) { 
        TextHolder firstOne = genList.get(i); 
        String text = firstOne.getText(); 
        System.out.println("2"); 
        mainText[i] = new TextView(this); 
        System.out.println("3"); 
        mainText[i].setId(i); 
        System.out.println("4"); 
        mainText[i].setText("Text"); 
        System.out.println("5"); 
        mainText[i].setLayoutParams(new LayoutParams(
          LayoutParams.WRAP_CONTENT, 
          LayoutParams.WRAP_CONTENT)); 
        System.out.println("6"); 
        mainText[i].setTextSize(20); 
        System.out.println("7"); 
        mainText[i].setGravity(Gravity.CENTER); 
        System.out.println("8"); 
        mainText[i].setText(text); 
        System.out.println("9"); 
        textLayout[i] = new LinearLayout(this); 
        System.out.println("10"); 
        textLayout[i].setId(i); 
        System.out.println("11"); 
        textLayout[i].setLayoutParams(new LayoutParams(
          LayoutParams.FILL_PARENT, 
          LayoutParams.WRAP_CONTENT)); 
        System.out.println("12"); 
        textLayout[i].setGravity(Gravity.CENTER); 
        System.out.println("13"); 
        textLayout[i].addView(mainText[i]); 
        System.out.println("14"); 
        textLayoutContainer.addView(textLayout[i]); 
        System.out.println("15"); 
       } 
      } 
     } 
     break; 
case R.id.b_add: 
    textLayoutContainer.removeAllViews(); 
     tv = new EditText(this); 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("Please eneter the text below."); 
     builder.setCancelable(true); 
     builder.setView(tv); 
     builder.setPositiveButton("Save", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         boolean Success = true; 
         Editable ttv = tv.getText(); 
         final String stringttv = new StringBuilder() 
           .append(ttv).toString(); 
         if (stringttv == "") { 
          Dialog mTag = new Dialog(Independent.this); 
          mTag.setTitle("Missing Text"); 
          TextView tv2 = new TextView(Independent.this); 
          tv2.setText("Please enter the text you would like to add."); 
          mTag.setContentView(tv2); 
          mTag.setCancelable(true); 
          mTag.show(); 
         } else { 
          try { 
           if (catagory == "General") { 
            //Clearing View 
            IndependentDB idb0 = IndependentDB 
              .getInstance(); 
            idb0.open(Independent.this); 
            ArrayList<TextHolder> gentList = new ArrayList<TextHolder>(); 
            gentList = idb0.getAllTextFromGenT(); 
            int v = gentList.size(); 
            for (int i = 0; i < v; i++) { 
             textLayout[i].removeAllViews(); 
            }// End of for loop 
            idb0.close(); 

            //Inserting new text 
            IndependentDB idb1 = IndependentDB 
              .getInstance(); 
            idb1.open(Independent.this); 
            idb1.insertEventInGenT(stringttv); 
            idb1.close(); 

            //Getting the updated DB values/text 
            IndependentDB idb2 = IndependentDB 
            .getInstance(); 
            idb2.open(Independent.this); 
            //iddb.insertEventInGenT(stringttv); 
            ArrayList<TextHolder> genTList = new ArrayList<TextHolder>(); 
            genTList = idb2.getAllTextFromGenT(); 
            System.out.println("check1"); 
            int w = genTList.size(); 
            System.out.println("check2"); 
            if (!genTList.isEmpty()) { 
             for (int i = 0; i < w ; i++) { 
              TextHolder firstOne = genTList 
                .get(i); 
              System.out.println("check3"); 
              String text = firstOne 
                .getText(); 
              System.out.println("check4"); 
              mainText[i] = new TextView(
                Independent.this); 
              mainText[i].setId(i); 
              mainText[i].setText("Text"); 
              mainText[i] 
                .setLayoutParams(new LayoutParams(
                  LayoutParams.WRAP_CONTENT, 
                  LayoutParams.WRAP_CONTENT)); 
              mainText[i].setTextSize(20); 
              mainText[i] 
                .setGravity(Gravity.CENTER); 
              mainText[i].setText(text); 
              textLayout[i] = new LinearLayout(
                Independent.this); 
              textLayout[i].setId(i); 
              textLayout[i] 
                .setLayoutParams(new LayoutParams(
                  LayoutParams.FILL_PARENT, 
                  LayoutParams.WRAP_CONTENT)); 
              textLayout[i] 
                .setGravity(Gravity.CENTER); 
              textLayout[i] 
                .addView(mainText[i]); 
              textLayoutContainer 
                .addView(textLayout[i]); 
             }// End of for loop 
            }// End of If statement 
            idb2.close(); 
           } 
}catch (Exception e) { 
           Success = false; 
           String error = e.toString(); 
           Dialog d = new Dialog(Independent.this); 
           d.setTitle("Error"); 
           TextView tv = new TextView(Independent.this); 
           tv.setText(error); 
           d.setContentView(tv); 
           d.show(); 
          } finally { 
          } 
         } 
        } 
       }); 
     builder.setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
     break; 

    case R.id.b_edit: 
     break; 

    case R.id.b_delete: 
     break; 
    } 
} 

}

Désolé pour ne pas afficher la trace de la pile before.Now j'ai supprimé la ligne de code suivante:

IndependentDB idb0 = IndependentDB 
              .getInstance(); 
            idb0.open(Independent.this); 
            ArrayList<TextHolder> gentList = new ArrayList<TextHolder>(); 
            gentList = idb0.getAllTextFromGenT(); 
            int v = gentList.size(); 
            for (int i = 0; i < v; i++) { 
             textLayout[i].removeAllViews(); 
            }// End of for loop 
            idb0.close(); 

Je ne reçois pas ArrayOutOfBound Exception plus mais je suis encore pas en mesure de récupérer la dernière valeur insérée.

Après les quatre dernière ligne de messages LogCat où le message de trace de la pile a montré:

01-17 14:48:55.617: I/System.out(408): check3 
01-17 14:48:55.617: I/System.out(408): check4 
01-17 14:48:55.628: I/System.out(408): null null  [Ljava.lang.StackTraceElement;@44f9cd28 
01-17 14:48:56.309: D/dalvikvm(304): GC_EXPLICIT freed 208 objects/9952 bytes in 766ms 
01-17 14:49:05.149: D/dalvikvm(134): GC_EXPLICIT freed 719 objects/40696 bytes in 77ms 
+3

Donc, vous avez une exception, et nous sommes supposés deviner où, dans ce morceau de code géant, ça arrive? Au moins fournir la trace de la pile et nous dire quelle ligne dans le code est la ligne qui provoque l'exception. –

+0

désolé de ne pas poster trace de la pile avant.J'ai édité ma question et ajouté la trace de la pile aussi j'ai fait quelques changements et l'exception ArrayIndexOutOfBound est parti mais je ne suis toujours pas capable de récupérer et afficher la dernière valeur ajoutée. – Viking

Répondre

0

résolu ce problème. J'insère la nouvelle valeur ajoutée dans la base de données mais ne dépend pas de la base de données pour la récupérer et l'afficher mais j'ai créé une nouvelle textview et je reçois directement le texte d'edittext et le place dans la nouvelle vue que j'ai créée et affichée Cela a fonctionné :)

Questions connexes