2014-11-04 8 views
1

У меня есть проблема, с которой мне нужна помощь. Я пытаюсь вызвать функцию android, используя угловой контроллер в моем интерфейсе, но я не могу заставить его работать.Вызов функции Android от контроллера AngularJS

MainActivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mWebView = (WebView)findViewById(R.id.activity_main_webview); 
    mWebView.setWebViewClient(new CustomWebViewClient()); 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    mWebView.addJavascriptInterface(new AngularJSInterface(this), "Android"); 
    mWebView.loadUrl("http://192.168.70.101:3000/"); 

} 

AngularJSInterface:

public class AngularJSInterface { 

Context mContext; 

AngularJSInterface(Context c) { 
    mContext = c; 
} 

public void showToast(String toast) { 
    Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
} 

}

Угловое Контроллер:

angular.module('app').controller('ComplaintCtrl', function ($scope, $http, complaintService) { 

    $scope.showToast = function(toast) { 
     Android.showToast(toast); 
     console.log("toast"); 
} 

});

HTML-:

<button label="toast" ng-click="showToast('Visar toast från angularJS')">toast</button> 

Ошибка из консоли:

ReferenceError: Android is not defined 
at Scope.$scope.showToast (http://localhost:3000/scripts/controllers/addcomplaint.js:34:3) 
at http://localhost:3000/bower_components/angular/angular.js:10567:21 
at http://localhost:3000/bower_components/angular-touch/angular-touch.js:438:9 
at Scope.$eval (http://localhost:3000/bower_components/angular/angular.js:12412:28) 
at Scope.$apply (http://localhost:3000/bower_components/angular/angular.js:12510:23) 
at HTMLButtonElement.<anonymous> (http://localhost:3000/bower_components/angular-touch/angular-touch.js:437:13) 
at HTMLButtonElement.jQuery.event.dispatch (http://localhost:3000/bower_components/jquery/dist/jquery.js:4409:9) 
at HTMLButtonElement.elemData.handle (http://localhost:3000/bower_components/jquery/dist/jquery.js:4095:28) 

Это первый раз, когда я использую этот вид вещи, и я не совсем уверен, как на самом деле это сделать , Я пробовал искать ответы на googling, но не повезло. Что я делаю не так?

ответ

0

Либо измените свою функцию тоста на статику и вызовите ее напрямую, либо создайте ее в первую очередь. И у вас нет класса с именем Android, вместо этого вы создали AngularJSInterface. Измените вы Android.showToast на AngularJSInterface.showToast (при использовании статического).

+0

Я изменил метод showToast на статический и заменил Angular.showToast() на AngularJSInterface. showToast(), хотя я все равно получаю ту же ошибку (AngularJSInterface не определен). Как именно я могу его создать? – CobraAn

+0

AngularJSInterface myInterface = new AngularJSInterface(); myInterface.showToast(); –

Смежные вопросы