我正在尝试根据所选的图像更改显示的内容。代码是:
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();
}我得到的错误
[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');“值设置为静态的吗?
发布于 2014-08-03 16:19:07
问题是方法next (在结尾处while行不存在),所以当您单击图像视图时,它会尝试捕捉行,但实际上没有行。
尝试创建对象:。
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();
}https://stackoverflow.com/questions/25037111
复制相似问题