JohnRolston777 Ответов: 1

Андроид: рассчитать цену от выбранных элементов в ListView. Приложение вылетает, в общем чтение logcat деятельность:неверный поплавок: “”


-8
down vote
favorite
Im a noob in this so please bear with me. I have a listview of food and drinks with price then a proceed button which will show the order summary and total amount in other activity. After I click some items then click the proceed button, the app crash "Unfortunately appname has stopped." But when I click proceed button without clicking any items it displays the layout of the order summary. Therefore the error occurs in the passing of data. In logcat I noticed first Invalid float: "" I have no idea how to fix this.


Что я уже пробовал:

package edu.sti.snapchit;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.StringTokenizer;
import java.lang.String;


public class TotalsActivity extends AppCompatActivity{

MyApp mApp;
EditText et_summary;
TextView tv_total;
Button btn_code;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.totals);
    btn_code = (Button) findViewById(R.id.btn_code);
    mApp=((MyApp)getApplicationContext());
    et_summary = (EditText) findViewById(R.id.et_summary);
    tv_total = (TextView) findViewById(R.id.tv_total);
    et_summary.setText(mApp.getGlobalVarValue());
    String str = mApp.getGlobalVarValue();
    StringTokenizer st = new StringTokenizer(str,"Php");
    String test="";
    float total=0;
    int count =0;

    while(st.hasMoreElements())
    {
        test = st.nextElement().toString().substring(0,1);
        if(count>0)
            total += Float.parseFloat(test);
        count++;
    }

    tv_total.setText("Total:" + total+"");
    mApp.setGlobalClear();
    btn_code.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(TotalsActivity.this, GeneratorActivity.class);
            startActivity(intent);
        }
    });

}


public boolean isFloat(String input)
{

    try
    {
        Float.parseFloat(input);
        return true;
    }
    catch(Exception e)
    {
        return false;
    }
}

}



Код для пищевой активности, который содержит listview

пакет еду.СТИ.snapchit;

импорт android.content.Контекст;
импорт android.content.Намерение;
импорт базы данных android.Указатель;
импорт андроид.базы данных.базы данных SQLite.Ошибки;
импорт android.os.Bundle;
импорт android.support.v7.app.AlertDialog;
импорт android.support.v7.app.AppCompatActivity;
импорт android.view.View;
импорт android.widget.AdapterView;
импорт android.widget.Адаптер массива;
импорт android.widget.Кнопка;
импорт android.widget.элемент управления ListView;
импорт android.widget.Тост;

импорт java.util.HashMap;


public class NewFoodsActivity расширяет AppCompatActivity {

Приложение Mapp в;
private HashMap<String, Location> locations;
ListView listView1;
Ошибки БД;



@Ручная коррекция
protected void onCreate(Bundle savedInstanceState) {
супер.метод onCreate(savedInstanceState);
db=openOrCreateDatabase("Foods_DB", Context.MODE_PRIVATE, null);
setContentView(R. layout.new_foods);
местах = loadLocationData();
addListenerButton();
initializeUI();
}
общественного недействительными initializeUI()
{
String[] foodies = getFoodNames();
Адаптер массива в<строка&ГТ; переходник = новый адаптер массива в<строка&ГТ;
(это,android.R.layout.simple_list_item_1, гурманы);
listView1.setAdapter(адаптер);
}
частная строка[] getFoodNames()
{
String[] foodies = новая строка[locations.size()];
гурманы = locations.keySet().toArray(гурманы);
возвращение гурманов;
}
private void displaySelectedFoodInfo(строка foodName)
{

}
общественного недействительными showMessage(строка заголовка,строка сообщения)
{
AlertDialog.Построитель построитель = новый AlertDialog.Строитель(это);
строитель.setCancelable(правда);
builder.setTitle(название);
builder.setMessage(сообщение);
строитель.показать();
}
частная хранилище HashMap и Л;строка, расположение&ГТ;loadLocationData()
{
Хранилище HashMap и Л;строка, расположение&ГТ;места = новый HashMap и Л;строка, расположение&ГТ;();
Курсор c=db.rawQuery("SELECT * FROM table_foods order by food_id
asc",null);
Буфер StringBuffer = новый буфер StringBuffer();
в то время как(гр.moveToNext())
{
местах.пут("- "+С. метода getString(1).метод toString()+" [на PHP
"+С. метода getString(2).метод toString()+"]", новое место(целое число.parseInt(ок. метода getString(0)),гр.метода getString(1).метод toString(),двухместная.parseDouble(ок. метода getString(2))));

}
места возврата;
}
общественного недействительными addListenerButton()
{
окончательный контекст context = this;
Кнопки btnAdd = (кнопка)findViewById, чтобы найти(ИД Р..btn_add);
Кнопка btnProceed = (кнопка)findViewById(R. id.btnProceed);
Кнопка btn_drinks = (кнопка)findViewById(R. id.btn_drinks);
Btn_foods кнопка = (кнопка)findViewById, чтобы найти(ИД Р..btn_foods);
мыши listview1 = (элемент управления ListView) findViewById, чтобы найти(ИД Р..мыши listview1);
мыши listview1.setOnItemClickListener(
новый AdapterView.OnItemClickListener() {
@Ручная коррекция
public void onItemClick(AdapterView<?> Arg0, View view, int
позиция, длинный идентификатор) {
Объект o = listView1.getItemAtPosition(позиция);
Строка ручка = о.метод toString();

mApp=((MyApp)getApplicationContext());
mApp.setGlobalVarValue(ручка);
Toast.makeText(getApplicationContext(), "элемент добавлен" +
"-+ ручка, тост.LENGTH_LONG).показать();


}
}
);
btnAdd.setOnClickListener(новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(Посмотреть Посмотреть) {
Намерение намерение = новое намерение(контекст, NewAddFoods.class);

startActivity(намерение);
}
});
btnProceed.setOnClickListener(новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(Посмотреть Посмотреть) {
Намерение намерение = новое намерение(контекст, TotalsActivity.class);

startActivity(намерение);
}
});
btn_foods.setOnClickListener(новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(Посмотреть Посмотреть) {
Намерение намерение = новое намерение(контекст, NewFoodsActivity.class);

startActivity(намерение);
}
});
btn_drinks.setOnClickListener(новый вид.OnClickListener() {
@Ручная коррекция
общественного недействительными onclick(Посмотреть Посмотреть) {
Намерение намерение = новое намерение(контекст, NewDrinksActivity.class);

startActivity(намерение);
}
});
}
}

Это цветной красный текст в LOGCAT

02-20 04:37:23.624 1447-1447/edu.sti.snapchit E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.sti.snapchit/edu.sti.snapchit.TotalsActivity}: java.lang.NumberFormatException: Invalid float: "" at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) at android.app.ActivityThread.access$600(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NumberFormatException: Invalid float: "" at java.lang.StringToReal.invalidReal(StringToReal.java:63) at java.lang.StringToReal.parseFloat(StringToReal.java:289) at java.lang.Float.parseFloat(Float.java:300) at edu.sti.snapchit.TotalsActivity.onCreate(TotalsActivity.java:40) at android.app.Activity.performCreate(Activity.java:5133) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)

02-20 04:37:29.372 1494-1494/edu.sti.snapchit E/dalvikvm: не удалось найти класс ' android.graphics.drawable.RippleDrawable', на который ссылается метод android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering

02-20 04:37:30.592 1494-1494/edu.sti.snapchit E/OpenGLRenderer: получение MAX_TEXTURE_SIZE из GradienCache 02-20 04:37:30.616 1494-1494/edu.sti.snapchit E/OpenGLRenderer: получение MAX_TEXTURE_SIZE из кэшей::initConstraints()

Ps. Да, я действительно следовал учебнику youtube по созданию этого приложения. Приложение в vid работает отлично, в то время как мое выходит из строя. Либо я что-то пропустил, но проверил код примерно 10 раз, либо какие-то части видео были пропущены. Загрузчик не отвечал уже несколько дней :(

Я почти забыл, что может быть и другая причина, которая вызвала это. В TotalsActivity метод isFloat никогда не используется.

David Crow

Вам было бы лучше задать этот тип/длину вопроса на самом форуме Android. Форум вопросов и ответов предназначен для коротких вопросов и ответов, а не для длинных дампов кода.

David Crow

То NumberFormatException и этим все сказано. Ты звонишь parseFloat() с недопустимой строкой (например, пустой, возможно). Один шаг через код, чтобы узнать, почему.

1 Ответов

Рейтинг:
1

JohnRolston777

ОБНОВЛЕНИЕ
Я измените код в активности составляет в этот. но все равно ничего не изменилось. не повезло

package edu.sti.snapchit;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.StringTokenizer;
import java.lang.String;


public class TotalsActivity extends AppCompatActivity{

    MyApp mApp;
    EditText et_summary;
    TextView tv_total;
    Button btn_code;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.totals);
        btn_code = (Button) findViewById(R.id.btn_code);
        mApp=((MyApp)getApplicationContext());
        et_summary = (EditText) findViewById(R.id.et_summary);
        tv_total = (TextView) findViewById(R.id.tv_total);
        et_summary.setText(mApp.getGlobalVarValue());
        String str = mApp.getGlobalVarValue();
        StringTokenizer st = new StringTokenizer(str,"Php");
        String test="";
        float total=0;
        int count =0;

        while(st.hasMoreElements())
        {
            test = st.nextElement().toString().substring(0,1);
            if(count>0 && test !=null && !test.isEmpty()){
                total += Float.parseFloat(test);
            }
            count++;
        }

        tv_total.setText("Total:" + total+"");
        mApp.setGlobalClear();
        btn_code.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(TotalsActivity.this, GeneratorActivity.class);
                startActivity(intent);
            }
        });

    }


    public boolean isFloat(String input)
    {

        if(input.isEmpty() || input == null)
            return false;

        try
        {
            Float.parseFloat(input);
            return true;
        }
        catch(Exception e)
        {
            return false;
        }
    }

}