下面是类的代码:
private class WebServiceOdbierz extends AsyncTask<String, Void, String>{
// okienko dialogowe, które każe użytkownikowi czekać
private ProgressDialog dialog = new ProgressDialog(MainActivity.this);
// metoda wykonywana jest zaraz przed główną operacją (doInBackground())
// mamy w niej dostęp do elementów UI
@Override
protected void onPreExecute() {
// wyświetlamy okienko dialogowe każące czekać
dialog.setMessage("Czekaj...");
dialog.show();
}
// główna operacja, która wykona się w osobnym wątku
// nie ma w niej dostępu do elementów UI
@Override
protected String doInBackground(String... urls) {
try {
// zakładamy, że jest tylko jeden URL
URL url = new URL(urls[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// timeout w ms
connection.setReadTimeout(3000);
connection.setConnectTimeout(4000);
// zezwolenie na wysyłanie danych
connection.setDoOutput(true);
// ustawienie typu wysyłanych danych
connection.setRequestProperty("Content-Type", "application/json;");
//ustawienie metody
connection.setRequestMethod("POST");
// stworzenie obiektu do wysłania
JSONObject data = new JSONObject();
data.put("zrodlo",zrodlo);
data.put("wartosc", "wszystko");
data.put("moment", "100");
//if(tryb == "true") {
// wysłanie obiektu
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(connection.getOutputStream(),
"UTF-8"));
writer.write(data.toString());
writer.close();
// }
//////////////////////////////////////////
// na tym etapie obiekt został wysłany
// i dostaliśmy odpowiedź serwera
//////////////////////////////////////////
if (connection.getResponseCode() == 406) {
throw new Exception("blad 406");
}
// sprawdzenie kodu odpowiedzi, 200 = OK
// pobranie danych do InputStream
InputStream in = new BufferedInputStream(
connection.getInputStream());
// konwersja InputStream na String
// wynik będzie przekazany do metody onPostExecute()
return streamToString(in);
} catch (Exception e) {
// obsłuż wyjątek
Log.d(MainActivity.class.getName(), e.toString());
return null;
}
}
// metoda wykonuje się po zakończeniu metody głównej,
// której wynik będzie przekazany;
// w tej metodzie mamy dostęp do UI
@Override
protected void onPostExecute(String result) {
// chowamy okno dialogowe
dialog.dismiss();
//////////////////////////////////////////// ODBIOR DANYCH
try {
// reprezentacja obiektu JSON w Javie
JSONObject json = new JSONObject(result);
//trybRec = json.optString("tryb");
Temperatura = json.optString("Temperatura");
CO2 = json.optString("CO2");
Swiatlo = json.optString("Swiatlo");
Wilgotnosc = json.optString("Wilgotnosc");
Lampy = json.optString("Lampy");
Ogrzewanie = json.optString("Grzejniki");
Pompa = json.optString("Pompa");
Rolety = json.optString("Rolety");
zaworCO2 = json.optString("ZaworCO2");
// Jak będzie komunikacja działać
updateLedsAndText();
} catch (Exception e) {
// obsłuż wyjątek
Log.d(MainActivity.class.getName(), e.toString());
}
}
}
我尝试将POST更改为GET但没有效果 在工作代码下面:
private class WebServiceWyslij extends AsyncTask<String, Void, String> {
// okienko dialogowe, które każe użytkownikowi czekać
private ProgressDialog dialog = new ProgressDialog(MainActivity.this);
// metoda wykonywana jest zaraz przed główną operacją (doInBackground())
// mamy w niej dostęp do elementów UI
@Override
protected void onPreExecute() {
// wyświetlamy okienko dialogowe każące czekać
dialog.setMessage("Czekaj...");
dialog.show();
}
// główna operacja, która wykona się w osobnym wątku
// nie ma w niej dostępu do elementów UI
@Override
protected String doInBackground(String... urls) {
try {
// zakładamy, że jest tylko jeden URL
URL url = new URL(urls[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// timeout w ms
connection.setReadTimeout(5000);
connection.setConnectTimeout(8000);
// zezwolenie na wysyłanie danych
connection.setDoOutput(true);
// ustawienie typu wysyłanych danych
connection.setRequestProperty("Content-Type", "application/json;");
//ustawienie metody
connection.setRequestMethod("POST");
// stworzenie obiektu do wysłania
JSONObject data = new JSONObject();
data.put("zrodlo",zrodlo);
data.put("tryb",tryb);
/*
data.put("Temperatura", Temperatura);
data.put("CO2", CO2);
data.put("Światło", Swiatlo);
data.put("Wilgotność", Wilgotnosc);
*/
data.put("moment","2016-01-01 12:00:00");
data.put("Lampy", Lampy);
data.put("Rolety", Rolety);
data.put("Grzejniki", Ogrzewanie);
data.put("Pompa", Pompa);
data.put("ZaworCO2", zaworCO2);
// wysłanie obiektu
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(connection.getOutputStream(),
"UTF-8"));
writer.write(data.toString());
writer.close();
//////////////////////////////////////////
// na tym etapie obiekt został wysłany
// i dostaliśmy odpowiedź serwera
//////////////////////////////////////////
// sprawdzenie kodu odpowiedzi, 200 = OK
if (connection.getResponseCode() != 200) {
throw new Exception("Bad Request");
}
// pobranie danych do InputStream
InputStream in = new BufferedInputStream(
connection.getInputStream());
// konwersja InputStream na String
// wynik będzie przekazany do metody onPostExecute()
if(!(streamToString(in).length()>0)){
throw new Exception("odebrales pustego stringa");
}
return streamToString(in);
} catch (Exception e) {
// obsłuż wyjątek
Log.d(MainActivity.class.getSimpleName(), e.toString());
return null;
}
}
// metoda wykonuje się po zakończeniu metody głównej,
// której wynik będzie przekazany;
// w tej metodzie mamy dostęp do UI
@Override
protected void onPostExecute(String result) {
// chowamy okno dialogowe
dialog.dismiss();
//////////////////////////////////////////// ODBIOR DANYCH
try {
// reprezentacja obiektu JSON w Javie
JSONObject json = new JSONObject(result);
} catch (Exception e) {
// obsłuż wyjątek
Log.d(MainActivity.class.getSimpleName(), e.toString());
}
}
}
答案 0 :(得分:0)
您是否尝试添加
connection.setRequestProperty("Accept", "application/json");
设置Content-Type
后到你的POST?