イメージ パスを sqlite データベースに保存する必要があります。画像パスは、リソース フォルダーにある /images/filename.jpg になります。
画像パス自体ではなく、他のすべてのデータをデータベースに保存できます。ユーザーが画像のカタログの詳細を入力して、ギャラリーから写真を選択できるページがあります。
画像ファイルパスをデータベースに保存する方法がわからないので、ユーザーがデータベースレコードに戻ると、画像と情報が表示されます。
現在、画像パスではなく、情報のみが保存されています。
これが理にかなっていることを願っています。
これまでのページのコードは次のとおりです。
var currentWin = Ti.UI.currentWindow;
//var id = currentWin.id;
function photoGalleryDidClose(item) {
photoView.image = item.media;
}
var db = Titanium.Database.open('photos');
var sql = db.execute('SELECT * FROM photos');
var recordID = sql.fieldByName('');
var title = sql.fieldByName('');
var location = sql.fieldByName('');
var photographer = sql.fieldByName('');
var equipment = sql.fieldByName('');
var notes = sql.fieldByName('');
var date = sql.fieldByName('');
var imageUrl = sql.fieldByName('');
//Labels to display catalogue details
var labelrecordID = Titanium.UI.createLabel({
text:'Record ID:',
font:{fontSize:18},
top:30,
left: 10,
height: 45,
width:'auto'
})
currentWin.add(labelrecordID);
var textrecordID = Titanium.UI.createTextField({
//text:' '+ title +'',
hintText: 'Enter an ID Number',
font:{fontSize:18},
color:'black',
borderRadius: 2,
top:30,
left: 150,
height: 45,
backgroundColor:'white',
width:'300'
})
textrecordID.addEventListener("change", function(e) {
newID = e.value;
});
currentWin.add(textrecordID);
var labelTitle = Titanium.UI.createLabel({
text:'Title:',
font:{fontSize:18},
top:80,
left: 10,
height: 45,
width:'auto'
})
currentWin.add(labelTitle);
var textTitle = Titanium.UI.createTextField({
text:' '+ title +'',
hintText: 'Title',
font:{fontSize:18},
color:'black',
borderRadius: 2,
top:80,
left: 150,
height: 45,
backgroundColor:'white',
width:'300'
})
textTitle.addEventListener("change", function(e) {
newTitle = e.value;
});
currentWin.add(textTitle);
///// I HAVE CHOPED OUT THE MIDDLE BIT AS IT IS JUST REPETITION OF ABOVE \\\\\
var labelDate = Titanium.UI.createLabel({
text:'Date:',
font:{fontSize:18},
top:330,
left: 10,
height: 45,
width:'auto'
})
currentWin.add(labelDate);
var textDate = Titanium.UI.createTextField({
text:' '+ date +'',
hintText: 'Date',
font:{fontSize:18},
color:'black',
borderRadius: 2,
top: 330,
left: 150,
height: 45,
backgroundColor:'white',
width:'300'
})
textDate.addEventListener("change", function(e) {
newDate = e.value;
});
currentWin.add(textDate);
// create a view to add the label and photo
var photoContainerView = Ti.UI.createView({
top: 400,
left: 10,
height: 230,
width: Ti.UI.FILL
});
var photoLabel = Ti.UI.createLabel({
text: 'Photo:',
left: 0,
height: Ti.UI.SIZE,
width: Ti.UI.SIZE,
font:{fontSize:18}
});
photoContainerView.add(photoLabel);
var photoView = Ti.UI.createImageView({
image: imageUrl,
top: 0,
left: 110,
height: 200,
width: 200,
borderColor: 'gray',
borderWidth: 1
});
photoContainerView.add(photoView);
var button_photo = Titanium.UI.createButton({
title: 'Add Image',
color: 'white',
backgroundColor: '#464646',
font:{fontSize:20,fontFamily:'Helvetica Neue'},
top: 20,
right:10,
width: 130,
height: 60
});
button_photo.addEventListener('click', function(e){
//Titanium.Media.openPhotoGallery({allowEditing: true, success:photoGalleryDidClose});
Titanium.Media.openPhotoGallery({
success:function(event) {
var image = event.media;
photoView.image = image;
}
});
});
///////////PROBLEM HERE SAVING IMAGE INFO??\\\\\\\\\\
button_photo.addEventListener("click", function(e) {
newImage = e.value;
});
photoContainerView.add(button_photo);
var button_save = Titanium.UI.createButton({
title: 'Save Record',
color: 'white',
backgroundColor: '#464646',
font:{fontSize:20,fontFamily:'Helvetica Neue'},
top: 100,
right:10,
width: 130,
height: 60,
//enabled:false
});
///Save the record - Add event listener for save button
button_save.addEventListener("click", function(e) {
//if (button_save.enabled) {
var db = Titanium.Database.open('photos');
db.execute('INSERT INTO photos (id,title,location,photographer,equipment,notes,date,imageUrl) VALUES(?,?,?,?,?,?,?,?)',newID,newTitle,newLocation,newPhotographer,newEquip,newNotes,newDate,newImage);
var last = db.lastInsertRowId;
//}
});
photoContainerView.add(button_save);
currentWin.add(photoContainerView);
これが理にかなっていることを願っています
私が言ったように、画像パスを除いてすべてがうまく保存されます。
私が抱えている問題は、画像を取得し、正しいパスを割り当ててデータベースに保存することです
ご協力ありがとうございます
JC
更新 更新 更新
OK、これは私が得ることができる限りであり、私はかなり困惑しています! 保存されたすべての正しい詳細と正しい画像パスを取得できますが(私は思う)、それでも画像は表示されません。これは、選択して画像を保存するコードです。
button_photo.addEventListener('click', function() {
Ti.Media.openPhotoGallery({
mediaTypes : [Ti.Media.MEDIA_TYPE_PHOTO],
success : function(e) {
photoView.image = e.media;
var time = new Date();
var name = '/images/name' + time.getTime() + '.jpg';
var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, name);
f.write(e.media);
var newimage = f + '/' + name; //Just trying different things.
Ti.API.info('f.nativePath' + f.nativePath);
var db = Titanium.Database.open('photos');
db.execute('INSERT INTO photos (id,title,location,photographer,equipment,notes,date,imageUrl) VALUES(?,?,?,?,?,?,?,?)', name,newTitle,newLocation,newPhotographer,newEquip,newNotes,newDate,name);
db.close();
//insertdb(newID,newTitle,newLocation,newPhotographer,newEquip,newNotes,newDate,f);
//aTableView.setData(getData());
},
cancel : function() {
},
error : function(err) {
}
});
});
画像パスを「images/filname.png」または「f.nativePath」に保存しても、違いはないようです。
データベースに事前入力されたフィールドがいくつかあり、画像は「images/filname.jpg」に保存され、これらはアプリに正常に表示されます。電話ギャラリーから画像を追加しようとすると、表示されません...
どんな助けでも素晴らしいでしょう!
ありがとうございます