- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了这个语音识别的例子。我为 httppost 命令添加了一些代码。我想,当我说“狗”这个词时,我可以创建一个 httppost。一切正常,但是当我说 DOG 这个词并且它应该执行我的 httppost 时,我收到这些错误:
05-25 21:31:24.889: D/AndroidRuntime(15191): Shutting down VM
05-25 21:31:24.889: W/dalvikvm(15191): threadid=1: thread exiting with uncaught exception (group=0x40aab300)
05-25 21:31:24.909: E/AndroidRuntime(15191): FATAL EXCEPTION: main
05-25 21:31:24.909: E/AndroidRuntime(15191): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { (has extras) }} to activity {com.rakesh.voicerecognitionexample/com.rakesh.voicerecognitionexample.VoiceRecognitionActivity}: android.os.NetworkOnMainThreadException
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.app.ActivityThread.deliverResults(ActivityThread.java:3267)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3310)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.app.ActivityThread.access$1100(ActivityThread.java:142)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.os.Looper.loop(Looper.java:137)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.app.ActivityThread.main(ActivityThread.java:4931)
05-25 21:31:24.909: E/AndroidRuntime(15191): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 21:31:24.909: E/AndroidRuntime(15191): at java.lang.reflect.Method.invoke(Method.java:511)
05-25 21:31:24.909: E/AndroidRuntime(15191): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
05-25 21:31:24.909: E/AndroidRuntime(15191): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
05-25 21:31:24.909: E/AndroidRuntime(15191): at dalvik.system.NativeStart.main(Native Method)
05-25 21:31:24.909: E/AndroidRuntime(15191): Caused by: android.os.NetworkOnMainThreadException
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
05-25 21:31:24.909: E/AndroidRuntime(15191): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
05-25 21:31:24.909: E/AndroidRuntime(15191): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
05-25 21:31:24.909: E/AndroidRuntime(15191): at java.net.InetAddress.getAllByName(InetAddress.java:214)
05-25 21:31:24.909: E/AndroidRuntime(15191): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
05-25 21:31:24.909: E/AndroidRuntime(15191): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
05-25 21:31:24.909: E/AndroidRuntime(15191): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
05-25 21:31:24.909: E/AndroidRuntime(15191): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
05-25 21:31:24.909: E/AndroidRuntime(15191): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-25 21:31:24.909: E/AndroidRuntime(15191): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-25 21:31:24.909: E/AndroidRuntime(15191): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-25 21:31:24.909: E/AndroidRuntime(15191): at com.rakesh.voicerecognitionexample.VoiceRecognitionActivity.cici(VoiceRecognitionActivity.java:157)
05-25 21:31:24.909: E/AndroidRuntime(15191): at com.rakesh.voicerecognitionexample.VoiceRecognitionActivity.onActivityResult(VoiceRecognitionActivity.java:113)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.app.Activity.dispatchActivityResult(Activity.java:5192)
05-25 21:31:24.909: E/AndroidRuntime(15191): at android.app.ActivityThread.deliverResults(ActivityThread.java:3263)
05-25 21:31:24.909: E/AndroidRuntime(15191): ... 11 more
这是我的代码:
package com.rakesh.voicerecognitionexample;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;
public class VoiceRecognitionActivity extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001;
private EditText metTextHint;
private ListView mlvTextMatches;
private Spinner msTextMatches;
private Button mbtSpeak;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voice_recognition);
metTextHint = (EditText) findViewById(R.id.etTextHint);
mlvTextMatches = (ListView) findViewById(R.id.lvTextMatches);
msTextMatches = (Spinner) findViewById(R.id.sNoOfMatches);
mbtSpeak = (Button) findViewById(R.id.btSpeak);
}
public void checkVoiceRecognition() {
// Check if voice recognition is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() == 0) {
mbtSpeak.setEnabled(false);
Toast.makeText(this, "Voice recognizer not present",
Toast.LENGTH_SHORT).show();
}
}
public void speak(View view) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// Specify the calling package to identify your application
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass()
.getPackage().getName());
// Display an hint to the user about what he should say.
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, metTextHint.getText()
.toString());
// Given an hint to the recognizer about what the user is going to say
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
// If number of Matches is not selected then return show toast message
if (msTextMatches.getSelectedItemPosition() == AdapterView.INVALID_POSITION) {
Toast.makeText(this, "Please select No. of Matches from spinner",
Toast.LENGTH_SHORT).show();
return;
}
int noOfMatches = Integer.parseInt(msTextMatches.getSelectedItem()
.toString());
// Specify how many results you want to receive. The results will be
// sorted where the first result is the one with higher confidence.
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, noOfMatches);
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE)
//If Voice recognition is successful then it returns RESULT_OK
if(resultCode == RESULT_OK) {
ArrayList<String> textMatchList = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
if (!textMatchList.isEmpty()) {
// If first Match contains the 'search' word
// Then start web search.
if (textMatchList.get(0).contains("search")) {
String searchQuery = textMatchList.get(0).replace("search",
" ");
Intent search = new Intent(Intent.ACTION_WEB_SEARCH);
search.putExtra(SearchManager.QUERY, searchQuery);
startActivity(search);
} else if (textMatchList.get(0).contains("dog")) {
postTo();
} else {
// populate the Matches
mlvTextMatches
.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
textMatchList));
}
}
//Result code for various error.
}else if(resultCode == RecognizerIntent.RESULT_AUDIO_ERROR){
showToastMessage("Audio Error");
}else if(resultCode == RecognizerIntent.RESULT_CLIENT_ERROR){
showToastMessage("Client Error");
}else if(resultCode == RecognizerIntent.RESULT_NETWORK_ERROR){
showToastMessage("Network Error");
}else if(resultCode == RecognizerIntent.RESULT_NO_MATCH){
showToastMessage("No Match");
}else if(resultCode == RecognizerIntent.RESULT_SERVER_ERROR){
showToastMessage("Server Error");
}
super.onActivityResult(requestCode, resultCode, data);
}
void showToastMessage(String message){
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
public void postTo()
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mysite.com/script.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("message", "cracanel"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
最佳答案
它是一个 NetworkOnMainThread 异常。您无法在主 ui 线程上运行网络相关操作。为此,您应该使用 asynctask。
http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
对于异步任务
http://developer.android.com/reference/android/os/AsyncTask.html
你也可以创建自己的线程并执行httppost。但请确保不要在后台线程上更新 ui。 Asyntask 让您更轻松
示例:
class TheTask extends AsyncTask<Void,Void,Void>
{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
// invoked on the ui thread.
// display progress dialog
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//invoked on the ui thread
// dismiss progress dialog
// result of doinbackground computation is a parameter to this
// can update ui here
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
//invoked on the background thread
// do not update ui
// execute http post here
postTo(); // call your post method here
return null;
}
}
用法:
new TheTask().execute(); // load on ui thread
可以向asynctask的构造函数传递参数。您也可以直接向doinbackground传递参数。
关于java - Android 语音命令执行 httppost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752727/
我不明白为什么需要使用 [HttpPost("[action]")] 而不是 [HttpPost]? 如果使用[HttpPost("[action]")],那么来自角度客户端的请求会触发 Contro
我不明白为什么需要使用 [HttpPost("[action]")] 而不是 [HttpPost]? 如果使用[HttpPost("[action]")],那么来自角度客户端的请求会触发 Contro
所以我们有[HttpPost],这是一个可选属性。我知道这会限制调用,因此只能通过 HTTP POST 请求进行调用。我的问题是我为什么要这样做? 最佳答案 想象一下以下情况: [HttpGet] p
在 Scott Hanselman 的书中(第 1 章),他为我们提供了两个选项来实现 Create 操作方法的 [HttpPost]。 第一个依赖于 TryUpdateModel 根据传入的表单字段
我正在从 Android 应用程序向服务器发送 JSON 数据,我在人们添加的示例中看到: httpPost.setHeader("Content-type", "application/json")
- - - 更新 能够通过使用 UsernamePasswordCredentials 类来修复它 代码如下所示 val 客户端 = 新的 DefaultHttpClient client.getCr
这个问题让我很恼火。我正在重复使用适用于其他项目/类但不适用于我当前项目的相同代码。我所做的只是更改变量(POST 值和 EditText 名称)。但没有成功。 import java.util.Ar
这是我的代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
我正在为黑莓开发应用程序,我需要向我的服务器发送一个 Http 发布请求。我正在使用模拟器来测试我的应用程序,我发现这段代码是为了发送请求: http://vasudevkamath.techfiz.
我希望能够使用参数查看完整的 HttpClient/HttpPost URI。我不确定如何将其输出到我的控制台。 HttpClient httpclient = HttpClients.createD
我有一个带有 httpPost 属性的 ActionResult。如果我没有记错的话,当用户从 DateTimePicker 中选择日期时,我需要此属性。就我而言,我有 2 个日期时间选择器,类型为
嗨:)我遇到了一个简单的问题,但非常烦人。我正在尝试使用 HttpPost 类发送 http post 请求 这是返回InputStream的方法的一部分: HttpClient
我正在尝试通过 android studio 中的 java 将发布请求发送到我的 PHP 页面 首先我尝试了 httppost,但按下该键后应用程序崩溃了 然后我读到我必须使用新线程,我这样做了,但
我正在尝试将我的应用程序设置为在 HttpPost 上 3 秒后抛出超时异常。我正在从 ASyncTask 执行此请求。出于某种原因,即使我给它一个不存在的域,它也会挂起大约一两分钟,然后抛出最后一个
我正在尝试从 Android 应用程序中向我的 Google App Engine 应用程序发送 POST 请求,以便将文件上传到 blobstore 并将一些元数据上传到数据存储区。我构建了一个可以
在我的 CountryActivity.java 中,我有一个 HttpRequest 来检索维基百科的 json 信息。这是我使用 AsyncTask 的代码: private class D
我的 MainAcitivity 中有以下代码,用于使用方法 jsnrqstr.sendRequest(username, password, URL); 获取的用户名和密码登录到应用程序/p> lo
我有一个网页用 1 (true) 或 0 (false) 响应日志记录请求。当我尝试用另一个网页调用请愿书时,结果是正确的,它可以是 0 或 1。但是当我用 Android 应用程序调用它时,结果总是
在我的应用程序中,我必须从 4 个不同的 url 获取数据,然后在获取数据完成后,我必须按特定顺序显示项目。我正在使用 HttoPost 发送发布请求。我在不同的线程中分别发送 4 个请求。当线程获取
我尝试了所有可能的方法,但仍然出现以下错误 -1.无法解析符号ClientProtocolException2.无法解析符号HttpPost3.无法解析符号DefaultHttpClient JSON
我是一名优秀的程序员,十分优秀!