uni-app NJS如何通过Bundle传递数据/如何传递对象类型(Bean)数据

uni-app NJS如何通过Bundle传递数据/如何传递对象类型(Bean)数据

AActivity通过startActivityForResult方式打开BActivity,BActivity是通过SDK.startWebApp方式打开的html页面,现在在html页面操作完毕之后返回到AActivity页面发现通过Bundle方式将对象数据传递编译通不过 “Uncaught SyntaxError: Unexpected identifier”。NJS不支持bundle的Serializable序列化方式传递参数吗?还是我哪里出了问题?请教一下谢谢!!

var currentActivity = plus.android.runtimeMainActivity();  
var Intent = plus.android.importClass('android.content.Intent')  
var intent = new Intent();  
var Bundle = plus.android.importClass('android.os.Bundle');  
var Serializable = plus.android.importClass('java.io.Serializable');  
var bundle = new Bundle();  
var user = new Object();  
user.name = '张三';  
user.address='上海市';  
// ****下面这句提示 【Uncaught SyntaxError: Unexpected identifier】 ******/  
mBundle.putSerializable("user", (Serializable)user);    
intent.putExtra('bundle', mBundle);  
currentActivity.setResult(200,intent);  
currentActivity.finish();

但是通过Intent传递简单的数据是可以成功:如下可以成功

var currentActivity = plus.android.runtimeMainActivity();  
var Intent = plus.android.importClass('android.content.Intent')  
var intent = new Intent();  
intent.putExtra('data', "返回起调activity的onActivityResult");  
currentActivity.setResult(200,intent);  
currentActivity.finish();

NJS如何传递对象类型数据到native层呢?通过自定义插件貌似也是通过数组的方式将参数传递到Native层。


更多关于uni-app NJS如何通过Bundle传递数据/如何传递对象类型(Bean)数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

var currentActivity = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass(‘android.content.Intent’)
var intent = new Intent();
var Bundle = plus.android.importClass(‘android.os.Bundle’);
var Serializable = plus.android.importClass(‘java.io.Serializable’);
var bundle = new Bundle();
bundle.putString(“content”,‘传递基本类型数据’)
//bundle.putSerializable(“user”, (Serializable) person);
intent.putExtra(‘bundle’, bundle);
currentActivity.setResult(200, intent);
currentActivity.finish(); 验证了一下 通过Bundle可以传递基本数据类型,但是序列化的对象不能传递,如果想要传递序列话对象应该如何实现呢?

更多关于uni-app NJS如何通过Bundle传递数据/如何传递对象类型(Bean)数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html


已解决,换了一种思路,将bean对象通过JSON转换为string后传递

在uni-app NJS中传递对象数据到Android原生层确实需要注意几个关键点:

  1. 直接序列化JS对象的问题: 你遇到的语法错误是因为NJS不支持直接将JS对象强制转换为Java的Serializable接口。JS对象和Java对象在底层实现上有本质区别。

  2. 推荐解决方案:

  • 使用JSON序列化传递数据:
var bundle = new Bundle();
bundle.putString("user", JSON.stringify(user));
intent.putExtra('bundle', bundle);
  1. 在接收方AActivity中:
Bundle bundle = getIntent().getBundleExtra("bundle");
String userJson = bundle.getString("user");
User user = new Gson().fromJson(userJson, User.class);
  1. 替代方案: 如果必须使用Serializable,需要先创建JavaBean对象:
var User = plus.android.importClass('com.example.User');
var javaUser = new User();
javaUser.setName('张三');
javaUser.setAddress('上海市');
bundle.putSerializable("user", javaUser);
回到顶部