Android Volley LibraryとApiの操作
-
21-12-2019 - |
質問
私はAndroid Volley Libraryに新しいです。ユーザー名とパスワードをAPIに送信しています.APIはユーザーの詳細を返します。それでは、Androidの私のLoginUSERメソッドです。
public void LoginUser(){
// Tag used to cancel the request
String tag_json_obj = "json_obj_req";
String url = "http://example.com/myfile/mobile_api/";
//final ProgressDialog pDialog = ProgressDialog.show(getParent(), "Please wait", "Login user");
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
if(response.getString(KEY_SUCCESS)!=null){
String res = response.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
JSONObject json_user = response.getJSONObject("user");
Toast.makeText(getApplicationContext(), "User Logged in.. " + json_user.getString("name"), Toast.LENGTH_LONG).show();
}
}
else if(response.getString(KEY_ERROR)!=null){
String res = response.getString(KEY_ERROR);
if(Integer.parseInt(res) == 1){
Toast.makeText(getApplicationContext(), response.getString("error_msg"), Toast.LENGTH_LONG).show();
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//pDialog.hide();
}
Log.d(TAG, response.toString());
//pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Log.d(TAG, "Error: " + error.getMessage());
//pDialog.hide();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("tag", login_tag);
params.put("email", Email);
params.put("password", Pass);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
}
.
とこれは私のAPI Index.phpファイル
です。if ($tag == 'login') {
$email = $_POST['email'];
$password = $_POST['password'];
$user = $db->getUserByEmailAndPassword($email, $password);
if ($user != false) {
$response["success"] = 1;
$response["uid"] = $user["id"];
$response["user"]["name"] = $user["name"];
$response["user"]["phone"] = $user["contact_no"];
$response["user"]["email"] = $user["email"];
$response["user"]["reg_date"] = $user["reg_date"];
echo json_encode($response);
} else {
$response["error"] = 1;
$response["error_msg"] = "Incorrect email or password!";
echo json_encode($response);
}
.
しかし、JSON
から次のエラーを受けています07-31 16:58:27.307:E / JSON PARSER(7506):解析中のデータorg.json.jsonexception:java.lang.Stringの値番号java.lang.StringはjsonObject
に変換できません。
これは、モバイルAPIとAndroidアプリをボランで接続する正しい方法ですか?それとも私にこれの理由を説明することができますか?
解決
ええと、私は問題を見つけたと思います。タグが正しくない場合は「アクセスが拒否された」という文字列を返すため、そのエラーメッセージが表示されます。だからこれはJSONオブジェクトではありませんそれは単なる文字列です。エラーを解決するには、 string request を使用して文字列値を取得できます。
StringRequest strReq = new StringRequest(Method.POST, //here change the method to POST
Const.URL_STRING_REQ, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response.toString());
msgResponse.setText(response.toString());
hideProgressDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
hideProgressDialog();
}
}){
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("tag", login_tag);
params.put("email", Email);
params.put("password", Pass);
return params;
}
};
. 所属していません StackOverflow