Я новичок. Это мое первое приложение для Android. У меня проблема с отправкой данных на мой Drupal-сервер с Android. Я использую Rest api.Android, Rest api post error - Доступ запрещен
Я могу войти как пользователь admin Drupal, я получаю идентификатор сеанса, имя сеанса и токен. Моя проблема заключается в отправке данных. Я думаю, что проблема заключается в аутентификации при публикации. Я не знаю, как это сделать.
И ИНТЕРНЕТ и ACCESS_NETWORK_STATE объявляется в явном
Вход части (рабочий)
private class LoginProcess extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
String address = "http://app.flickgo.com/apistuff/user/login.json";
HttpURLConnection urlConnection;
String requestBody;
Uri.Builder builder = new Uri.Builder();
Map<String, String> params = new HashMap<>();
params.put("username", "myUsername");
params.put("password", "myPassword");
// encode parameters
Iterator entries = params.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
builder.appendQueryParameter(entry.getKey().toString(), entry.getValue().toString());
entries.remove();
}
requestBody = builder.build().getEncodedQuery();
try {
URL url = new URL(address);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
writer.write(requestBody);
writer.flush();
writer.close();
outputStream.close();
JSONObject jsonObject = new JSONObject();
InputStream inputStream;
// get stream
if (urlConnection.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
inputStream = urlConnection.getInputStream();
} else {
inputStream = urlConnection.getErrorStream();
}
// parse stream
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp, response = "";
while ((temp = bufferedReader.readLine()) != null) {
response += temp;
}
// put into JSONObject
jsonObject.put("Content", response);
jsonObject.put("Message", urlConnection.getResponseMessage());
jsonObject.put("Length", urlConnection.getContentLength());
jsonObject.put("Type", urlConnection.getContentType());
return jsonObject.toString();
} catch (IOException | JSONException e) {
return e.toString();
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//create an intent to start the ListActivity
Intent intent = new Intent(LoginActivity.this, SecondActivity.class);
//pass the session_id and session_name to ListActivity
intent.putExtra("My_result", result);
//start the ListActivity
startActivity(intent);
}
}
сообщение часть, не работает.
В SecondActivity я хочу опубликовать некоторые данные. Вот где у меня проблемы. Я все время теряю доступ к сообщениям.
Как я могу использовать идентификатор сеанса, имя сеанса или токен из результата (intent.putExtra («My_result», result) - со страницы входа), чтобы опубликовать контент? Действительно ли это правильный способ сделать это? Если есть лучший способ, пожалуйста, дайте мне знать.
private class JsonPostRequest extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
try {
String address = "http://app.flickgo.com/apistuff/node.json";
JSONObject json = new JSONObject();
json.put("title", "Dummy Title");
json.put("type", "article");
String requestBody = json.toString();
URL url = new URL(address);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("Content-Type", "application/json");
OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
writer.write(requestBody);
writer.flush();
writer.close();
outputStream.close();
InputStream inputStream;
// get stream
if (urlConnection.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
inputStream = urlConnection.getInputStream();
} else {
inputStream = urlConnection.getErrorStream();
}
// parse stream
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp, response = "";
while ((temp = bufferedReader.readLine()) != null) {
response += temp;
}
// put into JSONObject
JSONObject jsonObject = new JSONObject();
jsonObject.put("Content", response);
jsonObject.put("Message", urlConnection.getResponseMessage());
jsonObject.put("Length", urlConnection.getContentLength());
jsonObject.put("Type", urlConnection.getContentType());
return jsonObject.toString();
} catch (IOException | JSONException e) {
return e.toString();
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(LoginActivity.this, result + "Test", Toast.LENGTH_LONG).show();
//Log.i(LOG_TAG, "POST RESPONSE: " + result);
//mTextView.setText(result);
}
}
Заранее спасибо
Вы объявили разрешение на доступ в интернет в файле манифеста? – TilalHusain
Да, как ИНТЕРНЕТ, так и ACCESS_NETWORK_STATE объявлен в манифесте – Kong
Ошибка отказа в доступе возвращается с сервера или вы получили это из какого-то заброшенного исключения? – TilalHusain