2017-08-07 3 views
-2
public class VitalCompare implements Comparator<VitalReportsDetails> { 
    @Override 
    public int compare(VitalReportsDetails vitalReportsDetails, VitalReportsDetails t1) { 
     int n1 = Integer.parseInt((vitalReportsDetails.getValue().equals("") ? "0" : vitalReportsDetails.getValue())); 

     int n2 = Integer.parseInt((t1.getValue().equals("")? "0" : t1.getValue())); 
     if (n1 >= n2) { 
      return 1; 
     } 
     return -1; 

    } 

} 

appeler comme ceci:comment résoudre java.lang.NumberFormatException: int non valide: ""

int min=Integer.parseInt(Collections.min(listOfData, new VitalCompare()).getValue()); 

Logcat

8-07 11:17:49.604 27972-27972/com.cognistrength.caregiver E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.cognistrength.caregiver, PID: 27972 
                      java.lang.NumberFormatException: Invalid int: "" 
                       at java.lang.Integer.invalidInt(Integer.java:138) 
                       at java.lang.Integer.parseInt(Integer.java:358) 
                       at java.lang.Integer.parseInt(Integer.java:334) 
                       at com.cognistrength.caregiver.adapters.VitalGraphAdapter.onBindViewHolder(VitalGraphAdapter.java:123) 
                       at com.cognistrength.caregiver.adapters.VitalGraphAdapter 
+1

Il suffit de lancer ceci ... pourquoi 'vitalReportsDetails.getValue()' a 'String' et non un' Integer'? –

+0

Le comparateur est utilisé pour trier les données, il ne les modifie pas. –

+0

De même, votre 'Comparator' doit renvoyer' 0' lorsque les deux valeurs sont identiques. Le vôtre ne le fait pas. –

Répondre

1

Peut-être que vous pouvez utiliser:

vitalReportsDetails.getValue().equals("") || vitalReportsDetails.isEmpty() ? "0" : vitalReportsDetails.getValue() 
1

java.lang.NumberFormatException: Invalid int: ""

NumberFormatException

pour indiquer que Jeté l'application a tenté de convertir une chaîne à l'un des types numériques, mais la chaîne n'a pas le format approprié.

 int n1 = Integer.parseInt((vitalReportsDetails.getValue().equals("") ? "0" : vitalReportsDetails.getValue())); 
    int n2 = Integer.parseInt((t1.getValue().equals("")? "0" : t1.getValue())); 

problème venant de n1 & n2. Debug les deux.

La déclaration [Either n1 or n2] jetterait NumberFormatException parce qu'il génère String Ce qui ne peut pas être analysé à int.

+0

Je suis en train de convertir chaîne en entier – Adevelopment

+0

@Adevelopment pour le test cas DEBUG s'il vous plaît –

+0

@Adevelopment Vous obtenez 'SPACE' –

0

Même problème est arrivé à moi, cela se produit lorsque la chaîne est sous la forme d'Float ou Double ou comme autre forme autre que nombre cette erreur jette si elle est en forme de double ou flotteur essayer comme ci-dessous la méthode

float floatstring = FLoat.parseFloat("your_string"); 
    //then 
    int int1= (int) Math.round(floatstring); 

pour Double

double doublestring = Double.parseDouble("100.22"); 
     //then 
     int int2= (int) Math.round(doublestring); 
+0

Je reçois la chaîne que nous devons Convertir en int – Adevelopment

+0

Oui, d'abord convertir votre chaîne pour flotter ou doubler, puis le convertir en int. Voir le code ci-dessus. –

+0

J'ai modifié la réponse revérifier maintenant –

3

Vous obtenez "" parce que la valeur est la valeur minimale dans cette liste (Votre comparateur a dit cela). Il suffit de l'appeler String temp = Collections.min(listOfData, new VitalCompare()).getValue(); int min = Integer.parseInt(temp.equals("") ? "0" : temp);