如何将大型数据从本机Java发送到JavaScript?
我正在开发一个Android应用程序,Java本机代码中有一个大约5MB的大JSON字符串。我需要将这个字符串从Java代码发送到JavaScript(JS文件位于assets文件夹中)。当我运行应用程序时,它会挂起如何将大型数据从本机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 {
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部分。否则,您可以使用webviewinterceptRequest
一旦您能够获得请求,您就可以从数据库中返回所需的数据。想象一下,这就像代表网站的后端一样
例如:
网站要求所有用户通过获取用户/all
。您通过一个调用Java方法的钩子截获该请求,然后通过interceptRequest返回结果或。无论哪种方式,您都将拥有本地数据库,在该数据库上运行查询,如(伪代码):Select*from USER
。然后返回结果
由于您处理的是JSON
,因此可以使用NOSQL
数据库,如CouchbaseLite
,它直接存储JSON
。缺点:如果需要修改数据,则必须将其转换为POJO
,并在返回/再次存储后返回到JSON
。或者使用SQLite
数据库。为此,您必须将下载的JSON
转换为pojo
,然后存储它们
如果后端(从那里获得JSON)允许您获得不同的模型类型,而不是一次获得所有内容,那就太好了(否则您可能会遇到内存问题)。您可以使用改装
进行联网,并使用Moshi或Gson
转换为POJO
如果没有REST
请求或类似请求,并且您需要立即获取整个文件。老实说,我想说,没有办法以令人愉快的方式处理这个问题。@Teemu正如我提到的,大小可以高达50兆字节,我会在回家的路上把我的安卓系统扔到一口井里。。。