2016-03-16 2 views
2

Je dois ajouter des valeurs à mon sqlite à partir de la liste. Dans ma vue de liste, il y a deux textes d'édition et une vue de texte. Je veux juste obtenir la valeur de chaque texte d'édition et le multiplier vers la valeur de vue de texte correspondante. lorsque je cours l'application, je n'ai pas besoin d'entrer des données pour chaque texte d'édition. à cause de cela je me termine avec une "exception de format de nombre: invalide int". D'autres exemples, je peux comprendre que la multiplication sur la valeur nulle peut provoquer l'erreur. comment puis-je ignorer les textes d'édition contenant des valeurs nulles de l'itération? ceci est mon codenombre format exception invalide int

protected void InsertDb() { 
// TODO Auto-generated method stub 
DatabaseHelper databasecontroller = new DatabaseHelper(Orders.this); 
List<Map<String, String>> data = null; 
data = new ArrayList<Map<String, String>>(); 

    if(list != null){ 

     for(int i = 0; i< list.getChildCount();i++){ 

      View vie = list.getChildAt(i); 

      EditText ed1= (EditText) vie.findViewById(R.id.cases); 
      EditText ed2 = (EditText) vie.findViewById(R.id.pcs); 
      String qty = ed1.getText().toString(); 

      TextView tv = (TextView)findViewById(R.id.srp); 
      String imsrpv= tv.getText().toString(); 

      float srps = Float.valueOf(imsrpv); 
      int qtys = Integer.valueOf(qty); 
      float amts = srps * qtys; 
      String amount = Float.toString(amts); 

      datanum.put("A",qty); 
      datanum.put("B",ed2.getText().toString()); 
      datanum.put("L", amount); 

      Log.d("value of amnt",amount); 

      databasecontroller.entercustdetails(datanum); 
     } 

      } 
    Log.v("compleated", data.toString()); 
} 

Merci à l'avance ..

+0

http://stackoverflow.com/questions/10735679/how-to-convert-string-into-float-value-in-android – saeed

+0

Si je vous comprends de la bonne manière, vous n'avez pas de problème pour analyser une valeur valide Chaîne à flotter si la chaîne est composée de valeurs numériques/flottantes, wright? Vous voulez seulement être sûr que la valeur n'est pas nulle, n'est-ce pas? – Opiatefuchs

+0

presque. J'ai d'autres valeurs vides dans la liste.so lorsque j'essaie d'itérer sur la liste je veux juste sauter tous les textes d'édition non remplis entre eux.est-ce possible? – Bivin

Répondre

2

Vérifiez soit la valeur de retour de edittext est un nombre approprié ou il est null.if pas une valeur nulle est là, il peut donner exeception de numberformat. vous devez gérer cela. si les deux sont corrects, vous pouvez aussi vous

float srps=0.0; 
int qtys=0; 
try 
{ 
    srps = Float.valueOf(imsrpv); 
    qtys = Integer.valueOf(qty); 
} 
catch (NumberFormatException e) 
{ 
srps =//Default value you want; 
qtys =//Default value you want; 
} 

.. Espérons que cela fonctionne

+1

lorsque j'utilise les deux méthodes j'ai eu erreur.Mon texte d'édition réside dans une vue de liste, et la liste est un peu grande.Je ne veux pas entrer des valeurs à chaque texte d'édition .Je veux effectuer une multiplication uniquement sur les champs entrés. – Bivin

+0

si vous laissez vide un edittext, il donne une chaîne vide et donne une exception NumberFormatException. vous avez gérer cette exception. comme je édite ma réponse. – Ankur1994a

+0

merci, mais ma question est de savoir comment sauter les textes d'édition vierges de la liste. J'ai essayé différentes boucles mais je ne reçois que la première valeur calculée. – Bivin

1

Votre problème est comment vous avez analysé les valeurs. Pour plus d'explications:

parseFloat(), parseInt() retournera un type primitif de int et float et valueOf() renvoie un nouveau type de Integer et Float. En outre, parseInt(), parseFloat() reconnaîtra les signes plus et moins, valueOf() doesn't. C'est la différence entre ces deux types/méthodes. Votre problème semble être que la valeur est vide et vous pouvez simplement se débarrasser de ce par:

//set a default float and int 

float srps = 0.0; 
int qtys = 0; 

//now parse the values by checking if the strings are not null or empty 
if(imsrpv!=null&&!imsrpv.isEmpty()){ 

srps = Float.valueOf(imsrpv); 

} 

if(qty!=null&&!qty.isEmpty()){ 

qtys = Integer.valueOf(qty); 
} 

Comme je l'ai dit, si ces valeurs ont un signe plus ou moins et il est important pour vos besoins, vous devrait utiliser la méthode d'analyse. En outre, vous n'avez pas besoin d'un nouveau type Integer ou Float, donc plus correct utilise la méthode parse().

+0

Salut cette méthode a vraiment travaillé pour moi. Mais j'ai toujours un problème: lorsque je saisis la valeur et que je défile vers le bas, la même valeur apparaît automatiquement pour les autres entrées. et le calcul a lieu sur une autre valeur. Avez-vous une idée? – Bivin

+0

ok, mais c'est un autre problème. Je pense que le problème que vous avez demandé ici est résolu par la réponse. Le problème que vous venez de décrire est que ListViews recycle son contenu dès que le contenu est invisible.Pour cela, vous devez utiliser le modèle Viewholder et devrait faire une nouvelle question. Voir ici pour le modèle de viewholder: https://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html – Opiatefuchs