API.AI: How to stop AsyncTask on click of the AIButton?

前端 未结 4 2069
借酒劲吻你
借酒劲吻你 2021-01-18 10:37

I’m using AIButton in my app and I have a AsyncTask which gets executed after AIButton is clicked and receives some command and AsyncTask sometimes

4条回答
  •  轮回少年
    2021-01-18 10:57

    Use boolean cancel (boolean mayInterruptIfRunning).

    Make the asyncTask a class variable.

    AsyncTask translate_ = new translate();
    

    Then call it like so in place.

    translate_.execute(textToTranslate.getText().toString(), "az");
    

    Within the button onclick cancel the asyncTask.

    translate_.cancel(true);
    

    Then check within your loop that the task has been cancelled and set a break.

    for (int i=0; i

    These questions also give some more variety in how to choose to do this:

    Android - Cancel AsyncTask Forcefully

    How to stop asynctask thread in android?

    It would be wise to manage the task on backpress also. Perhaps cancel the task in the activity onpause.

    public void listenButtonOnClick(final View view) {
        // aiService.startListening();
        // add more details in here
    
        if (aiService != null) {
            switch (currentState) {
                case normal:
                    aiService.startListening();
                    break;
                case busy:
                    aiService.cancel();
                    translate_.cancel(true);
                    break;
                default:
                    aiService.stopListening();
                    translate_.cancel(true);
                    break;
    }
    

    Or cancel the task when the aiservice is cancelled or stopped.

    @Override
    public void onListeningStarted() {}
    
    @Override
    public void onListeningCanceled() {
        translate_.cancel(true);
    }
    
    @Override
    public void onListeningFinished() {
        translate_.cancel(true);
    }
    

    There's other ways it can be managed, explore your options. Have a good look at this and the SO questions linked above.

    If you have a look at the docs.

    apiai-android-client/ailib/src/main/java/ai/api/ui/AIButton.java

    @Override
    protected void onClick(final View v) {
        super.onClick(v);
    
        if (aiService != null) {
            switch (currentState) {
                case normal:
                    aiService.startListening();
                    break;
                case busy:
                    aiService.cancel();
                    break;
                default:
                    aiService.stopListening();
                    break;
            }
        }
    
    }
    

    It's clear from our discussion you're struggling with how to implement this.

    Please study this apiai-android-client/ Android SDK for api.ai/ Tutorial

    Go back to the basics. Forget about the ai.api for a while and learn the basics. Browse around, read the docs Input Events read questions and apply the programming principles. For example:
    Android button onclick override

    Beyond this I cannot help you any further.

提交回复
热议问题