Java 基于字符串ID求和列值并将结果设置为TextView

Java 基于字符串ID求和列值并将结果设置为TextView,java,android,android-sqlite,Java,Android,Android Sqlite,这个问题可能会重复出现,但在发布之前我一直在寻找解决方案,但我找不到解决方案。我试图根据用户传递的字符串执行列值总和,但我认为我在MainActivity.java或DatabaseAccess.java上做得不对,因为传递字符串时我的应用程序会崩溃 以下是我的DatabaseAccess.java方法: public String SumMoneyValues (String id){ Cursor cursor = database.rawQuery("SELECT SUM(" +

这个问题可能会重复出现,但在发布之前我一直在寻找解决方案,但我找不到解决方案。我试图根据用户传递的字符串执行列值总和,但我认为我在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个文本列和1个双列(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上调用calleeyValues方法的代码是什么?抱歉,这里是新手。

1-您不需要循环光标,因为您将从SUM函数中获得一个值。2-试试这个
total=String.valueOf(cursor.getDouble(0))发布错误日志。要调试并获取堆栈跟踪,请参阅*另外,使用像“%1%”这样的
会找到id为11121314151617的行。。。。。。。(即任何包含1的id)等等。@Fantômas nvm,我刚刚算出了!谢谢你的帮助!管理员可以关闭线程!;-)@芬多玛哈哈哈。。。完全同意!通过强迫我查看整个代码,你让我逐行调试它,顺便说一下,这让我找到了解决方案。再次感谢你!;-)1-您不需要循环光标,因为您将从SUM函数中获得一个值。2-试试这个
total=String.valueOf(cursor.getDouble(0))发布错误日志。要调试并获取堆栈跟踪,请参阅*另外,使用像“%1%”这样的
会找到id为11121314151617的行。。。。。。。(即任何包含1的id)等等。@Fantômas nvm,我刚刚算出了!谢谢你的帮助!管理员可以关闭线程!;-)@芬多玛哈哈哈。。。完全同意!通过强迫我查看整个代码,你让我逐行调试它,顺便说一下,这让我找到了解决方案。再次感谢你!;-)
@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);
    }