Отправка объекта JSON на HTTP-сервер в Android

Я отправляю объект JSON на HTTP-сервер, используя следующий код.

Главное, чтобы я тоже отправлял логические значения.

public void getServerData() throws JSONException, ClientProtocolException, IOException {

    ArrayList<String> stringData = new ArrayList<String>();
    DefaultHttpClient httpClient = new DefaultHttpClient();
    ResponseHandler <String> resonseHandler = new BasicResponseHandler();
    HttpPost postMethod = new HttpPost("http://consulting.for-the.biz/TicketMasterDev/TicketService.svc/SaveCustomer");

    JSONObject json = new JSONObject();
    json.put("AlertEmail",true);
    json.put("APIKey","abc123456789");
    json.put("Id",0);
    json.put("Phone",number.getText().toString());
    json.put("Name",name.getText().toString());
    json.put("Email",email.getText().toString());
    json.put("AlertPhone",false);      
    postMethod.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));
    String response = httpClient.execute(postMethod,resonseHandler);
    Log.e("response :", response);
    }

но это показывает исключение в строке

String response = httpClient.execute(postMethod,resonseHandler);

как

org.apache.http.client.HttpResponseException: Bad Request

Может кто-нибудь мне помочь.

2 ответа

Решение

Плохой запрос - это сервер, который говорит, что ему не нравится что-то в вашем POST.

Единственная очевидная проблема, которую я вижу, это то, что вы не сообщаете серверу, что отправляете ему JSON, поэтому вам может потребоваться установить заголовок Content-Type, чтобы указать, что тело application/json:

postMethod.setHeader( "Content-Type", "application/json" );

Если это не сработает, вам может понадобиться просмотреть журналы сервера, чтобы понять, почему ему не нравится ваш POST.

Если у вас нет прямого доступа к журналам сервера, вам необходимо связаться с владельцем сервера, чтобы попытаться отладить что-либо. Возможно, формат вашего JSON немного неправильный, отсутствует обязательное поле или что-то еще.

Если вы не можете получить доступ к владельцу сервера, вы можете попробовать использовать перехватчик пакетов, такой как WireShark, для захвата пакетов как из вашего приложения, так и из успешного POST, и сравните два из них, чтобы попытаться выработать их. Какая разница. Это может быть немного похоже на поиск иголки в стоге сена, особенно для больших тел.

Если вы не можете получить пример успешного POST, то вы довольно хорошо набиты, поскольку у вас нет точки отсчета.

Это может быть нетехническим, но String response = httpClient.execute(postMethod,- >nexseHandler); Здесь есть орфографическая ошибка в имени переменной, используйте responseHandler(определено выше)

Другие вопросы по тегам