1

次の関数を実行すると、プログラムは例外をスローします。

    testDownloadFunc: function() {
    console.log("testDownload");
    var remoteFile = "http://192.168.55.177/MvcApplication6/Download/getFile";
    var localFileName = "Test01.properties";

    function fail(error) {
        console.log(error.code);
    }

    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
        fileSystem.root.getFile(localFileName, {create: true, exclusive: false}, function(fileEntry) {
            var localPath = fileEntry.fullPath;
            if (device.platform === "Android" && localPath.indexOf("file://") === 0) {
                localPath = localPath.substring(7);
            }
            var ft = new FileTransfer();
            ft.download(remoteFile,
                localPath, function(entry) {
                    console.log("download complete: " + entry.fullPath);
                }, fail);
        }, fail);
    }, fail);       
}

次の例外がスローされました: 02-01 16:01:16.920: E/FileTransfer(23147): {"target":"/storage/sdcard0/Test01.properties","source":"http://192.168. 55.177/MvcApplication6/Download/getFile","http_status":200,"code":3} 02-01 16:01:16.920: E/FileTransfer(23147): java.net.SocketException: recvfrom に失敗しました: ECONNRESET (接続のリセットピアによる) 02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552) 02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.IoBridge.recvfrom(IoBridge.java:516) 02-01 16:01:16.920: E/FileTransfer(23147): java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) 02-01 16 :01:16.920: E/FileTransfer(23147): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) 02-01 16:01:16.920: E/FileTransfer(23147): java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) 02-01 16:01:16.920: E/FileTransfer(23147): java.io.BufferedInputStream で.read(BufferedInputStream.java:304) 02-01 16:01:16.920: E/FileTransfer(23147): libcore.net.http.ChunkedInputStream.read(ChunkedInputStream.java:52) 02-01 16:01:16.920 : E/FileTransfer(23147): java.io.InputStream.read(InputStream.java:163) 02-01 16:01:16.920: E/FileTransfer(23147): org.apache.cordova.FileTransfer.download( FileTransfer.java:507) 02-01 16:01:16.920: E/FileTransfer(23147): org.apache.cordova.FileTransfer.execute (FileTransfer.java:88) 02-01 16:01:16.920: E/ FileTransfer(23147): org.apache.cordova.api.PluginManager$1.run(PluginManager.java:231) 02-01 16:01:16.920: E/FileTransfer(23147):java.lang.Thread.run(Thread.java:856) 02-01 16:01:16.920: E/FileTransfer(23147): 原因: libcore.io.ErrnoException: recvfrom に失敗しました: ECONNRESET (ピアによる接続のリセット) 02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.Posix.recvfromBytes(ネイティブ メソッド) で 02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.Posix で.recvfrom(Posix.java:131) 02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164) 02-01 16:01:16.920: E /FileTransfer(23147): at libcore.io.IoBridge.recvfrom(IoBridge.java:513) 02-01 16:01:16.920: E/FileTransfer(23147): ... 10 詳細E/FileTransfer(23147): libcore.io.Posix.recvfromBytes(ネイティブ メソッド) 02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.Posix.recvfrom(Posix.java:131) で02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164) で 02-01 16:01:16.920: E/FileTransfer(23147): libcore で。 io.IoBridge.recvfrom(IoBridge.java:513) 02-01 16:01:16.920: E/FileTransfer(23147): ... 10 詳細E/FileTransfer(23147): libcore.io.Posix.recvfromBytes(ネイティブ メソッド) 02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.Posix.recvfrom(Posix.java:131) で02-01 16:01:16.920: E/FileTransfer(23147): libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164) で 02-01 16:01:16.920: E/FileTransfer(23147): libcore で。 io.IoBridge.recvfrom(IoBridge.java:513) 02-01 16:01:16.920: E/FileTransfer(23147): ... 10 詳細

問題の根本原因とその解決方法は? PhoneGap 2.1 と Android 4.1.2 を使用しています。

4

1 に答える 1

1

よくわかりませんが、この問題はJava IOコアのどこかにあり、テキストの数が多すぎるため、JSONコードの行数を450から10行に減らすことでこれを解決しました。

BufferedReader.readLine()この解決策は、Javaを使用して同じ仕事をし、メソッドに到達するときに同じ問題に遭遇した原因を突き止めました。

また、byteBuffer などを使用してファイルを読み取るなど、別の方法でファイルを読み取ることも役立つ場合があります。しかし、あなたの場合(電話のギャップ)、私にはアイデアがありません:D

于 2013-02-03T20:25:57.893 に答える