Javascript build.phonegap写入文件时出现问题
我正试图通过构建一个应用程序,该应用程序应该同时在和上运行,但这个问题集中在Android部分 应用程序的主要目标是能够访问和修改文件系统。 受此启发,我最终编写了一个与他的非常类似的示例应用程序,它以读/写权限访问文件系统。主要区别在于,我的应用程序是在线构建的,没有安装任何SDK,也不关心任何androidManifes.xml文件 我的问题是我能够访问文件系统(列出目录、读取文件),但我不能在上面写任何东西 为了获得文件访问权限,我已包括:Javascript build.phonegap写入文件时出现问题,javascript,android,cordova,phonegap-plugins,phonegap-build,Javascript,Android,Cordova,Phonegap Plugins,Phonegap Build,我正试图通过构建一个应用程序,该应用程序应该同时在和上运行,但这个问题集中在Android部分 应用程序的主要目标是能够访问和修改文件系统。 受此启发,我最终编写了一个与他的非常类似的示例应用程序,它以读/写权限访问文件系统。主要区别在于,我的应用程序是在线构建的,没有安装任何SDK,也不关心任何androidManifes.xml文件 我的问题是我能够访问文件系统(列出目录、读取文件),但我不能在上面写任何东西 为了获得文件访问权限,我已包括: <feature name="http:/
<feature name="http://api.phonegap.com/1.0/file"/>
写入/追加文件代码:
第二个代码示例没有在目标文件中写入任何内容,onerror
处理程序显示这是由于NOT\u FOUND\u ERR
造成的。这根本没有意义,因为我可以读取相同的文件(并且可以找到)
同样,当我尝试创建一个新文件时(使用write/append file code中的相同代码,但目标文件不存在),我会得到一个无效\u修改\u ERR
错误
我也尝试过,我得到了同样的结果(读和不写)
请注意,由于PhoneGap使用的是HTML5文件,因此我尝试按照中(以及其他网站)的建议编写内容,但没有任何运气
我错过了什么?我是否需要一个单独的插件来编写文件,或者这是不能通过在线构建工具完成的,我必须下载SDK并以老式的方式编译应用程序
注意:我的PhoneGap版本是2.3.0我用写入文件系统的PG build创建的,所以我确信它可以完成,并且不需要插件。我在代码中看到的主要显著区别是,我将getFile选项中的exclusive标志显式设置为false
如果您正在使用iOS进行测试,另一个解决方案是检查您是否在config.xml中正确设置了应用程序id
编辑:在我提到的应用程序中,文件系统写入代码是以下是我用于写入文件的Java方法:
public void writeMyFile(String fileName, String data) throws IOException {
File root = Environment.getExternalStorageDirectory();
System.out.println(root);
File gpxfile = new File(root, fileName);
FileWriter writer = new FileWriter(gpxfile);
String[][] recordvalue = new String[100][100];
System.out.println("fetched value" + data);
String[] line = data.split("#");
// I had multiple lines of data, all split by the # symbol in a single string.
System.out.println("row length "+line.length);
for (int i=1; i<line.length; i++)
{
writer.append("#");
recordvalue[i] = line[i].split(",");
for(int j=0; j<recordvalue[i].length; j++) {
System.out.println(recordvalue[i][j]);
writer.append(recordvalue[i][j]);
writer.append(",");
}
writer.append("\n");
}
Uri uri = Uri.fromFile(gpxfile);
System.out.println(uri);
writer.flush();
writer.close();
try {
// Do something
}
catch (Exception e) {
// If there is nothing that can send a text/html MIME type
e.printStackTrace();
}
}
插件的主要执行类如下:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import com.phonegap.api.Plugin;
public PluginResult execute(String arg0, JSONArray arg1, String arg2) {
try {
String fileName = arg1.getString(0);
String data = arg1.getString(1);
writeMyFile(fileName, data);
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
首先,确保在设备准备好后以正确的方式呼叫
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, yourCode, fail);
}
其次,确保fileName只是一个没有路径的文件名,如果你想使用目录,你应该使用。手机有SD卡吗?如果您以正常方式编译,它也可以工作吗?@Warpzit是的,手机有一个SD卡,目标文件就在上面;没有,我只是通过build.phonegap.com试过了文件名的实际值是多少?你是想写在根目录还是子目录上?为他的问题提供解决方案,而不是建议另一种方法。这也可以作为评论发布。这是解决方案。他使用的代码只是我代码的一小部分。我基本上是给他所有他缺少的部分,以确保他拥有完整的工作代码。这正是我请求文件系统的方式,正如我所说,我可以访问(读取)文件名是文件名还是路径?我记得在使用文件路径时遇到了问题,如果它可以用于读取而不能用于写入,我也不会感到惊讶。
public PluginResult execute(String arg0, JSONArray arg1, String arg2) {
try {
String fileName = arg1.getString(0);
String data = arg1.getString(1);
writeMyFile(fileName, data);
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, yourCode, fail);
}