首页 > 解决方案 > 根据字符串 ID 求和列值并将结果设置为 TextView

问题描述

这个问题可能会重复出现,但我在发布之前已经寻找了解决方案,但我找不到解决方案。我正在尝试根据用户传递的字符串执行列值的总和,但我认为我在MainActivity.javaDatabaseAccess.java上做错了,因为我的应用程序在传递字符串时崩溃。

这是我的 DatabaseAccess.java 方法:

public String SumMoneyValues (String id){
    Cursor cursor = database.rawQuery("SELECT SUM(" + valueColumn + ") as Total FROM " + tableName + " where " + idColumn + " like ?", new String [] { "%" + id + "%" }, null);
    String total = "";
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        total = String.valueOf(cursor.getDouble(cursor.getColumnIndex("Total")));
        cursor.moveToNext();
    }
    cursor.close();
    return total;
}

我正在使用具有 5 个 TEXT 列和 1 个 DOUBLE 列(valueColumn)的外部数据库。在我的 MainActivity 上,我设置了一个 TextView 并对其进行了初始化。这是我的数据库列:

private static String idColumn = "tag_id";
private static String firstnameColumn = "first_name";
private static String lastnameColumn = "last_name";
private static String phoneColumn = "phone";
private static String addressColumn = "address";
private static String emailColumn = "email";
private static String valueColumn = "valor";

顺便说一句,我的搜索方法运行良好:

public List<Contact> getTagDataById(String id) {
    List<Contact> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("select * from " + tableName + " where " + idColumn + " like ?", new String[] { "%" + id + "%" });
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        Contact contact = new Contact();
        contact.setFirstName(cursor.getString(0));
        contact.setLastName(cursor.getString(1));
        contact.setPhone(cursor.getString(2));
        contact.setEmail(cursor.getString(3));
        contact.setTagId(cursor.getString(4));
        contact.setValor(cursor.getString(5));
        list.add(contact);
        cursor.moveToNext();
    }
    cursor.close();
    return list;
}

这是我试图在我的 MainActivity 上实现的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(R.layout.activity_main);
    initData();
    initView();
    initClick();

    // Find the GUI components
    this.databaseAccess = DatabaseAccess.getInstance(getApplicationContext());}

private String SumMoneyValues (String str) {
    databaseAccess.open();
    String soma = databaseAccess.SumMoneyValues(str);
    databaseAccess.close();
    return soma;
}

private void initView() { 
    swTotalSum = (TextView)findViewById(R.id.swTotalSum);
    initListView();
}

...

String testeSoma = SumMoneyValues(epctag);
    if (testeSoma != null){
        swTotalSum.setText(testeSoma);
    } else{
        epcTTS.speak("Something went wrong!", TextToSpeech.QUEUE_FLUSH, null);
    }

在我的 MainActivity 上调用SumMoneyValues方法的代码是什么?对不起,这里是新手。

标签: javaandroidandroid-sqlite

解决方案


推荐阅读