我正在尝试将预先填充的数据库复制到可写目录(我正在考虑SD卡),这需要基本上复制我的phonegap android应用程序中的整个资产文件夹。
我已经完成了几天的研究,由于我对java的知识非常有限,我似乎无法创建这个java插件来做简单的复制,然后从那里我不能确定如何从我的HTML中实际调用这个插件/ Javascript。
下面是我一直在使用网上找到的示例代码的当前java插件,有人可以帮助指导我正确的方向。
JAVA PLUGIN:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.json.JSONArray;
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
public class DataBaseHelper extends Plugin
{
@Override
public PluginResult execute(String arg0, JSONArray arg1, String arg2)
{
try
{
String pName = this.getClass().getPackage().getName();
this.copy("Databases.db","/data/data/"+pName+"/app_database/");
this.copy("0000000000000001.db","/data/data/"+pName+"/app_database/file__0/");
}
catch (IOException e)
{
e.printStackTrace();
}
// TODO Auto-generated method stub
String value = "OK";
return new PluginResult(PluginResult.Status.OK, value);
}
//Copy Paste this function in the class where you used above part
void copy(String file, String folder) throws IOException
{
File CheckDirectory;
CheckDirectory = new File(folder);
if (!CheckDirectory.exists())
{
CheckDirectory.mkdir();
}
InputStream in = this.ctx.getAssets().open(file);
OutputStream out = new FileOutputStream(folder+file);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len; while ((len = in.read(buf)) > 0) out.write(buf, 0, len);
in.close(); out.close();
}
}
JAVASCRIPT PLUGIN CALL:
<script type="text/javascript" charset="utf-8" src="taxapp.js"></script>
function onDeviceReady() // CALLING THIS ON BODY LOAD
{
dataCapture();
window.plugins.DataBaseHelper.copy("",function(data)
{
alert("plugin called part 1");
// nothing to do here
},
function()
{
alert("plugin called part 2");
console.warn("Error calling plugin");
});
}
任何帮助都会非常感激,因为我今天需要解决这个问题。提前谢谢。
答案 0 :(得分:2)
尝试使用this.ctx
而不是this
和getApplicationContext()
,Plugin
本身不是一个上下文,但它在{{{{}中保留了'真实'上下文1}} field。
使用以下内容添加.js文件:
ctx
然后在PhoneGap初始化后随时调用插件:
var DataBaseHelper = function() {};
DataBaseHelper.prototype.copy = function(params, success, fail)
{
return PhoneGap.exec(function(args)
{
success(args);
},
function(args)
{
fail(args);
}, 'DataBaseHelper', 'copy', [params]);
};
PhoneGap.addConstructor(function()
{
PhoneGap.addPlugin('DataBaseHelper', new DataBaseHelper());
PluginManager.addService("DataBaseHelper","full.package.name.DataBaseHelper");
});
此外,在phonegap-1.0.0之后,您需要在res / xml目录中有一个plugins.xml文件,您需要在其中添加:
window.plugins.DataBaseHelper.copy("",function(data)
{
// nothing to do here
},
function()
{
console.warn("Error calling plugin");
});
了解phonegap是否已初始化的最佳方法是在javascript中调用此方法:
<plugin name="DataBaseHelper" value="full.package.name.DataBaseHelper"/>