无法更新onActivityResult内的EditText中的文本

时间:2014-12-24 07:48:50

标签: java android speech-recognition voice-recognition

我正在尝试在Android上使用语音识别。以下是我的代码。

这是负责启动语音识别的Button的代码。     speak.setOnClickListener(new OnClickListener(){

@Override
    public void onClick(View v)
    {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "City Name Please?");
        startActivityForResult(intent, REQUEST_CODE);
    }});

这是一个onActivityResult方法。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        ArrayList<String> matches_Text = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        Log.v("Results", matches_Text.get(0).toString());

//Update EditText cityname here

        String normalized_cityname = matches_Text.get(0).toString().trim();
        normalized_cityname = normalized_cityname.replace(" ","%20");
        try {
            getResponseString("http://api.openweathermap.org/data/2.5/weather?q="+normalized_cityname+"&units=metric", true);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

代码工作正常,但我现在遇到两个问题,我担心它们可能有关系。

  1. 如果我尝试使用EditText更新cityname实例cityname.setText(matches_Text.get(0).toString())中的文字,则会导致应用崩溃。
  2. 如果我现在点击speak按钮,则会显示Google语音对话框,但会显示can't reacg google at the moment
  3. 请建议我该怎么办?

    还添加了getResponseString方法。

    public void getResponseString(String Url, boolean IsCalledOnVoiceInput) throws IOException, JSONException {
            String temperature="";
            String city;
            String country;
            String weather_main, weather_description;
            MyAsyncTask xxx = new MyAsyncTask();
            try {
                String responseString = xxx.execute(Url).get();
    
                TextView txtTemp = (TextView)findViewById(R.id.txt_temp);
                TextView txtCity = (TextView)findViewById(R.id.txt_CityName);
                TextView txtWeatherMain = (TextView)findViewById(R.id.textView2);
                TextView txtWeatherDescription = (TextView)findViewById(R.id.textView3);
    
                JSONObject reader = new JSONObject(responseString);
                JSONObject main  = reader.getJSONObject("main");
    
                temperature = main.getString("temp");
                Log.v("temperarure",temperature);
    
                city = reader.getString("name");
                Log.v("city",city);
    
                JSONObject sys  = reader.getJSONObject("sys");
                country = sys.getString("country");
                Log.v("country",country);
    
                JSONArray weather = reader.getJSONArray("weather");
                JSONObject weather_obj = weather.getJSONObject(0);
                weather_main = weather_obj.getString("main");
                weather_description = weather_obj.getString("description");
    
                txtTemp.setText(temperature+" °C");
                txtCity.setText(city+" ("+country+")");
                txtWeatherMain.setText(weather_main);
                txtWeatherDescription.setText(weather_description);
    
                if(IsCalledOnVoiceInput)
                    Speak_Weather_Data(city,temperature,weather_main,weather_description);
    
    
    
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (JSONException e){
                e.printStackTrace();
            }
        }
    

    这是日志输出

        12-24 13:36:06.050  12164-12164/samarth.learning.http D/dalvikvm﹕ Late-enabling CheckJNI
    12-24 13:36:06.300  12164-12164/samarth.learning.http D/Network﹕ Network
    12-24 13:36:06.300  12164-12164/samarth.learning.http V/Lat﹕ 28.8331443
    12-24 13:36:06.300  12164-12164/samarth.learning.http V/Long﹕ 78.7717138
    12-24 13:36:06.360  12164-12164/samarth.learning.http D/libEGL﹕ loaded /vendor/lib/egl/libEGL_adreno.so
    12-24 13:36:06.370  12164-12164/samarth.learning.http D/libEGL﹕ loaded /vendor/lib/egl/libGLESv1_CM_adreno.so
    12-24 13:36:06.380  12164-12164/samarth.learning.http D/libEGL﹕ loaded /vendor/lib/egl/libGLESv2_adreno.so
    12-24 13:36:06.380  12164-12164/samarth.learning.http I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:316>: EGL 1.4 QUALCOMM build:  (CL4169980)
        OpenGL ES Shader Compiler Version: 17.01.10.SPL
        Build Date: 11/04/13 Mon
        Local Branch:
        Remote Branch:
        Local Patches:
        Reconstruct Branch:
    12-24 13:36:06.430  12164-12164/samarth.learning.http D/OpenGLRenderer﹕ Enabling debug mode 0
    12-24 13:36:06.531  12164-12164/samarth.learning.http E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
    12-24 13:36:06.531  12164-12164/samarth.learning.http E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
    12-24 13:36:08.232  12164-12164/samarth.learning.http W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
    12-24 13:36:18.844  12164-12164/samarth.learning.http V/Results﹕ new delhi
    12-24 13:36:18.844  12164-12164/samarth.learning.http D/AndroidRuntime﹕ Shutting down VM
    12-24 13:36:18.844  12164-12164/samarth.learning.http W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4157c8b0)
    12-24 13:36:18.854  12164-12164/samarth.learning.http E/AndroidRuntime﹕ FATAL EXCEPTION: main
        java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1234, result=-1, data=Intent { (has extras) }} to activity {samarth.learning.http/samarth.learning.http.MainActivity}: java.lang.NullPointerException
                at android.app.ActivityThread.deliverResults(ActivityThread.java:3462)
                at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505)
                at android.app.ActivityThread.access$1100(ActivityThread.java:150)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
                at android.os.Handler.dispatchMessage(Handler.java:99)
                at android.os.Looper.loop(Looper.java:213)
                at android.app.ActivityThread.main(ActivityThread.java:5225)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:525)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
                at dalvik.system.NativeStart.main(Native Method)
         Caused by: java.lang.NullPointerException
                at samarth.learning.http.MainActivity.onActivityResult(MainActivity.java:160)
                at android.app.Activity.dispatchActivityResult(Activity.java:5322)
                at android.app.ActivityThread.deliverResults(ActivityThread.java:3458)
                at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505)
                at android.app.ActivityThread.access$1100(ActivityThread.java:150)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
                at android.os.Handler.dispatchMessage(Handler.java:99)
                at android.os.Looper.loop(Looper.java:213)
                at android.app.ActivityThread.main(ActivityThread.java:5225)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:525)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
                at dalvik.system.NativeStart.main(Native Method)
    12-24 13:36:22.558  12164-12164/samarth.learning.http I/Process﹕ Sending signal. PID: 12164 SIG: 9
    

1 个答案:

答案 0 :(得分:0)

这是你的意思吗?

我认为matches_Text有时候是NULL?!如何添加

if(matches_Text == null){
   Log.v("Results","matches_Text is NULL!"); 
   return;
}

ArrayList<String> matches_Text = da...

之后添加上述代码