2015-06-02 21 views
8

JSO'yu POST olarak yerel sunucuya LoopJ'in AsndroidAsyncHttpt ile göndermek istiyorum. Bu yöntemi kullanıyorum: kodumda public void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler) ama çalışmıyor.JSON bir POST isteği olarak sunucuya gönder AsyncHttpClient

private void loginUser() throws JSONException, UnsupportedEncodingException { 
    String login = textLogin.getText().toString(); 
    String password = textPassword.getText().toString(); 

    JSONObject jsonObject = new JSONObject(); 
    if(Utility.isNotNull(login) && Utility.isNotNull(password)) { 
     jsonObject.put("username", login); 
     jsonObject.put("password", password); 
     invokeWS(jsonObject); 
    } 
    else{ 
     Toast.makeText(getApplicationContext(), "Proszę wypełnić wszystkie pola!", Toast.LENGTH_LONG).show(); 
    } 
} 

private void invokeWS(JSONObject jsonObject) throws UnsupportedEncodingException { 
    StringEntity entity = new StringEntity(jsonObject.toString()); 
    AsyncHttpClient client = new AsyncHttpClient(); 

    Log.i("SER", "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth" + entity); 
    Log.i("SER", "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth" + jsonObject); 

    client.post(getApplicationContext(), "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth", entity, "application/json", new JsonHttpResponseHandler() { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, JSONObject obj) { 
      try { 
       Log.i("SER", "HERE!"); 
       String login = obj.getString("login"); 
       int ID = obj.getInt("id"); 

       //user.setUserId(obj.getInt("userid")); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       Toast.makeText(getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { 
      if (statusCode == 404) { 
       Toast.makeText(getApplicationContext(), "404 - Nie odnaleziono serwera!", Toast.LENGTH_LONG).show(); 
      } else if (statusCode == 500) { 
       Toast.makeText(getApplicationContext(), "500 - Coś poszło nie tak po stronie serwera!", Toast.LENGTH_LONG).show(); 
      } else if (statusCode == 403) { 
       Toast.makeText(getApplicationContext(), "Podano niepoprawne dane!", Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(getApplicationContext(), throwable.toString(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
} 

Benim Logs Tamam görünüyor: İşte benim kodudur

http://MY_IP_ADDRESS:8080/silownia_java/rest/login/[email protected] 
http://MY_IP_ADDRESS:8080/silownia_java/rest/login/auth{"username":"barni","password":"12345"} 

Ama böyle hata alıyorum: Ben bu sunucu herhangi bir isteği almaz biliyorum Additionaly

org.apache.http.client.HttpResponseException: Unsupported Media Type 

. Peki neden böyle olabilir?

+2

başka bir 'localhost' ... Sunucuda aygıt var mı? – Selvin

+0

Evet, elbette sadece 'stackoverflow' için localhost olarak değiştirdim, çünkü ip adresimi göstermek istemedim. Sunucunun yanıt verdiğini biliyorum, çünkü 'istekleri' istekleri işe yarıyor. – user3448282

+0

Örnek yanıt: '{" oturum açma ":" barni "," id ":" 1 "}' ama bildiğim kadarıyla, JSON değil sadece dizeyle oluşturuluyor, sorun olabilir mi? – user3448282

cevap

11

Bunu, entity nesnesine başlık bilgileri ekleyerek çözdüm.

ByteArrayEntity entity = new ByteArrayEntity(jsonObject.toString().getBytes("UTF-8")); 
entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
+0

teşekkürler benim için çok çalıştı! 1 ile – tomsoft

+0

.... benim zamandan tasarruf için bunu :) – user3448282

+0

Teşekkür duymak güzel teşekkürler –

İlgili konular