2016-07-12 11 views
-5

Ich integriere Citrus Wallet in meiner Firma App und bin auf den folgenden Fehler fest.Verursacht von: java.lang.NumberFormatException: Invalid double: "[" 5.0 "," 5.0 "]"

der Stack-Trace:

java.lang.RuntimeException: An error occured while executing doInBackground() 

                     at   android.os.AsyncTask$3.done(AsyncTask.java:304) 
                    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
                    at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
                    at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
                    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                    at java.lang.Thread.run(Thread.java:818) 
                    Caused by: java.lang.NumberFormatException: Invalid double: "["5.0","5.0"]" 
                    at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                    at java.lang.StringToReal.initialParse(StringToReal.java:164) 
                    at java.lang.StringToReal.parseDouble(StringToReal.java:282) 
                    at java.lang.Double.parseDouble(Double.java:301) 
                    at com.citrus.sdk.classes.Amount.getValueAsDouble(Amount.java:65) 
                    at com.citrus.sdk.payment.PaymentBill.<init>(PaymentBill.java:90) 
                    at com.citrus.sdk.payment.PaymentBill.fromJSON(PaymentBill.java:261) 
                    at com.citrus.sdk.GetJSONBill.doInBackground(GetJSONBill.java:70) 
                    at com.citrus.sdk.GetJSONBill.doInBackground(GetJSONBill.java:22) 
                    at android.os.AsyncTask$2.call(AsyncTask.java:292) 
                    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
                    at java.lang.Thread.run(Thread.java:818)  

Dies ist der Java-Code. Der Fehler tritt auf, nachdem Ja im Dialogfeld geklickt wird:

public class FragmentWallet extends DialogFragment implements View.OnClickListener { 

private Context mContext; 
private int balance = 1200; 
Button proceed; 
TextView textView; 
TextView log; 
TextView user_bal; 
CitrusClient citrusClient; 
Message text; 
Amount amount = new Amount("5.0"); 
private String BILL_URL = "my_url" 
private WalletFragmentListener mListener; 
String msg; 

public FragmentWallet() { 
} 

public FragmentWallet(Context mContext) { 
    this.mContext = mContext; 
} 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.wallet_screen, container, false); 

    textView = (TextView) rootView.findViewById(R.id.user_email); 
    log = (TextView) rootView.findViewById(R.id.logout); 
    user_bal=(TextView) rootView.findViewById(R.id.user_balance); 

    proceed = (Button) rootView.findViewById(R.id.proceed_citrus); 

    msg = PaymentDialogFragment.getCitrusClientInstance().getUserEmailId(); 

    proceed.setOnClickListener(this); 
    log.setOnClickListener(this); 
    textView.setText(msg); 

    return rootView; 

} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.proceed_citrus: 
      onCreateDialog(); 
      break; 
     case R.id.logout: 
      onLogout(); 
      break; 
    } 
} 

public void onCreateDialog() { 
    AlertDialog.Builder builder1 = new AlertDialog.Builder(mContext); 
    builder1.setMessage("Are you sure you want to proceed?"); 
    builder1.setCancelable(true); 

    builder1.setPositiveButton(
      "Yes", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        //dialog.cancel(); 
        payUsingNewCash(); 
       } 
      }); 

    builder1.setNegativeButton(
      "No", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 

    AlertDialog alert11 = builder1.create(); 
    alert11.show(); 

} 

private void payUsingNewCash() { 
    Log.d("inside", "payUsingNewCash"); 

    checkBalance(); 

} 

private void checkBalance() { 
    Log.d("inside", "payUsingNewCash"); 

    PaymentDialogFragment.getCitrusClientInstance().getBalance(new Callback<Amount>() { 
     @Override 
     public void success(Amount amount) { 
      //get balance amount . for now balance is hardcoded to 1200 
      double bal=(Double)amount.getValueAsDouble(); 
      user_bal.setText("Your current balance is Rs."+bal); 
      if (bal >50) { 
       Toast.makeText(mContext,"balance is "+bal, Toast.LENGTH_LONG).show(); 
       //proceed with payment 
       proceedWithPayment(); 
       Log.d("inside", "payUsingNewCash"); 
      } else { 
       LoadMoney loadMoney=new LoadMoney(mContext); 
       FragmentManager fm=getFragmentManager(); 
       loadMoney.show(fm,null); 
      } 
     } 

     @Override 
     public void error(CitrusError error) { 
      Toast.makeText(mContext,"balance is not available. Please try again",Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

public void proceedWithPayment() { 
    // Toast.makeText(mContext,"balance is not available. Please try again",Toast.LENGTH_LONG).show(); 
    Log.d("TAG","inside Proceed"); 
    try { 
     Log.d("TAG","inside try"); 

     PaymentDialogFragment.getCitrusClientInstance().prepaidPay(new PaymentType.CitrusCash(amount,BILL_URL),new Callback<PaymentResponse>() { 


      @Override 
      public void success(PaymentResponse paymentResponse) { 
       Log.d("TAG","inside success"); 
       Toast.makeText(mContext,"Successful",Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void error(CitrusError citrusError) { 
       Log.d("TAG", citrusError.getMessage()); 
       Toast.makeText(mContext,"Not successful.",Toast.LENGTH_LONG).show(); 

      } 
     });Log.d("TAG","++"); 
    } catch (CitrusException e) { 
     Log.d("Tag",e.toString()); 
     e.printStackTrace(); 
    } 
    } 

public void onLogout(){ 
    getDialog().dismiss(); 
    PaymentDialogFragment.getCitrusClientInstance().signOut(new Callback<CitrusResponse>() 
    { 
     @Override 
     public void success(CitrusResponse citrusResponse) { 
      UserManagementFragment userManagementFragment = new UserManagementFragment(mContext); 
      FragmentManager fm=getFragmentManager(); 
      userManagementFragment.show(fm,null); 
     } 

     @Override 
     public void error(CitrusError error) { 

     } 
    }); 
} 
} 

Die Methode Amount.getValueAsDouble():

public double getValueAsDouble() throws NumberFormatException { 
    double value = 0.0D; 
    if(!TextUtils.isEmpty(this.value)) { 
     value = Double.parseDouble(this.value); 
    } 

    return value; 
} 

Die gesamte Menge Klasse:

public class Amount implements Parcelable { 
private final String value; 
private final String currency; 
public static final Creator<Amount> CREATOR = new Creator() { 
    public Amount createFromParcel(Parcel source) { 
     return new Amount(source, null); 
    } 

    public Amount[] newArray(int size) { 
     return new Amount[size]; 
    } 
}; 

public Amount(String value) { 
    this.value = value; 
    this.currency = "INR"; 
} 

public Amount(String value, String currency) { 
    this.value = value; 
    this.currency = currency; 
} 

public String getValue() { 
    return !TextUtils.isEmpty(this.value)?this.value.replaceFirst("^0+(?!$)", ""):this.value; 
} 

public String getCurrency() { 
    return this.currency; 
} 

public String getValueAsFormattedDouble(String format) throws NumberFormatException { 
    DecimalFormat df = new DecimalFormat(format); 
    return df.format(this.getValueAsDouble()); 
} 

public double getValueAsDouble() throws NumberFormatException { 
    double value = 0.0D; 
    if(!TextUtils.isEmpty(this.value)) { 
     value = Double.parseDouble(this.value); 
    } 

    return value; 
} 

public static Amount fromJSON(String response) { 
    Amount amount = null; 
    JSONObject jsonObject = null; 
    if(!TextUtils.isEmpty(response)) { 
     try { 
      jsonObject = new JSONObject(response); 
      amount = fromJSONObject(jsonObject); 
     } catch (JSONException var4) { 
      var4.printStackTrace(); 
     } 
    } 

    return amount; 
} 

public static Amount fromJSONObject(JSONObject amountObject) { 
    Amount amount = null; 
    if(amountObject != null) { 
     String value = amountObject.optString("value"); 
     String currency = amountObject.optString("currency"); 
     if(!TextUtils.isEmpty(value) && !TextUtils.isEmpty(currency)) { 
      amount = new Amount(value, currency); 
     } 
    } 

    return amount; 
} 

public static String toJSON(Amount amount) { 
    JSONObject billObject = toJSONObject(amount); 
    return billObject != null?billObject.toString():null; 
} 

public static JSONObject toJSONObject(Amount amount) { 
    JSONObject billObject = null; 
    if(amount != null) { 
     try { 
      billObject = new JSONObject(); 
      billObject.put("value", amount.value); 
      billObject.put("currency", amount.currency); 
     } catch (JSONException var3) { 
      var3.printStackTrace(); 
     } 
    } 

    return billObject; 
} 

public int describeContents() { 
    return 0; 
} 

public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(this.value); 
    dest.writeString(this.currency); 
} 

private Amount(Parcel in) { 
    this.value = in.readString(); 
    this.currency = in.readString(); 
} 

public String toString() { 
    return "Amount{value=\'" + this.value + '\'' + ", currency=\'" + this.currency + '\'' + '}'; 
} 

public int hashCode() { 
    return super.hashCode(); 
} 

public boolean equals(Object o) { 
    if(this == o) { 
     return true; 
    } else if(!(o instanceof Amount)) { 
     return false; 
    } else { 
     Amount amount = (Amount)o; 
     return this.getValueAsDouble() == amount.getValueAsDouble() && this.currency.equalsIgnoreCase(amount.getCurrency()); 
    } 
} 
} 

Jede Hilfe wird sehr geschätzt

+1

Bitte geben Sie Ihren Code für 'Account.getValueAsDouble()' – Zircon

+5

Der Fehler ist ziemlich selbsterklärend, irgendwo in Ihrem Code versuchen Sie, die Zeichenfolge '" [5.0, 5.0] "in ein Doppel zu analysieren. Es wird höchstwahrscheinlich durch die Zeile 'double bal = (Double) amount.getValueAsDouble();' verursacht, so wie es @Zircon vorgeschlagen hat, zeigen Sie uns Ihren Code für 'getValueAsDouble()'. – explv

+0

Können Sie uns den Code zeigen, der in der Stapelüberwachung angezeigt wird, anstatt Code, der den Fehler nicht erzeugt hat? –

Antwort

0

Scheint Sie in Ihrem JSON Array von Doppel zu bekommen? Habe ich recht?

Überprüfen Sie bitte, ob Ihr Json korrekt ist und ob das Array als Doppelfeld statt als ein Doppelwert analysiert wird.