javascript - 如何将大数据从原生 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 代码时会出现同样的问题。
所以你们能不能建议一些更好的方法。
解决方案
如果您将数据存储在数据库中,您的问题将不会得到解决,除非您一次不需要整个文件。
如果网站使用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
请求或类似请求,并且您一次需要整个文件。老实说,我会说没有办法以愉快的方式处理这个问题。