Преобразование строки в целое число, затем снова в строку - PullRequest
0 голосов
/ 31 мая 2019

Я работаю над проектом по разработке приложения для Android.Здесь я должен найти сумму между двумя числами, определенными как строки, а затем отобразить их в текстовом представлении.Но мое приложение падает.Ниже мой код.Это оптимально?

      String price=Place_View.prices[spinner1.getSelectedItemPosition()];
            String fare=Cars.SUVFare[spinner2.getSelectedItemPosition()];
            String result="";
            int calc1=Integer.parseInt(price);
            int calc2=Integer.parseInt(fare);
            int calc3=calc1+calc2;
            result=Integer.toString(calc3);
            Price.setText(result);

        }
    });

spinner1:

public class Place_View {
public static final String[] locName = {"Sivasagar", "Jorhat", "Tinsukia", "Mohanbari", "Pasighat", "Digboi", "Majuli"};


public static final String[] prices = {"2625.00","3200.00","2000.00","500.00","4000.00","2800.00","4000.00"};
}

spinner 2:

public class Cars {
             public static final String[] SUV = {"Mahindra XUV", "Renault Duster", "Hyundai Creta", "Nissan Terrano", "Maruti Suzuki Brezza"};
                 public static final String[] SUVFare={"1000","800","800","750","650"};
}

Теперь я должен добавить значения цен на строки и SUVFare, когдавыберите один из них и поместите их в цену TextView.Не знаю, как публиковать logcat, поэтому поместите классы, которые я сделал, на заказ.

Ответы [ 4 ]

0 голосов
/ 31 мая 2019

Новый ответ

Вы, вероятно, пытаетесь сделать что-то вроде этого:

String price = Place_View.prices[spinner1.getSelectedItemPosition()];
String fare = Cars.SUVFare[spinner2.getSelectedItemPosition()];
String result="";
float calc1=Float.parseFloat(price);   //Note: float
int calc2=Integer.parseInt(fare);
float calc3=calc1+calc2;               //Note: float
result=Float.toString(calc3);          //Note: Float
Price.setText(result);

Полный пример:

public class MainActivity extends AppCompatActivity {

    TextView Price;
    Spinner spinner1;
    Spinner spinner2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Price = findViewById(R.id.tvPrice);
        spinner1 = findViewById(R.id.spinner1);
        spinner2 = findViewById(R.id.spinner2);

        ArrayAdapter<String> adapterLocation = new ArrayAdapter<String>
                (this, android.R.layout.simple_spinner_item, Place_View.locName);

        adapterLocation.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner1.setAdapter(adapterLocation);

        ArrayAdapter<String> adapterCar = new ArrayAdapter<String>
                (this, android.R.layout.simple_spinner_item, Cars.SUV);

        adapterCar.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner2.setAdapter(adapterCar);

        spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                String price = Place_View.prices[spinner1.getSelectedItemPosition()];
                String fare = Cars.SUVFare[spinner2.getSelectedItemPosition()];
                String result="";
                float calc1=Float.parseFloat(price);
                int calc2=Integer.parseInt(fare);
                float calc3=calc1+calc2;
                result=Float.toString(calc3);
                Price.setText(result);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                String price = Place_View.prices[spinner1.getSelectedItemPosition()];
                String fare = Cars.SUVFare[spinner2.getSelectedItemPosition()];
                String result="";
                float calc1=Float.parseFloat(price);
                int calc2=Integer.parseInt(fare);
                float calc3=calc1+calc2;
                result=Float.toString(calc3);
                Price.setText(result);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }
}

Старый ответ

Как прокомментировал Быстрый ученик, мы могли бы быть более полезны, если вы опубликуете ошибку в своем журнале.

У меня есть пара вопросов по поводу вашего кода.

  1. Вы уверены, что хотите использовать:

    getSelectedItemPosition()
    

Поскольку это дает вам позицию нажатого элемента (0 для первогопункт, 1 для второго, и т. д.)

getItemAtPosition(position)

Выше функция даст вам значение в позиции нажатия.

Я не совсем понимаю, что делает эта строка

String price=Place_View.prices[spinner1.getSelectedItemPosition()];

Вы ссылаетесь на массив внутри представления?

Что такое цена?И вы ссылаетесь на это правильным образом?
0 голосов
/ 31 мая 2019

Пожалуйста, попробуйте это, чтобы преобразовать int в String в Android:

 int number = 78;
 String numberAsString = String.valueOf(number);
0 голосов
/ 31 мая 2019
     String price=Place_View.prices[spinner1.getSelectedItemPosition()];
    String fare=Cars.SUVFare[spinner2.getSelectedItemPosition()];
    String result="";
    int calc1 = 0;
    int calc2 = 0;
    try {
         calc1 = Integer.parseInt(price);
         calc2 = Integer.parseInt(fare);
    }catch(NumberFormatException e) {
    Log.e("Error","price or fare are not a Number in string format");
    }
    int calc3=calc1+calc2;
    result=String.valueOf(calc3);
    Price.setText(result);

Может быть значением String, которое вы извлекаете из счетчиков, является не число, а общая нечисловая строка, которая может давать сбой при анализе с помощью Integer.parseInt, просто добавьте перехват для NumberFormatException, чтобы избежать сбоя во время выполнения. и обработайте исключение в соответствии с вашим вариантом использования, показывая какое-то сообщение или что-то подходящее для вашего приложения.

0 голосов
/ 31 мая 2019

Попробуйте это:

result=String.valueOf(calc3);

Вместо

result=Integer.toString(calc3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...