首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误无法从CursorWindow中读取0,col-1行。在访问游标数据之前,请确保游标已正确初始化。

错误无法从CursorWindow中读取0,col-1行。在访问游标数据之前,请确保游标已正确初始化。
EN

Stack Overflow用户
提问于 2020-03-04 03:33:36
回答 1查看 161关注 0票数 0

我搞错了

无法从CursorWindow中读取0,col-1行。在访问游标数据之前,请确保游标已正确初始化。

我什么都试过了,但似乎什么都没有用。

在运行项目之后,我的应用程序停止了这个方法:

代码语言:javascript
复制
getPriceDataByNameProductAndSupplier

代码:

代码语言:javascript
复制
/*_____________________________ My query _______________________*/
public double getPriceDataByNameProductAndSupplier(int product_id,int supplier_id)
{

Product product=null;
double  Price_for_every_one=0.0;
String query= "select max(price_for_every_one) from product_Multi_Value where _id ="+ product_id +" and _idSupplier="+ supplier_id ;
Cursor cursor = sqLiteDatabase.rawQuery(query,null/*ew String[] {String.valueOf(product_id),
        String.valueOf(supplier_id)}*/); /*("product_Multi_Value",
                                     new String[] {"MAX(price_for_every_one) AS MAX"},"_id=? and _idSupplier=?",
                                     new String[] {String.valueOf(product_id),String.valueOf(supplier_id)},
                                     null,null,null)*/;// cursor.moveToFirst();
if (cursor !=null)
{
    cursor.moveToFirst();
    do
    {
        Price_for_every_one = cursor.getDouble(cursor.getColumnIndexOrThrow("price_for_every_one") );
        product = new Product(Price_for_every_one);
    }
    while (cursor.moveToNext());
}
return Price_for_every_one;
}

表创建

/________________________ (我的表)_exp_date文本不为空,quantity_package实非空,number_quantity_ber_package整数不为空,total_of_quantity实非空,price_for_Allquantity实非空,price_for_every_one实非空,price_for_sales实,_id整数不为空,idSupplier整数不为空,外键( _idSupplier)引用供应商(_id),外键(_id)参考产品(_id);";

错误日志

错误:

E/ CursorWindow :从有1行1列的CursorWindow中读取0列-1行失败。

D/AndroidRuntime:关闭VM

E/AndroidRuntime:致命异常: main

过程: com.ans.accouting_s_p,PID: 1349

java.lang.IllegalStateException:无法为android执行方法:onClick

在androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390) at android.view.View.performClick(View.java:5623) at android.view.View$PerformClick.run(View.java:22433) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154)在android.app.ActivityThread.main(ActivityThread.java:6316) at java.lang.reflect.Method.invoke(原生方法) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(原生方法)在androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) at android.view.View.performClick(View.java:5623)在android.view.View$PerformClick.run(View.java:22433)在android.os.Handler.handleCallback(Handler.java:751)在android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java ):154)在android.app.ActivityThread.main(ActivityThread.java:6316)和java.lang.reflect.Method.invoke(本土化方法)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)(com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762))的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)上,由: java.lang.IllegalStateException:无法读第0行,来自CursorWindow的col -1。在访问游标数据之前,请确保游标已正确初始化。( android.database.CursorWindow.nativeGetDouble(Native方法)在android.database.CursorWindow.getDouble(CursorWindow.java:543) at android.database.AbstractWindowedCursor.getDouble(AbstractWindowedCursor.java:87) at com.ans.accouting_s_p.databaseTable.DataSourceProduct.getpriceDataByNameProductAndSupplier(DataSourceProduct.java:322)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-04 06:11:46

问题是,您试图访问游标中的列price_for_every_one,但它不存在,因为当您使用聚合方法(如MAX、MIN、SUM等)时,它更改了结果中的列名,除非使用AS关键字

在SQL查询中

代码语言:javascript
复制
String query = "select max(price_for_every_one) from product_Multi_Value where _id ="+ product_id +" and _idSupplier="+ supplier_id ;

结果中的列名为

代码语言:javascript
复制
max(price_for_every_one)

代码语言:javascript
复制
price_for_every_one

中不能使用列名。

代码语言:javascript
复制
Price_for_every_one = cursor.getDouble(cursor.getColumnIndexOrThrow("price_for_every_one") );

由于您只选择一个列,所以可以按其索引访问该列。

代码语言:javascript
复制
cursor.getDouble(0)

也可以在查询中使用AS关键字,如下所示

代码语言:javascript
复制
String query = "select max(price_for_every_one) As price_for_every_one from product_Multi_Value where _id ="+ product_id +" and _idSupplier="+ supplier_id ;```

我希望这对你有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60518674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档