我最近使用Android Studio制作了一个应用,其中集成了Dialogflow API。
我的代码没有错误,但是,当我在模拟器上运行该应用时,该应用崩溃了。
我正在跑步:
我的项目级别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() {
}
}
现在,当我在模拟器上运行此代码时。该应用程序崩溃了。语法没有任何错误。我不太确定这是怎么回事。
答案 0 :(得分:3)
应用程序崩溃的原因可能是编译时错误或运行时错误。
编译时错误可以是语法错误,找不到类错误,重载错误,这些错误由Android Studio显示和记录。在您的情况下,由于正确地编译了您的应用并将其安装在设备上,因此不会出现编译时错误。
使用(运行)应用程序时发生运行时错误。它们主要是逻辑错误或变量声明错误。就您而言,问题可能仅在此。
当您运行应用程序时,代码将被执行,逻辑也将被执行。因此,如果您在代码中给出了错误的逻辑,例如无限循环,传递字符串而不是整数数据类型等等,那么应用程序将崩溃。
您必须检查日志以查看导致崩溃的异常是什么。在日志中(IDE的下部),将有Exception的名称,启动它的元素,并且还将有指向发现问题的代码行的链接。
如果仍然无法通过这种方式找到错误,则可以在希望在调试过程中停止应用程序的代码行的左侧设置断点,然后在调试模式下运行该应用程序以查看发生了什么
另一个提示:通常,当我确定代码的正确性并且可以运行但崩溃时,这与在清单(或所有服务)中声明所有Activity并设置所有必需的权限有关。因为在这种情况下,运行该应用程序之前没有明显的错误。
答案 1 :(得分:1)
您已经在全局上声明了aiService
:
AIService aiService;
无需在onCreate()
内再次声明。 替换以下行:
AIService aiService = AIService.getService(this, config);
使用方式:
aiService = AIService.getService(this, config);