отправка объекта JSON на HTTP-сервер в Android - PullRequest
6 голосов
/ 15 июня 2011

Я отправляю объект 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 ]

13 голосов
/ 15 июня 2011

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

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

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

Если это не сработает, вам может понадобиться просмотреть журналы сервера, чтобы увидетьпочему тебе не нравится твой ПОЧТА.

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

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

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

1 голос
/ 05 января 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...