如何将大数据从本机 Java 发送到 Java 脚本?
How to send large data from native Java to 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();
}
如果我 return 一些像 hello world 这样的小字符串值,我会在 Java 脚本代码中获取值。
那么是否可以将这个大数据从本机代码发送到 Java脚本代码?如果不可能,是否有任何其他方法可以将大数据从本机代码发送到 JS 代码?
给出的条件:没有互联网连接,所以我无法进行任何 HTTP 或网络调用。
============================================= ===============================
应用程序概述:
我有一个 Android 应用程序,我在其中使用 WebView。所有与网络相关的文件(js 和 HTML)都在 assets 文件夹中。首次启动时,我需要从服务器获取所有数据。 (我在第一次启动应用程序时有互联网连接)数据非常大,大约 5 MB,但可能高达 50 MB。我需要将这些数据存储在某个地方。这样如果我在没有互联网连接的情况下随时重新启动该应用程序,该应用程序应该有这些数据并且它应该可以在离线模式下工作。
所以为了这个要求,我尝试将这个数据(大约 20 MB)写入内部存储文件并尝试读取这个文件并将数据发送到 Java脚本代码。但是没用。
我曾想过使用SQLite DB而不是存储在文件中,但我再次认为将数据从本机代码发送到JS代码时会出现同样的问题。
所以请你们提出一些更好的方法。
如果您将数据存储在数据库中,您的问题将不会得到解决除非您不会一次需要整个文件。
如果网站使用 REST
或类似的,并且您可以访问代码,您可以挂钩请求并将它们发送到应用程序的 Java / Kotlin 部分。否则你可以使用 WebViews interceptRequest
.
一旦您能够获得请求,您就可以 return 从您的 database
中获取所需的数据。想象一下它代表网站的后端。
示例:
网站要求所有用户通过 GET users/all
。您通过调用 Java 方法的挂钩拦截此请求,然后通过 interceptRequest return 得到结果 或 。无论哪种方式,您都将拥有本地数据库,您可以在其中 运行 查询(伪代码):Select * from USER
。然后return结果。
由于您正在处理 JSON
,您可以使用像 CouchbaseLite
这样的 NOSQL
数据库,它直接存储 JSON
。缺点:如果您需要修改数据,则必须将其转换为 POJO
并在 return 后返回 JSON
/再次存储。或者使用 SQLite
数据库。为此,您必须将下载的 JSON
转换为 POJOs
,然后存储它们。
如果后端(从您获得 JSON 的地方)允许您获得不同的模型类型而不是同时获得所有模型(否则您可能 运行 会出现内存问题),那就太好了。您可以使用 Retrofit
进行联网,使用 Moshi or Gson
转换为 POJOs
.
如果没有 REST
请求或类似请求,并且您需要立即获取整个文件。老实说,我想说没有办法以令人愉快的方式处理这个问题。
我正在开发一个 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();
}
如果我 return 一些像 hello world 这样的小字符串值,我会在 Java 脚本代码中获取值。
那么是否可以将这个大数据从本机代码发送到 Java脚本代码?如果不可能,是否有任何其他方法可以将大数据从本机代码发送到 JS 代码?
给出的条件:没有互联网连接,所以我无法进行任何 HTTP 或网络调用。
============================================= ===============================
应用程序概述:
我有一个 Android 应用程序,我在其中使用 WebView。所有与网络相关的文件(js 和 HTML)都在 assets 文件夹中。首次启动时,我需要从服务器获取所有数据。 (我在第一次启动应用程序时有互联网连接)数据非常大,大约 5 MB,但可能高达 50 MB。我需要将这些数据存储在某个地方。这样如果我在没有互联网连接的情况下随时重新启动该应用程序,该应用程序应该有这些数据并且它应该可以在离线模式下工作。
所以为了这个要求,我尝试将这个数据(大约 20 MB)写入内部存储文件并尝试读取这个文件并将数据发送到 Java脚本代码。但是没用。
我曾想过使用SQLite DB而不是存储在文件中,但我再次认为将数据从本机代码发送到JS代码时会出现同样的问题。
所以请你们提出一些更好的方法。
如果您将数据存储在数据库中,您的问题将不会得到解决除非您不会一次需要整个文件。
如果网站使用 REST
或类似的,并且您可以访问代码,您可以挂钩请求并将它们发送到应用程序的 Java / Kotlin 部分。否则你可以使用 WebViews interceptRequest
.
一旦您能够获得请求,您就可以 return 从您的 database
中获取所需的数据。想象一下它代表网站的后端。
示例:
网站要求所有用户通过 GET users/all
。您通过调用 Java 方法的挂钩拦截此请求,然后通过 interceptRequest return 得到结果 或 。无论哪种方式,您都将拥有本地数据库,您可以在其中 运行 查询(伪代码):Select * from USER
。然后return结果。
由于您正在处理 JSON
,您可以使用像 CouchbaseLite
这样的 NOSQL
数据库,它直接存储 JSON
。缺点:如果您需要修改数据,则必须将其转换为 POJO
并在 return 后返回 JSON
/再次存储。或者使用 SQLite
数据库。为此,您必须将下载的 JSON
转换为 POJOs
,然后存储它们。
如果后端(从您获得 JSON 的地方)允许您获得不同的模型类型而不是同时获得所有模型(否则您可能 运行 会出现内存问题),那就太好了。您可以使用 Retrofit
进行联网,使用 Moshi or Gson
转换为 POJOs
.
如果没有 REST
请求或类似请求,并且您需要立即获取整个文件。老实说,我想说没有办法以令人愉快的方式处理这个问题。