Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将大型数据从本机Java发送到JavaScript?_Javascript_Java_Android_Android Webview - Fatal编程技术网

如何将大型数据从本机Java发送到JavaScript?

如何将大型数据从本机Java发送到JavaScript?,javascript,java,android,android-webview,Javascript,Java,Android,Android Webview,我正在开发一个Android应用程序,Java本机代码中有一个大约5MB的大JSON字符串。我需要将这个字符串从Java代码发送到JavaScript(JS文件位于assets文件夹中)。当我运行应用程序时,它会挂起 public String readFileDataofIamge() { StringBuilder text = new StringBuilder(); String FILE_NAME = "ImageDataFile.txt"; try {

我正在开发一个Android应用程序,Java本机代码中有一个大约5MB的大JSON字符串。我需要将这个字符串从Java代码发送到JavaScript(JS文件位于assets文件夹中)。当我运行应用程序时,它会挂起

public String readFileDataofIamge()
{
    StringBuilder text = new StringBuilder();
    String FILE_NAME = "ImageDataFile.txt";
    try {

        BufferedReader reader = new BufferedReader(new InputStreamReader(openFileInput(FILE_NAME)));
        while ((line=reader.readLine())!=null) {
            text.append(line.toString());}
        reader.close();
    }
    catch (Exception e) {
    }

    return text.toString();
}

@JavascriptInterface
public String readImageData()
{
    return readFileDataofIamge();
}
JS代码:

function getDatafromFile() {
    var imageData=Android.readImageData();
}
如果我返回一些小字符串值,比如hello world,我将在JavaScript代码中获得该值

那么,是否有可能将这些大数据从本机代码发送到JavaScript代码?如果不可能,是否有其他方法将大数据从本机代码发送到JS代码

给定的条件:没有internet连接,因此我无法进行任何HTTP或网络调用

============================================================================

应用程序概述:

function getDatafromFile() {
    var imageData=Android.readImageData();
}
我有一个Android应用程序,其中我使用的是WebView。所有与web相关的文件(js和HTML)都位于assets文件夹中。在第一次启动时,我需要从服务器获取所有数据。(我在应用程序发布的第一时间就连接了互联网)数据非常大,大约5 MB,但可能高达50 MB。我需要把这些数据存储在某个地方。因此,如果我在没有互联网连接的情况下随时重新启动该应用程序,该应用程序应该具有这些数据,并且应该在脱机模式下工作

所以对于这个需求,我尝试将这个数据(大约20MB)写入内部存储文件,并尝试读取这个文件并将数据发送到JavaScript代码。但它不起作用

我曾想过使用SQLite DB而不是存储在文件中,但我再次认为,在将数据从本机代码发送到JS代码时,也会出现同样的问题


所以,请大家提出一些更好的方法。

如果将数据存储在数据库中,您的问题将无法得到解决,除非您不需要立即使用整个文件

如果网站使用
REST
或类似工具,并且您可以访问代码,那么您可以钩住请求并将其发送到应用程序的Java/Kotlin部分。否则,您可以使用webview
interceptRequest

一旦您能够获得请求,您就可以从
数据库中返回所需的数据。想象一下,这就像代表网站的后端一样

例如: 网站要求所有用户通过
获取用户/all
。您通过一个调用Java方法的钩子截获该请求,然后通过interceptRequest返回结果。无论哪种方式,您都将拥有本地数据库,在该数据库上运行查询,如(伪代码):
Select*from USER
。然后返回结果

由于您处理的是
JSON
,因此可以使用
NOSQL
数据库,如
CouchbaseLite
,它直接存储
JSON
。缺点:如果需要修改数据,则必须将其转换为
POJO
,并在返回/再次存储后返回到
JSON
。或者使用
SQLite
数据库。为此,您必须将下载的
JSON
转换为
pojo
,然后存储它们

如果后端(从那里获得JSON)允许您获得不同的模型类型,而不是一次获得所有内容,那就太好了(否则您可能会遇到内存问题)。您可以使用
改装
进行联网,并使用
Moshi或Gson
转换为
POJO


如果没有
REST
请求或类似请求,并且您需要立即获取整个文件。老实说,我想说,没有办法以令人愉快的方式处理这个问题。

@Teemu正如我提到的,大小可以高达50兆字节,我会在回家的路上把我的安卓系统扔到一口井里。。。