Я создаю Android приложение, которое запрашивает данные на моем онлайн-сервере, информация для входа - одна из них.
У меня есть эта функция входа в систему, когда я отправляю запрос на php скрипт, который у меня есть.
public void login(final String username, final String password, Context context, final requestHandler listener) {
final String requestUrl = "http://www.my-url.com/folder/folder/folder/script.php";
JSONObject object = new JSONObject();
try {
// TODO: handle loggedInUser authentication
//input your API parameters
object.put("user_identifier ", username);
object.put("password", password);
} catch (Exception e) {
Log.e(TAG, "error logging in = " + e);
new Result.Error(new IOException("Error logging in", e));
}
HashMap<String, String> params = new HashMap<>();
params.put("user_identifier", username);
params.put("password", password);
params.put("Content-Type", "application/json");
StringRequest sr = new StringRequest(Request.Method.POST, requestUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("HttpClient", "success! response: " + response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("HttpClient", "error: " + error.toString());
}
})
{
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<>();
params.put("user_identifier", username);
params.put("password", "hello_World");
return params;
}
};
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, requestUrl, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override public void onResponse(JSONObject response) {
//the response contains the result from the server
// a json string or any other object returned by your server
Log.e(TAG, "Response: " + response.toString());
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat("yyyy/MM/dd hh:mm a");
gson = gsonBuilder.create();
ServerResponse serverResponse = gson.fromJson(response.toString(), ServerResponse.class);
Result<UserModel> result;
if(serverResponse.isSuccess()){
UserModel userModel = gson.fromJson(serverResponse.getData(), UserModel.class);
result = new Result.Success<>(userModel);
listener.passResult(result);
}
else {
result = new Result.Error(new IOException("Error code: " + serverResponse.getMessage()));
}
listener.passResult(result);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "volley error jsonObject = " + error);
error.printStackTrace(); //log the error resulting from the request for diagnosis/debugging
}
});
Volley.newRequestQueue(context).add(jsonRequest);
Volley.newRequestQueue(context).add(sr);
}
Теперь PHP просто получит запрос и затем обработает его. Он возвращает JSONObject, который затем анализируется приложением Android, которое я создал. Пожалуйста, обратите внимание, что я мог делать запросы раньше. Но неожиданно я получаю пустой ответ, который привел к ошибкам при разборе результата JSONObject. StringRequest также возвращает строку длиной 0
1007 * Очевидно, что-то не так. Я использовал apirequest.io для тестирования моего PHP сценария, и мой сценарий может получать, обрабатывать и выводить правильные результаты.
Очевидно, что с моим Android что-то не так. Чтобы убедиться, что мой PHP работает нормально, у меня есть этот блок перед обработкой ввода:
print_r($_REQUEST);
var_dump($_REQUEST);
print_r($_POST);
var_dump($_POST);
print_r($_GET);
var_dump($_GET);
Но когда я снова запускаю функцию входа в систему, я ничего не получаю от своего сервер. Сброс параметра $_REQUEST
просто дает пробел. Может быть полезно отметить, что сценарий PHP все еще функционирует, как и предполагалось, когда я использую apirequest.io. Совершенно очевидно, что Android Volley создает мои запросы и отправляет их на сервер.
Пока я жестко не закодирую значение в URL-адресе, что-то вроде: requestUrl?name_1=value1&name2_value2..
, что PHP показывает, что ему удалось получить параметры в запросе $_GET
.
Это ошеломляет.
Теперь я в замешательстве, кажется, что Волей неожиданно просто перестал правильно составлять мой запрос, следовательно, мои параметры были сброшены.
Может кто-нибудь указать, что я делаю не так?