我一直在嘗試從SO和其他網站上的大量示例中學習,但我無法弄清爲什麼我一起入侵的示例無法正常工作。我正在構建一個小概念驗證應用程序,用於識別語音並將其作爲POST請求發送到node.js服務器。我已經確認可以使用語音識別功能,並且服務器正在接收來自常規瀏覽器訪問的連接,所以我被認爲是該應用程序本身的問題。我錯過了一些小而愚蠢的東西嗎?沒有錯誤被拋出,但服務器永遠不會識別連接。預先感謝您的任何建議或幫助。用Android發送HTTP POST請求
相關的Java(主要活動和必要的AsyncTask):
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1001) {
if (resultCode == RESULT_OK) {
ArrayList<String> textMatchList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
if (!textMatchList.isEmpty()) {
String topMatch = textMatchList.get(0);
PostTask pt = new PostTask();
pt.execute(topMatch);
}
}
}
}
private class PostTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... data) {
try {
URL url = new URL("http://<ip address>:3000");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoOutput(true);
ContentValues values = new ContentValues();
values.put("data", data[0]);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
StringBuilder sb = new StringBuilder();
sb.append(URLEncoder.encode("data", "UTF-8"));
sb.append("=");
sb.append(URLEncoder.encode(data[0], "UTF-8"));
writer.write(sb.toString());
writer.flush();
writer.close();
os.close();
conn.connect();
return "Text sent: " + data[0];
} catch (IOException e) {
e.printStackTrace();
return "LOL NOPE";
}
}
}
服務器JS:
var http = require('http');
const PORT=3000;
function handleRequest(request, response){
response.end('It Works!! Path Hit: ' + request.url);
console.log("Request got.");
}
var server = http.createServer(handleRequest);
server.listen(PORT, '0.0.0.0');
console.log("Listening on 3000...");
試試您的文章與這個Chrome應用https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo,看看你用的NodeJS代碼200已回覆服務器響應 – zzas11
並返回瀏覽器相同的反應。我甚至不關心數據傳輸,我只是想讓應用程序從應用程序中註冊。 –
你試圖在本地主機上?從仿真器或設備? –