Android 严重异常异步任务#1

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

我使用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, 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();