我制作了一个崩溃的应用,看不到任何原因

时间:2018-07-05 07:16:54

标签: java android android-studio dialogflow

我最近使用Android Studio制作了一个应用,其中集成了Dialogflow API。
我的代码没有错误,但是,当我在模拟器上运行该应用时,该应用崩溃了。

我正在跑步:

  • Android Studio 3.1.3
  • 版本版本:4.4
  • Android插件版本:3.1.3
  • 仿真器:Nexus 5X API-26

我的项目级别Gradle文件:

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

    buildscript {

        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.3'


            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }

    allprojects {
        repositories {
            google()
            jcenter()
        }
    }

    task clean(type: Delete) {
        delete rootProject.buildDir
    }

**My App's Gradle File :**

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.therationalbloke.myzen"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'ai.api:sdk:2.0.7@aar'
    implementation 'ai.api:libai:1.6.12'
    implementation 'com.google.code.gson:gson:2.8.0'
    implementation 'commons-io:commons-io:2.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

我的MainActivity.java代码:

package com.testfile.dialogf;

import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import ai.api.AIListener;
import ai.api.android.AIConfiguration;
import ai.api.android.AIService;
import ai.api.model.AIError;
import ai.api.model.AIResponse;
import ai.api.model.Result;

public class MainActivity extends AppCompatActivity implements AIListener {
    AIService aiService;
    TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t = (TextView) findViewById(R.id.textView);
        int permission = ContextCompat.checkSelfPermission(this,
                Manifest.permission.RECORD_AUDIO);

        if (permission != PackageManager.PERMISSION_GRANTED) {

            makeRequest();
        }
        final AIConfiguration config = new AIConfiguration("CLIENT_ACCESS_TOKEN",
                AIConfiguration.SupportedLanguages.English,
                AIConfiguration.RecognitionEngine.System);
        AIService aiService = AIService.getService(this, config);
        aiService.setListener(this);
    }

    protected void makeRequest() {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.RECORD_AUDIO},
                101);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 101: {

                if (grantResults.length == 0
                        || grantResults[0] !=
                        PackageManager.PERMISSION_GRANTED) {


                } else {

                }
                return;
            }
        }
    }

    public void buttonClicked (View view){
        aiService.startListening();


    }

    @Override
    public void onResult(AIResponse result) {
        Log.d("ZenR", result.toString());
        Result result1 = result.getResult();
        t.setText("Query "+result1.getResolvedQuery()+" action: "+result1.getAction());




    }


    @Override
    public void onError(AIError error) {

    }

    @Override
    public void onAudioLevel(float level) {

    }

    @Override
    public void onListeningStarted() {

    }

    @Override
    public void onListeningCanceled() {

    }

    @Override
    public void onListeningFinished() {

    }
}

现在,当我在模拟器上运行此代码时。该应用程序崩溃了。语法没有任何错误。我不太确定这是怎么回事。

Here's the error on my emulator as app crashes

2 个答案:

答案 0 :(得分:3)

应用程序崩溃的原因可能是编译时错误或运行时错误。

编译时错误可以是语法错误,找不到类错误,重载错误,这些错误由Android Studio显示和记录。在您的情况下,由于正确地编译了您的应用并将其安装在设备上,因此不会出现编译时错误。

使用(运行)应用程序时发生运行时错误。它们主要是逻辑错误或变量声明错误。就您而言,问题可能仅在此。

当您运行应用程序时,代码将被执行,逻辑也将被执行。因此,如果您在代码中给出了错误的逻辑,例如无限循环,传递字符串而不是整数数据类型等等,那么应用程序将崩溃。

您必须检查日志以查看导致崩溃的异常是什么。在日志中(IDE的下部),将有Exception的名称,启动它的元素,并且还将有指向发现问题的代码行的链接。

如果仍然无法通过这种方式找到错误,则可以在希望在调试过程中停止应用程序的代码行的左侧设置断点,然后在调试模式下运行该应用程序以查看发生了什么

另一个提示:通常,当我确定代码的正确性并且可以运行但崩溃时,这与在清单(或所有服务)中声明所有Activity并设置所有必需的权限有关。因为在这种情况下,运行该应用程序之前没有明显的错误。

答案 1 :(得分:1)

您已经在全局上声明了aiService

AIService aiService;

无需在onCreate()内再次声明。 替换以下行

AIService aiService = AIService.getService(this, config);

使用方式:

aiService = AIService.getService(this, config);