Я работаю в приложении для Android, которое должно отправлять электронную почту пользователя с помощью почтового метода. Конечная точка API находится по адресу https://api-iddog.idwall.co/, когда я уже запускаю некоторые тесты и смогли получить значения отсюда. Я использую библиотеку Loopj.
Однако мне было поручено использовать эту конечную точку:
https://api-iddog.idwall.co/signup
Руководство по документации показывает, что мне нужно построить метод POST, используя следующие параметры:
используя заголовок Content-Type: application/json
и URL сообщения должен быть примерно таким:
Имея все это в виду, я создал метод с именем attempPost()
. В этом методе я создаю объект AsyncHttpRequest
, объект RequestParams
и сохраняю действительный адрес электронной почты, введенный пользователем.
private void attempPost() {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
String url = "https://api-iddog.idwall.co/signup";
String userEmail = userEmailView.getText().toString();
JSONObject jsonEmail = new JSONObject();
try {
jsonEmail.put("email", userEmail);
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("Dog", " " + jsonEmail.toString());
params.put("-d", jsonEmail);
client.addHeader("Content-Type", "application/json");
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.d("Dog", "onSucess" + responseBody.toString());
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.e("Dog", "" + error.toString());
}
});
}
Этот метод вызывается в OnclickListener
, и журнал возвращает сообщение BadRequest и код состояния 400. Я уже пытался применить некоторые примеры кода из документа Loopj, но у меня не получилось. Может ли кто-нибудь дать мне представление о том, что я делаю неправильно? Из того, что я могу понять, ответ об успехе должен быть строкой (токен), и мне нужен этот токен для завершения проекта.
РЕДАКТИРОВАТЬ.
Я немного поработал над документацией и другими примерами здесь, в стеке, и нашел это: https://stackoverflow.com/questions/13052036/posting-json-xml-using-android-async-http-loopj
В принятом ответе есть пример того, как публиковать JSON.
Затем я внес несколько изменений в свой метод attempPost.
private void attempPost() {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
String url = "https://api-iddog.idwall.co/signup";
String userEmail = userEmailView.getText().toString();
JSONObject jsonParams = new JSONObject();
try {
jsonParams.put("email", "[email protected]");
} catch (JSONException e) {
e.printStackTrace();
}
client.post(getApplicationContext(), url, jsonParams, "application/json", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.d("Dog", "onSucess" + responseBody.toString());
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.e("Dog", "" + error.toString());
Log.e("Dog", "status code " + String.valueOf(statusCode));
}
});
}
Но Android Studio говорит мне преобразовать jsonParams в сущность. В примере, который я получил из стека, для этого используется следующий код:
StringEntity entity = new StringEntity(jsonParams.toString());
Однако моя студия Android получает ужас, который говорит:
Необработанное исключение: java.io.UnsupportedEncodingException,
До этого момента я не мог найти способ решить эту проблему.