Android 严重异常异步任务#1
我使用json解析将我的php聊天机器人与android连接起来。当我有一个用于文本输入的editText时,代码就会工作。但当我为语音到文本输入实现语音识别时,我的应用程序突然停止了。我得到以下错误Android 严重异常异步任务#1,android,android-asynctask,Android,Android Asynctask,我使用json解析将我的php聊天机器人与android连接起来。当我有一个用于文本输入的editText时,代码就会工作。但当我为语音到文本输入实现语音识别时,我的应用程序突然停止了。我得到以下错误 04-18 00:25:11.928: E/AndroidRuntime(21316): FATAL EXCEPTION: AsyncTask #1 04-18 00:25:11.928: E/AndroidRuntime(21316): Process: com.chatbot.mavis, P
04-18 00:25:11.928: E/AndroidRuntime(21316): FATAL EXCEPTION: AsyncTask #1
04-18 00:25:11.928: E/AndroidRuntime(21316): Process: com.chatbot.mavis, PID: 21316
04-18 00:25:11.928: E/AndroidRuntime(21316): java.lang.RuntimeException: An error occured while executing doInBackground()
04-18 00:25:11.928: E/AndroidRuntime(21316): at android.os.AsyncTask$3.done(AsyncTask.java:300)
04-18 00:25:11.928: E/AndroidRuntime(21316): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
04-18 00:25:11.928: E/AndroidRuntime(21316): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
04-18 00:25:11.928: E/AndroidRuntime(21316): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
04-18 00:25:11.928: E/AndroidRuntime(21316): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-18 00:25:11.928: E/AndroidRuntime(21316): at java.util.concurrent.ThreadPoolExecutor.runWorker
(ThreadPoolExecutor.java:1112)
04-18 00:25:11.928: E/AndroidRuntime(21316):at java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:587)
04-18 00:25:11.928: E/AndroidRuntime(21316):at java.lang.Thread.run(Thread.java:841)
04-18 00:25:11.928: E/AndroidRuntime(21316):Caused by: java.lang.NullPointerException
04-18 00:25:11.928: E/AndroidRuntime(21316):at libcore.net.UriCodec.encode(UriCodec.java:132)
04-18 00:25:11.928: E/AndroidRuntime(21316):at java.net.URLEncoder.encode(URLEncoder.java:57)
04-18 00:25:11.928: E/AndroidRuntime(21316):at com.chatbot.mavis.Speech$GetBotResponse.doInBackground(Speech.java:182)
04-18 00:25:11.928: E/AndroidRuntime(21316):at com.chatbot.mavis.Speech$GetBotResponse.doInBackground(Speech.java:1)
04-18 00:25:11.928: E/AndroidRuntime(21316):at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-18 00:25:11.928: E/AndroidRuntime(21316):at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-18 00:25:11.928: E/AndroidRuntime(21316):... 4 more
这是我的代码:
package com.chatbot.mavis;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import org.json.JSONException;
import org.json.JSONObject;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("InlinedApi")
public class Speech extends Activity {
protected static final int Result_speech = 1;
String usertext;
String ask;
String str_botsay, str_convo_id;
String str_usersay;
TextView tvbt, tvut;
LinearLayout finlins;
LinearLayout ll1, ll2;
ImageView ui, bi;
String TAG_USERSAY = "usersay";
String TAG_BOTSAY = "botsay";
String TAG_CONVO_ID = "convo_id";
JSONParser jParser = new JSONParser();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_speech);
finlins = (LinearLayout) findViewById(R.id.lins);
final ScrollView scvs = (ScrollView) findViewById(R.id.svs);
final Button btns = (Button) findViewById(R.id.button1s);
btns.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ui = new ImageView(v.getContext());
bi = new ImageView(v.getContext());
tvut = new TextView(v.getContext());
tvbt = new TextView(v.getContext());
Intent intent = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
try {
startActivityForResult(intent, Result_speech);
tvut.setText("");
} catch (ActivityNotFoundException e) {
Toast t = Toast.makeText(getApplicationContext(),
"Your device does not support speech to text",
Toast.LENGTH_SHORT);
t.show();
}
}
});
scvs.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
scvs.post(new Runnable() {
public void run() {
scvs.fullScroll(View.FOCUS_DOWN);
}
});
}
});
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("InlinedApi")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case Result_speech: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> text = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
ll1 = new LinearLayout(Speech.this);
ll2 = new LinearLayout(Speech.this);
final LayoutParams lparams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
final LayoutParams lparams2 = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ll1.setLayoutParams(lparams);
ll1.setOrientation(LinearLayout.HORIZONTAL);
ll2.setLayoutParams(lparams);
ll2.setOrientation(LinearLayout.HORIZONTAL);
finlins.addView(ll1);
finlins.addView(ll2);
ui.setLayoutParams(lparams2);
bi.setLayoutParams(lparams2);
tvut.setLayoutParams(lparams);
tvbt.setLayoutParams(lparams);
ll1.addView(ui);
ll1.addView(tvut);
ll2.addView(bi);
ll2.addView(tvbt);
tvut.setTextColor(Color.BLACK);
tvut.setBackgroundResource(R.drawable.user_bubble);
tvbt.setTextColor(Color.BLACK);
tvbt.setBackgroundResource(R.drawable.bot_bubble);
ll1.setPadding(0, 0, 0, 5);
ll2.setPadding(0, 0, 0, 35);
//new GetBotResponse().execute();
ui.setImageResource(R.drawable.user);
ui.setPadding(0, 0, 25, 0);
bi.setImageResource(R.drawable.bot);
bi.setPadding(0, 0, 25, 0);
usertext = text.get(0);
tvut.setText(usertext);
}
new GetBotResponse().execute();
break;
}
}
}
private class GetBotResponse extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
ask = URLEncoder.encode(usertext, "UTF-8");
Log.d("TEST", ask);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String url = "http://192.168.1.3/programo/chatbot/conversation_start.php?format=json&say="
+ ask;
String URL = url.toString();
JSONObject json = jParser.getJSONFromUrlByGet(URL);
try {
String str_usersay = json.getString(TAG_USERSAY);
Log.i("TAG_usersay", str_usersay);
str_botsay = json.getString(TAG_BOTSAY);
Log.i("TAG_botsay", str_botsay);
str_convo_id = json.getString(TAG_CONVO_ID);
Log.i("TAG_convo_id", str_convo_id);
} catch (JSONException e) {
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
tvbt.setText(str_botsay);
}
}
}
package com.chatbot.mavis;
导入java.io.UnsupportedEncodingException;
导入java.net.urlcoder;
导入java.util.ArrayList;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.annotation.SuppressLint;
导入android.annotation.TargetApi;
导入android.app.ActionBar.LayoutParams;
导入android.app.Activity;
导入android.content.ActivityNotFoundException;
导入android.content.Intent;
导入android.graphics.Color;
导入android.os.AsyncTask;
导入android.os.Build;
导入android.os.Bundle;
导入android.speech.RecognizerIntent;
导入android.util.Log;
导入android.view.view;
导入android.view.ViewTreeObserver;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.ScrollView;
导入android.widget.TextView;
导入android.widget.Toast;
@TargetApi(构建版本代码蜂窝)
@SuppressLint(“InlinedApi”)
公开课演讲扩大活动范围{
受保护的静态最终整数结果\u speech=1;
字符串用户文本;
串问;
字符串str_botsay,str_conva_id;
字符串str_usersay;
文本视图tvbt,tvut;
线性布局finlins;
线性布局ll1、ll2;
ImageView界面,bi;
字符串标记_USERSAY=“USERSAY”;
字符串TAG_BOTSAY=“BOTSAY”;
字符串TAG_conva_ID=“conva_ID”;
JSONParser jParser=新的JSONParser();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_speech);
finlins=(LinearLayout)findviewbyd(R.id.lins);
最终ScrollView scvs=(ScrollView)findViewById(R.id.svs);
最终按钮btns=(按钮)findViewById(R.id.button1s);
btns.setOnClickListener(新视图.OnClickListener(){
@SuppressLint(“新API”)
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
ui=新的ImageView(v.getContext());
bi=新的ImageView(v.getContext());
tvut=newtextview(v.getContext());
tvbt=newtextview(v.getContext());
意图=新意图(
识别者(意图、行动、识别、言语);
intent.putExtra(识别器intent.EXTRA_语言_模型,
识别者意图、语言、模型、自由形式);
intent.putExtra(RecognizerIntent.EXTRA_语言,“en-US”);
试一试{
startActivityForResult(意图、结果和演讲);
tvut.setText(“”);
}捕获(ActivityNotFounde异常){
Toast t=Toast.makeText(getApplicationContext(),
“您的设备不支持语音到文本”,
烤面包片(长/短);
t、 show();
}
}
});
scvs.getViewTreeObserver().addOnGlobalLayoutListener(
新建ViewTreeObserver.OnGlobalLayoutListener(){
公共图书馆{
scvs.post(新的Runnable(){
公开募捐{
scvs.fullScroll(视图。焦点向下);
}
});
}
});
}
@TargetApi(构建版本代码蜂窝)
@SuppressLint(“InlinedApi”)
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
开关(请求代码){
个案结果(演讲):{
if(resultCode==RESULT\u OK&&null!=数据){
ArrayList文本=数据
.getStringArrayListExtra(识别器意图.额外结果);
ll1=新的线性布局(Speech.this);
ll2=新的线性布局(Speech.this);
最终布局参数lparams=新布局参数(
LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
最终布局参数lparams2=新布局参数(
LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
ll1.设置布局参数(lparams);
ll1.设置方向(线性布局。水平);
ll2.设置布局参数(lparams);
ll2.设置方向(线性布局。水平);
finlins.addView(ll1);
finlins.addView(ll2);
ui.setLayoutParams(lparams2);
bi.setLayoutParams(lparams2);
设置布局参数(lparams);
设置布局参数(lparams);
ll1.addView(ui);
ll1.addView(tvut);
ll2.addView(bi);
ll2.addView(tvbt);;
tvut.setTextColor(Color.BLACK);
tvut.setBackgroundResource(R.drawable.user\u bubble);
tvbt.setTextColor(Color.BLACK);
tvbt.setBackgroundResource(R.drawable.bot_bubble);
ll1.设置填充(0,0,0,5);
ll2.设置填充(0,0,0,35);
//新建GetBotResponse().execute();
ui.setImageResource(R.drawable.user);
设置填充(0,0,25,0);
bi.setImageResource(R.drawable.bot);
设置填充(0,0,25,0);
usertext=text.get(0);
设置文本(用户文本);
}
新建GetBotResponse().execute();
打破
}
}
}
私有类GetBotResponse扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
试一试{
ask=URLEncoder.encode(用户文本,“UTF-8”);
Log.d(“测试”,询问);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
字符串url=”http://192.168.1.3/programo/chatbot/conversation_start.php?format=json&say="
+询问;
字符串URL=URL.toString();