首页 > 解决方案 > 如何将大数据从原生 Java 发送到 JavaScript?

问题描述

我正在开发一个 Android 应用程序,我在 Java 本机代码中有一个大约 5 MB 的大型 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 代码吗?

给定条件:没有互联网连接,所以我无法进行任何 HTTP 或网络调用。

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

应用概述:

我有一个 Android 应用程序,我在其中使用 WebView。所有与 Web 相关的文件(js 和 HTML)都在 assets 文件夹中。首次启动时,我需要从服务器获取所有数据。(我在应用程序启动的第一次有互联网连接)数据非常大,大约 5 MB,但它可能高达 50 MB。我需要将这些数据存储在某处。所以如果我在没有互联网连接的情况下随时重新启动应用程序,应用程序应该有这些数据,并且应该在离线模式下工作。

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

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

所以你们能不能建议一些更好的方法。

标签: javascriptjavaandroidandroid-webview

解决方案


如果您将数据存储在数据库中,您的问题将不会得到解决,除非您一次不需要整个文件。

如果网站使用REST或类似的,并且您可以访问代码,您可以挂钩请求并将它们发送到您的应用程序的 Java / Kotlin 部分。否则你可以使用 WebViews interceptRequest

一旦您能够获得请求,您就可以从database. 想象一下它就像代表网站的后端。

示例:网站要求所有用户通过GET users/all. 您通过调用 Java 方法的钩子拦截此请求,然后返回结果通过拦截请求。无论哪种方式,您都将拥有本地数据库,在该数据库上运行类似 (pseudocode): 的查询Select * from USER。然后返回结果。

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

如果后端(从您获取 JSON 的地方)允许您获取不同的模型类型而不是一次获取所有内容(否则您可能会遇到内存问题),那就太好了。您可以Retrofit用于联网和Moshi or Gson转换为POJOs.

如果没有REST请求或类似请求,并且您一次需要整个文件。老实说,我会说没有办法以愉快的方式处理这个问题。


推荐阅读