Android 将浮点值作为json传递:无效的int错误

Android 将浮点值作为json传递:无效的int错误,android,json,Android,Json,我有一个android程序,其中我从用户的EditText字段中获取浮点值作为输入,并将JSON格式的输入值发送到API。但是,当我单击“提交”按钮时,应用程序崩溃。应用程序可以很好地处理int值,但当我使用浮点或十进制值时,应用程序崩溃 错误行: login.put("NumberOfDays",txtLdays.getText().toString()); logcat显示的错误: java.lang.NumberFormatException: Invalid int: "1.2" 代

我有一个android程序,其中我从用户的EditText字段中获取浮点值作为输入,并将JSON格式的输入值发送到API。但是,当我单击“提交”按钮时,应用程序崩溃。应用程序可以很好地处理int值,但当我使用浮点或十进制值时,应用程序崩溃

错误行:

login.put("NumberOfDays",txtLdays.getText().toString());
logcat显示的错误:

java.lang.NumberFormatException: Invalid int: "1.2"
代码是

 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;

 import org.json.JSONObject;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;

import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;


public class LeaveApp extends Activity implements OnClickListener

{
     EditText txtDate ,txtLdays, txtLreasons;


     TextView txtDate1,txtEmp, txtBleave;

     ImageButton btnCalendar;
     Button btnSubmit; 
     private int mYear, mMonth, mDay;

        private Spinner s1;

       protected void onCreate(Bundle savedInstanceState)
       {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leave);

        txtLdays = (EditText) findViewById(R.id.etLdays);


        txtLreasons = (EditText) findViewById(R.id.etLreason);
        txtDate = (EditText) findViewById(R.id.etSdate);


        txtDate1= (TextView) findViewById(R.id.tvHidden);
        txtBleave= (TextView) findViewById(R.id.tvL);


        btnCalendar = (ImageButton) findViewById(R.id.imageButton1);
        btnSubmit = (Button) findViewById(R.id.btnLeave1);

        s1=(Spinner)findViewById(R.id.spinnerL);


        btnCalendar.setOnClickListener(this);
        btnSubmit.setOnClickListener(this);
        setCurrentDateOnView();
//      empid();
        addItemsOnSpinner1();

       }


       public void onClick(View v) 

          {                       
            //Calender ImageButton function

                if (v == btnCalendar) {

                    // Process to get Current Date
                    final Calendar c = Calendar.getInstance();
                    mYear = c.get(Calendar.YEAR);
                    mMonth = c.get(Calendar.MONTH);
                    mDay = c.get(Calendar.DAY_OF_MONTH);

                    // Launch Date Picker Dialog
                    DatePickerDialog dpd = new DatePickerDialog(this,
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                        int monthOfYear, int dayOfMonth) {
                                    // Display Selected date in textbox
                                    txtDate.setText(dayOfMonth + "-"
                                            + (monthOfYear + 1) + "-" + year);

                                }
                            }, mYear, mMonth, mDay);
                    dpd.show();
                }



                if (v == btnSubmit)
                {

                                     if(isOnline())
                        {

                    if(validate1())
                    {
                        if(balanceLeaves())
                        {



                    Bundle extras = getIntent().getExtras();
                      String strEmployeeID="";
                      if (extras != null)
                      {

                          String value = extras.getString("new_variable_name");
//                        Toast.makeText(getBaseContext(),  value, Toast.LENGTH_LONG).show();
                          strEmployeeID = value;
                      }
                      JSONObject login = new JSONObject();

                    final String SelectedLeave = s1.getSelectedItem().toString();                       

                try
                {
                login.put("EmployeeId", strEmployeeID); 
                login.put("Date",txtDate1.getText().toString());
                login.put("TypeLeave",SelectedLeave);
                login.put("BalanceLeaves",txtBleave.getText().toString());
                login.put("StartDate",txtDate.getText().toString());
                login.put("NumberOfDays",txtLdays.getText().toString());

                login.put("Reason",txtLreasons.getText().toString());

//          


                JSONObject finaldata = new JSONObject();
                finaldata.put("LeaveRequest", login);
                 Toast.makeText(getBaseContext(), finaldata.toString(),   Toast.LENGTH_LONG).show();                 

  }

如果需要浮点值而不是整数,请尝试使用Integer.parseInttxtLdays.getText.toString或Float.parseFloat。

您可以通过将输入乘以10来解决此问题。 1.2变为12。记住在API中除以10

float f = 52.92;
login.put("NumberOfDays", f);
似乎有效。

试试这个


login.putNumberOfDays,String.valuetxtLdays.getText

请详细说明这个答案好吗?1.2不是整数,因为它是十进制值。如果你乘以10,结果是12,这是一个有效的整数。然后你可以计算字符串,整数。我不确定这是你的实际问题,如果值是1.9怎么办?1.9和19有着巨大的差异。你真的认为这是一个聪明的想法吗?如果你能在API中将这个数字除以10,那么差别就不是问题了。您将返回原始浮点值。但是你必须控制APIDo,我对xml做了一些更改,但是没有一个答案是有效的。你能提供日志吗?这是我的错误。我的比较功能出了问题。