Loopj Отправить запрос с телом

Дорогие друзья, я использую Loopj и мне это очень нравится. Это делает мою жизнь проще. Теперь я хочу опубликовать json в теле запроса на публикацию. Пожалуйста, проверьте, что я делаю неправильно, мой код ниже.

params.put("SaleOrderItems", mJsonArrayOfObject.toString());
    params.put("CustomerReferenceNumber", "asdf");
    // /*mSaleOrder.getmCustomerReferenceNo()*/);
    params.put("RecordType", "HOS");
    params.put("DeliveryDate", "2012-12-28T12:04:27.3553985+01:00"); // mSaleOrder.getmDeliveryDate());
    params.put("SellToCustomerNumber", "user");

Тогда я звоню так.

mAsyncHttpClient.post(WEBCONSTANTS.ORDER_SERVICE_SAVE_ORDER, mParams,
            new AsyncHttpResponseHandler(){};

я получил эту ошибку

{"Message":"No HTTP resource was found that matches the request URI}

Подскажите, пожалуйста, как отправить json-массив объектов в теле почтового запроса с помощью LoopJ. с уважением,


person DroidEngineer    schedule 18.12.2012    source источник
comment
Похоже, возникла проблема с используемым вами URL-адресом (WEBCONSTANTS.ORDER_SERVICE_SAVE_ORDER). Сначала проверьте POST с помощью браузера (расширение, например, Advanced REST Client).   -  person Sangharsh    schedule 11.07.2013


Ответы (1)


Я думаю, это то, что вы ищете:

String url = "<your site url>";
JSONObject jdata = new JSONObject();
try {
  jdata.put("key1", val1);
  jdata.put("key2", val2);
} catch (Exception ex) {
  // json exception
}
StringEntity entity;
try {
  entity = new StringEntity(jdata.toString());
  client.post(getBaseContext(), url, entity, "application/json", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
      JSONObject res;
      try {
        res = new JSONObject(response);
        Log.d("debug", res.getString("some_key")); // this is how you get a value out
      } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }

  });
} catch (UnsupportedEncodingException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
}
person Uri    schedule 26.12.2012
comment
Да, но это не работает, я думаю, что сообщение loopj не публикует полную строку на сервере. Возможно, он ее обрезал. - person DroidEngineer; 02.01.2013
comment
Приведенный выше код работает для меня, какое сообщение об ошибке вы получаете? - person Uri; 03.01.2013
comment
** сервер не получает строку http, которую я отправляю в теле сообщения. Я делаю это так: AsyncHttpClient mAsyncHttpClient = new AsyncHttpClient(); mAsyncHttpClient.addHeader (тип содержимого:, приложение/json); mAsyncHttpClient.addHeader(Принять, приложение/json); Gson mGson = новый Gson(); окончательная строка mGSON = mGson.toJson(ObjectToSendToServer); mAsyncHttpClient .post(mContext, ServerIPAddress/SaveSaleOrderWithJson, (новый StringEntity(mGSON)), application/json, новый AsyncHttpResponseHandler() {} ** - person DroidEngineer; 03.01.2013
comment
Я не уверен, что не так, но вы можете попробовать это по-моему. Также вы можете отредактировать вопрос с кодом сервера, возможно, сервер - это что-то еще. - person Uri; 03.01.2013