所以我的经理似乎认为将应用程序从2个完全原生的iOS和Android应用程序转换为一个跨平台的角度/原始应用程序是一项简单的任务(对我来说这听起来是个糟糕的主意)。我试图研究这样做所需的努力。我创建了一个helloworld nativescript应用程序,我试图看看将现有本机代码集成到nativescript应用程序的最佳方式是什么(基本上我想访问我的本机webservice功能)。我对这个问题的了解非常有限。
我已经看到有一种方法可以使用make your own native packages,但这似乎是很多努力和繁琐/凌乱的方式。有没有办法只访问nativescript中的自定义本机java对象?例如:
//Java
package com.tns;
public class TestObject {
public String doSomething () {
return "hello";
}
}
//Nativescript
import { Component } from "@angular/core";
declare var com: any
@Component({
selector: "my-app",
template: `
<ActionBar title="My App"></ActionBar>
<StackLayout orientation="vertical">
<Label [text]="message" (tap)="onTap()"></Label>
</StackLayout>
`
})
export class AppComponent {
public message: string = "Hello, Angular";
public onTap() {
this.message = "Text Changed";
var test = new com.tns.TestObject();
console.log(test.doSomething());
}
}
编辑:对于未来的读者,上面的代码实际上正在工作
我认识你can do it只是普通的Android类,但是我没有能够使用我自己的自定义类,也许我只是缺少一些东西(可能与导入有关吗?)。
尝试运行程序时出现此错误
app/app.component.ts(21,24): error TS2304: Cannot find name 'com'.
我的对象就在项目的主文件夹下
基本上他们希望我们一次将android应用程序的某些部分转换为nativescript,同时保留所有旧的本机功能,以便最终将整个项目转换为nativescript,从而为两个ios提供一个代码库和理论上的android。听起来像是一个非常糟糕的方式,应该从头开始imo。
TL; DR
如何在nativescript代码中使用自定义java类?
-----评论的补充------
&#34; main&#34;发生了未被捕获的异常。线。 com.tns.NativeScriptException:调用js方法onTouch失败
[object Object]文件: &#34;文件:///data/data/org.nativescript.HelloWorld/files/app/tns_modules/tns-core-modules/ui/gestures/gestures.js, line:97,column:40
堆栈跟踪: 框架:功能:&#39; GesturesObserver.androidOnTouchEvent&#39;,文件:&#39; file:///data/data/org.nativescript.HelloWorld/files/app/tns_modules/tns-core-modules/ui/姿势/ gestures.js&#39 ;, line:97,column:41 框架:功能:&#39; onTouch&#39;,文件:&#39; file:///data/data/org.nativescript.HelloWorld/files/app/tns_modules/tns-core-modules/ui/core/ view.js&#39 ;, line:113,column:37
at com.tns.Runtime.callJSMethodNative(Native Method) at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1197) at com.tns.Runtime.callJSMethodImpl(Runtime.java:1061) at com.tns.Runtime.callJSMethod(Runtime.java:1047) at com.tns.Runtime.callJSMethod(Runtime.java:1028) ...
答案 0 :(得分:2)
尝试排除那些圆括号:)同样的事情来分配我在插件中使用的类。
修改强>
应该是这些括号:D
var test = new com.tns.TestObject();
console.log(test.doSomething());
答案 1 :(得分:0)
正如@Brad Martin在评论中解释的那样,你所需要的就是声明com
是什么,你将能够在你的nativescript代码中使用java文件而不会有任何麻烦
//Java
package com.tns;
public class TestObject {
public String doSomething () {
return "hello";
}
}
//Nativescript
import { Component } from "@angular/core";
declare var com: any //this is the important part
@Component({
selector: "my-app",
template: `
<ActionBar title="My App"></ActionBar>
<StackLayout orientation="vertical">
<Label [text]="message" (tap)="onTap()"></Label>
</StackLayout>
`
})
export class AppComponent {
public message: string = "Hello, Angular";
public onTap() {
this.message = "Text Changed";
var test = new com.tns.TestObject(); //cant use this without the declare above
console.log(test.doSomething()); //will print "hello" in the console
}
}
我的java文件位于android项目中: