2017-04-21 2 views
0

J'ai une application entièrement opérationnelle qui accepte l'entrée de l'utilisateur et l'enregistre dans une base de données. En cliquant sur un bouton "log", l'information est affichée dans une liste. J'ai créé une boucle for qui conserve un total cumulé de l'une de mes colonnes. Le nom de la colonne est "grandTotal", qui est un total de conseils que j'ai fait pour la nuit. Tout fonctionnait bien jusqu'à ce que je clique accidentellement sur le bouton de sauvegarde sans entrer quoi que ce soit, et maintenant il s'est écrasé, et je n'arrive pas à trouver un moyen de contourner le problème. Toute aide serait appréciée! Mon code est le suivant:Fermeture de l'application Android lors de la saisie des valeurs dans la base de données

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (inflater == null) 
     inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.contact_entry, null); 

    TextView name= (TextView) convertView.findViewById(R.id.contactName); 
    TextView contact = (TextView) convertView.findViewById(R.id.contact); 
    TextView address = (TextView) convertView.findViewById(R.id.addressConverted); 
    TextView orderTotal = (TextView) convertView.findViewById(R.id.orderTotalConverted); 
    TextView amountReceived = (TextView) convertView.findViewById(R.id.amountReceivedConverted); 
    TextView tip = (TextView) convertView.findViewById(R.id.tipConverted); 
    TextView mileage = (TextView) convertView.findViewById(R.id.mileageConverted); 
    TextView grandTotal = (TextView) convertView.findViewById(R.id.grandTotalConverted); 
    Button delete = (Button) convertView.findViewById(R.id.delete); 

    PhoneBook list = contactList.get(position); 

    name.setText(list.getName()); 
    contact.setText(list.getPhoneNumber()); 
    address.setText(list.getAddress()); 
    orderTotal.setText(list.getOrderTotal()); 
    amountReceived.setText(list.getAmountReceived()); 
    tip.setText(list.getTip()); 
    mileage.setText(list.getMileage()); 
    grandTotal.setText(list.getGrandTotal()); 
    delete.setOnClickListener(new ListItemClickListener(position, list)); 


    TextView deliveryNumber = (TextView) convertView.findViewById(R.id.deliveryNum); 
    deliveryNumber.setText("Delivery # " + (position + 1)); 

    TextView runningTotal = (TextView) convertView.findViewById(R.id.runningTotal); 

    float sum = 0; 
    for (int i = 0; i <= position; i++) 
    { 
     sum = Float.valueOf(list.getGrandTotal()) + sum; 
    } 
    runningTotal.setText("Running Total: " + sum); 

    return convertView; 
} 

L'erreur que je reçois est de cette ligne de code dans ma boucle:

sum = Float.valueOf(list.getGrandTotal()) + sum; 

Comme je l'ai dit, l'application est en cours d'exécution grande aussi longtemps que je était en train d'enregistrer des données dans la base de données, mais quand j'ai sauvé (rien), il a fini par s'écraser et n'a pas fonctionné depuis.

L'erreur logcat Je reçois est:

FATAL EXCEPTION: main 
                       Process: com.example.boley.databaseexample, PID: 23988 
                       java.lang.NumberFormatException: Invalid float: "" 
                        at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                        at java.lang.StringToReal.parseFloat(StringToReal.java:308) 
                        at java.lang.Float.parseFloat(Float.java:306) 
                        at java.lang.Float.valueOf(Float.java:343) 
                        at com.example.boley.databaseexample.PhonebookAdapter.getView(PhonebookAdapter.java:86) 
                        at android.widget.AbsListView.obtainView(AbsListView.java:2929) 
                        at android.widget.ListView.measureHeightOfChildren(ListView.java:1305) 
                        at android.widget.ListView.onMeasure(ListView.java:1212) 
                        at android.view.View.measure(View.java:20158) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
                        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                        at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1111) 
                        at android.widget.LinearLayout.onMeasure(LinearLayout.java:631) 
                        at android.view.View.measure(View.java:20158) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                        at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
                        at android.view.View.measure(View.java:20158) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
                        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747) 
                        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629) 
                        at android.view.View.measure(View.java:20158) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                        at android.view.View.measure(View.java:20158) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
                        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
                        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747) 
                        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629) 
                        at android.view.View.measure(View.java:20158) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                        at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3158) 
                        at android.view.View.measure(View.java:20158) 
                        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2644) 
                        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1599) 
                        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1891) 
                        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1487) 
                        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7467) 
                        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920) 
                        at android.view.Choreographer.doCallbacks(Choreographer.java:695) 
                        at android.view.Choreographer.doFrame(Choreographer.java:631) 
                        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906) 
                        at android.os.Handler.handleCallback(Handler.java:739) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:158) 
                        at android.app.ActivityThread.main(ActivityThread.java:7224) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Peut-être que je vais devoir savoir où ma base de données est en cours d'enregistrement et de supprimer l'entrée que je accidentellement sauvé et le supprimer. Et à partir de maintenant, assurez-vous simplement que je suis en train d'économiser des valeurs, mais s'il y a un moyen de le réparer, j'apprécierais certainement les connaissances.

+0

S'il vous plaît lire une exception ... Il est explicite. – Selvin

Répondre

1

quand je sauvé (rien), il a fini par se briser

donc je pense que votre list.getGrandTotal() n'a pas de valeur ou a une chaîne vide et provoque la NumberFormatException

vérifier avant analyser dans Float:

String value = list.getGrandTotal(); 
if (value != null && value.length() > 0) { 
    sum = Float.valueOf(value) + sum; 
    } 
+0

Lorsque j'insère le code ci-dessus dans ma boucle for, pour une raison quelconque, les totaux ne sont pas calculés correctement. J'ai essayé de mettre 3 entrées dans ma base de données avec des totaux de 8,75, 9,06 et 3,75. Et le résultat pour les totaux cumulés pour chacun était 8,75, 18,12 et 11,25. Il semble que les valeurs sont multipliées par le numéro de position dans la base de données. –

+0

dans le précédent le total montrant ok ..? – rafsanahmad007

+0

essayez de mettre 'String value = list.getGrandTotal();' en dehors de pour la boucle .. – rafsanahmad007