Próbowałem uczyć się z wielu przykładów na SO i innych witrynach, ale nie mogę zrozumieć, dlaczego przykład zhackowany razem nie działa. Buduję niewielką aplikację typu proof-of-concept, która rozpoznaje mowę i wysyła ją (tekst) jako żądanie POST do serwera node.js. Rozpoznanie mowy, które potwierdziłem, działa, a serwer otrzymuje połączenia z regularnej wizyty w przeglądarce, więc jestem przekonany, że problem dotyczy samej aplikacji. Czy brakuje mi czegoś małego i głupiego? Nie są zgłaszane żadne błędy, ale serwer nigdy nie rozpoznaje połączenia. Z góry dziękuję za radę lub pomoc.Wysyłanie żądania HTTP Post z Androidem
Stosowna (główna działalność i potrzeby AsyncTask) Java:
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";
}
}
}
Server 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...");
Spróbuj tego posta chromowanymi aplikacjami https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo i zobaczyć nodejs odpowiedzi serwera – zzas11
odpowiedział kodem 200 i wrócił tą samą odpowiedź jak przeglądarce . Nie przejmuję się jeszcze transmisją danych, chcę tylko, żeby serwer trafił z aplikacji do rejestracji. –
Czy próbujesz trafić na localhost? z emulatora lub urządzenia? –