我是 Cordova Android 开发新手,这是我在 Stack Overflow 上发表的第一篇文章。我正在尝试使用预填充的 SQlite 数据库中的数据作为 ListView 项名称来创建 Android ListView ,当单击这些 ListView 项时,将使用来自同一 SQLite 数据库的数据和详细信息打开一个新页面。 (例如“页面 1”将使用预先填充的 SQlite 数据库中的数据动态创建一个 ListView ,当单击 ListView 项目时,将打开一个新页面“页面 2”,其中包含存储在同一数据库中的相关数据,例如“第 1 页”和“第 2 页”中的分行详细信息)。我已经从 Git Hub 安装了 Sqlite 插件,但还没有成功。有人能帮我解决这个问题吗?如有任何疑问,我们将不胜感激。
提前致谢。
注意我使用 Cordova 3.5.0 CLI 和 Eclipse 进行开发,使用 Android 4.1.2 Jelly Bean Mobile(不是模拟器,而是真正的手机)进行测试,我的代码如下----
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="js/jquery-1.11.1.js"></script>
<script src="js/jquery.mobile-1.4.2.js"></script>
<script src="js/jquery.mobile-1.4.2.min.js"></script>
<link rel="stylesheet" href="css/themes/jquery.mobile.icons.min.css" />
<link rel="stylesheet" href="css/themes/shiplu.css.min.css" />
<link rel="stylesheet" href="css/list.css" />
<link rel="stylesheet" href="css/jquery.mobile-1.4.2.css">
<script type="text/javascript" charset="utf-8">
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
var db = window.sqlitePlugin.openDatabase({name: "gmapdata"});
db.transaction(populateDB, errorCB, successCB);
}
// create table
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS markers');
tx.executeSql('CREATE TABLE IF NOT EXISTS markers (id INT PRIMARY KEY NOT NULL , name VARCHAR( 60 ) NOT NULL, address VARCHAR( 80 ) NOT NULL , lat FLOAT( 10, 8 ) NOT NULL , lng FLOAT( 10, 8 ) NOT NULL , status VARCHAR, num VARCHAR DEFAULT (null) , zone VARCHAR, district VARCHAR)');
tx.executeSql('INSERT INTO markers VALUES (?,?,?,?,?,?,?,?,?)', [2,'Motijheel Branch (AD)','161 Motijheel Commercial Area, \n Dhaka- 1000 \n Ph: 9569350 (D) 7125266, 9564190, 01715028067 \n Fax: 9567664 ',23.722222,90.42171,'',NULL,'Corporate','Dhaka']);
queryDB(tx);
}
// form the query
function queryDB(tx) {
tx.executeSql("SELECT name, address, district, zone from markers;", [], querySuccess, errorCB);
}
// Display the results
function querySuccess(tx, results) {
var len = results.rows.length;
//alert("results.rows.length: " + results.rows.length + " [should be 2]");
if(len>0)
{
document.write("<ul data-role='listview'>");
for (var i = 0; i < len; i++) { // loop as many times as there are row results
document.getElementById("output").innerHTML +=
"<li><a href='#'>"+ results.rows.item(i).name +"</a></li>";
}
document.write("</ul>");
}
// Transaction error callback
function errorCB(err) {
console.log("Error processing SQL: " + err.code);
}
// Success error callback
function successCB() {
}
</script>
</head>
<body>
<script type="text/javascript" src="cordova.js"></script>
<div data-role="page" data-theme="f" id="br_list">
<div role="banner" class="ui-bar-a ui-header" data-role="header">
<a data-theme="F" href="index.html" class="ui-btn-left ui-btn ui-btn-icon-left ui-btn-corner-all ui-shadow ui-btn-up-a" data-icon="arrow-l"><span class="ui-btn-inner ui-btn-corner-all"><span class="ui-btn-text">Back</span><span class="ui-icon ui-icon-arrow-l ui-icon-shadow"></span></span></a>
<h1 aria-level="1" role="heading" tabindex="0" class="ui-title">Branch List</h1>
</div>
<div class="segment">
<div id="output" align ="center"><img src="img/loading.gif"></div>
</div>
<div data-role="footer" >
<h4>********</h4>
</div><!-- /footer -->
</div>
</body>
</html>
最佳答案
您是否在工作中使用任何 Javascript 编辑器?你需要为你的 eclipse 下载一个好的 JS 编辑器,这将 突出显示代码中的任何语法错误。如果您有任何语法错误,您的真实设备将不会显示任何消息,并且 它会默默地失败。
我建议您从应用程序中删除所有 jquery 代码并仅测试 cordova 功能。一旦你的 cordova 数据库功能开始工作,你就可以添加你的 jquery 代码了。
您是否已将 SQLite 插件添加到您的项目中。如果没有,那么代码中的以下行将不起作用。
var db = window.sqlitePlugin.openDatabase({name: "gmapdata"});
您需要改用 cordova 核心数据库 API。请引用 Cordova 链接这里作为引用
https://cordova.apache.org/docs/en/3.0.0/cordova_storage_storage.md.html
下面是示例代码。
var db = window.openDatabase("test", "1.0", "Test DB", 1000000);
当您在真实设备或模拟器上进行测试时也是如此。您需要确保每次测试应用程序时都卸载该应用程序。
您可以使用alert()调用来代替,如下所示。
// Transaction error callback
function errorCB(err) {
alert("Error processing SQL: " + err.code);
}
// Success error callback
function successCB() {
alert("successCB() called");
}
您还可以在最后一个插入调用中添加queryDB(),如下所示。
另请注意,我已将 errorCB() 添加到插入调用中,可以很好地警告任何错误。
tx.executeSql('INSERT INTO markers VALUES (?,?,?,?,?,?,?,?,?)',
[2,'Motijheel Branch (AD)','161 Motijheel Commercial Area, \n Dhaka- 1000 \n Ph: 9569350 (D) 7125266, 9564190, 01715028067 \n Fax: 9567664 ',23.722222,90.42171,'',NULL,
'Corporate','Dhaka'],queryDB,errorCB);
//queryDB(tx);
将queryDB的定义更改为
function queryDB(tx, results) {...}
希望有帮助。
关于javascript - Cordova 3.5.0 上的 SQLite 插件无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24477162/