首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: TiExceptionHandler:消息:未捕获错误:已请求索引4,大小为4

错误: TiExceptionHandler:消息:未捕获错误:已请求索引4,大小为4
EN

Stack Overflow用户
提问于 2014-07-30 20:40:34
回答 1查看 406关注 0票数 0

我正在尝试根据所选的图像更改显示的内容。代码是:

代码语言:javascript
复制
Ti.Database.install('data.sqlite', 'datadb');
var db = Titanium.Database.open('datadb');
var data = db.execute('select * from data');
var imageBook = [];


while(data.isValidRow()){       

 imageBook[data.fieldByName('id')]  = Ti.UI.createImageView({
image:  data.fieldByName('id')+'.png',
width:85, 
height:140
});


imageBook[data.fieldByName('id')].addEventListener('click', function(event){
 winBook.open();
   content = data.fieldByName('content');   
});


 data.next();
}

我得到的错误

代码语言:javascript
复制
[ERROR] :  TiResultSet: (KrollRuntimeThread) [131428,163249] Exception getting value for column 3: Index 4 requested, with a size of 4
[ERROR] :  TiResultSet: android.database.CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4
[ERROR] :  TiResultSet:     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
[ERROR] :  TiResultSet:     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
[ERROR] :  TiResultSet:     at android.database.AbstractWindowedCursor.getType(AbstractWindowedCursor.java:130)
[ERROR] :  TiResultSet:     at android.database.AbstractWindowedCursor.isFloat(AbstractWindowedCursor.java:125)
[ERROR] :  TiResultSet:     at ti.modules.titanium.database.TiResultSetProxy.internalGetField(TiResultSetProxy.java:109)
[ERROR] :  TiResultSet:     at ti.modules.titanium.database.TiResultSetProxy.internalGetFieldByName(TiResultSetProxy.java:205)
[ERROR] :  TiResultSet:     at ti.modules.titanium.database.TiResultSetProxy.internalGetFieldByName(TiResultSetProxy.java:195)
[ERROR] :  TiResultSet:     at ti.modules.titanium.database.TiResultSetProxy.fieldByName(TiResultSetProxy.java:169)
[ERROR] :  TiResultSet:     at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method)
[ERROR] :  TiResultSet:     at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:64)
[ERROR] :  TiResultSet:     at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:884)
[ERROR] :  TiResultSet:     at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1107)
[ERROR] :  TiResultSet:     at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:327)
[ERROR] :  TiResultSet:     at android.os.Handler.dispatchMessage(Handler.java:98)
[ERROR] :  TiResultSet:     at android.os.Looper.loop(Looper.java:136)
[ERROR] :  TiResultSet:     at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:112)
[WARN] :   W/System.err: android.database.CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4
[WARN] :   W/System.err:    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
[WARN] :   W/System.err:    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
[WARN] :   W/System.err:    at android.database.AbstractWindowedCursor.getType(AbstractWindowedCursor.java:130)
[WARN] :   W/System.err:    at android.database.AbstractWindowedCursor.isFloat(AbstractWindowedCursor.java:125)
[WARN] :   W/System.err:    at ti.modules.titanium.database.TiResultSetProxy.internalGetField(TiResultSetProxy.java:109)
[WARN] :   W/System.err:    at ti.modules.titanium.database.TiResultSetProxy.internalGetFieldByName(TiResultSetProxy.java:205)
[WARN] :   W/System.err:    at ti.modules.titanium.database.TiResultSetProxy.internalGetFieldByName(TiResultSetProxy.java:195)
[WARN] :   W/System.err:    at ti.modules.titanium.database.TiResultSetProxy.fieldByName(TiResultSetProxy.java:169)
[WARN] :   W/System.err:    at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method)
[WARN] :   W/System.err:    at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:64)
[WARN] :   W/System.err:    at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:884)
[WARN] :   W/System.err:    at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1107)
[WARN] :   W/System.err:    at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:327)
[WARN] :   W/System.err:    at android.os.Handler.dispatchMessage(Handler.java:98)
[WARN] :   W/System.err:    at android.os.Looper.loop(Looper.java:136)
[WARN] :   W/System.err:    at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:112)
[ERROR] :  TiExceptionHandler: (main) [124,163373] ----- Titanium Javascript Runtime Error -----
[ERROR] :  TiExceptionHandler: (main) [0,163373] - In app.js:768,21
[ERROR] :  TiExceptionHandler: (main) [0,163373] - Message: Uncaught Error: Index 4 requested, with a size of 4
[ERROR] :  TiExceptionHandler: (main) [1,163374] - Source:         content = data.fieldByName('content');
[ERROR] :  V8Exception: Exception occurred at app.js:768: Uncaught Error: Index 4 requested, with a size of 4

编辑:我知道错误发生的原因。eventlistener调用当前的"Data.fieldByName('content');“,当使用data.next()单击eventlistener时,它将尝试检索一个不存在的列。你知道如何解决这个问题,或者在事件侦听器创建后将"Data.fieldByName('content');“值设置为静态的吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-03 16:19:07

问题是方法next (在结尾处while行不存在),所以当您单击图像视图时,它会尝试捕捉行,但实际上没有行。

尝试创建对象:。

代码语言:javascript
复制
var bookClicked = function bookClicked (c) {
    // c => content of each image view
    winBook.open();
};

while(data.isValidRow()){
    var id = data.fieldByName('id');
    var content = data.fieldByName('content');        
    imageBook[id] = {
       "content" : content,
       "view" : Ti.UI.createImageView({
           image: data.fieldByName('id')+'.png',
           width: 85, 
           height: 140
       })
    };
    imageBook[id].view.addEventListener('click', bookClicked(imageBook[id].content));
    data.next();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25037111

复制
相关文章

相似问题

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