Я новичок в Android и собираюсь написать свое первое приложение, связанное с REST-API.Мне удалось сделать запрос GET, но возникли проблемы с запросом POST.В Postman все работает - на Android мой AsyncTask генерирует исключение FileNotFound каждый раз, когда я пытаюсь выполнить запрос POST.
Следуя документации API, мне сначала нужно получить "accesstoken" с запросом HTTP GET (https://vereinsflieger.de/interface/rest/auth/accesstoken) Мне удалось это сделать. Используя токен доступа, я хочу войти в систему с запросом POST на https://vereinsflieger.de/interface/rest/auth/signin. Поскольку я не знаю, по какой причине, мой AsyncTask генерирует исключение FileNotFound, хотяфайл есть (работает без проблем в Postman). Есть ли проблема с кодом, который я использую, или с самим API?
Заранее спасибо!
Вот моя попытка:
public class HttpPostRequest extends AsyncTask<String, Void, String> {
public static final String REQUEST_METHOD = "POST";
public static final int READ_TIMEOUT = 15000;
public static final int CONNECTION_TIMEOUT = 15000;
public String result;
public LoginActivity LoginActivity;
public HttpPostRequest(LoginActivity a) { this.callingActivity = a; }
@Override
protected String doInBackground(String... params) {
String stringURL = params[0];
String logindata = params[1];
String inputLine;
try {
//create URL object
URL myUrl = new URL(stringURL);
//create connection
HttpsURLConnection connection = (HttpsURLConnection) myUrl.openConnection();
//Set methods and timeouts
connection.setRequestMethod(REQUEST_METHOD);
connection.setReadTimeout(READ_TIMEOUT);
connection.setConnectTimeout(CONNECTION_TIMEOUT);
**connection.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
wr.write(logindata);
wr.flush();**
Log.d("RESPONSE", "" + connection.getResponseCode());
//Create a new InputStreamReader
InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());
//Create a new buffered reader and String Builder
BufferedReader reader = new BufferedReader(streamReader);
**StringBuilder stringBuilder = new StringBuilder();** //Here is where the exception is thrown
//Check if the line we are reading is not null
while((inputLine = reader.readLine()) != null){
stringBuilder.append(inputLine);
}
//Close our InputStream and Buffered reader
reader.close();
streamReader.close();
//Set our result equal to our stringBuilder
result = stringBuilder.toString();
} catch(IOException e){
e.printStackTrace();
result = null;
}
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
LoginActivity.onPostFinish(result);
}
}
Я ожидал возврата строки, содержащей данные JSON, вместо этого я получил следующее исключение:
W/System.err: java.io.FileNotFoundException: https://vereinsflieger.de/interface/rest/auth/signin
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:250)
W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
W/System.err: at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)