我必須從我的應用程序註銷。在Android中使用Retrofit退出
這是我php
腳本:
public function logoutAction(Request $request){
$requestData=json_decode($request->getContent(),1);
$em=$this->get('doctrine')->getEntityManager();
if(isset($requestData['token'])){
if($userToken=$em->getRepository('NavZUserBundle:UserToken')->findOneBy(array('token'=>$requestData['token']))){
$em->remove($userToken);
$em->flush($userToken);
$response['status']='success';
$response['msg']="Logged out successfully";
}else{
$response['status']='fail';
$response['msg']="Mobile User is already logged out";
}
}else{
$response['status']='fail';
$response['msg']="Missing required parameter";
}
return new JsonResponse($response);
}
這是使用POST
參數API調用:
@POST("api/logout/")
Call<ApiResponse> logOutUser(@Query("token") String token);
我有按鈕退出。
@OnClick(R.id.tv_signout)
void onSignOut(View view) {
logOutMethod();
}
private void logOutMethod() {
ApiService apiService = RestClient.getClient();
Call<ApiResponse> logOut = apiService.logOutUser(getPreference().getToken());
Log.e(TAG, "logOutMethod one: "+getPreference().getToken());
Log.e(TAG, "logOutMethod two: "+logOut);
logOut.enqueue(new Callback<ApiResponse>() {
@Override
public void onResponse(Response<ApiResponse> response) {
if (response.isSuccess()){
ApiResponse result = response.body();
if (result.getData() != null){
goToLogInActivity();
Snackbar.make(findViewById(android.R.id.content), result.getMsg(), Snackbar.LENGTH_LONG).show();
}else {
Snackbar.make(findViewById(android.R.id.content), result.getMsg(), Snackbar.LENGTH_LONG).show();
}
}else {
Snackbar.make(findViewById(android.R.id.content), response.message(), Snackbar.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Throwable t) {
}
});
}
private void goToLogInActivity(){
getPreference().removeLoginPreferences();
Intent intent = new Intent(this, LoginActivity.class);
finish();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
overridePendingTransition(0, 0);
startActivity(intent);
}
調試後:
E/SettingsActivity: logOutMethod one: f7177163c833dff4b38fc8d2872f1ec658940cbf280ce
E/SettingsActivity: logOutMethod two: [email protected]8
但部分:
ApiResponse result = response.body();
的方法response.body()
拋出:
data = null
msg = "Missing required parameter"
status = "fail"
而且在我的應用程序也會引發SnackBar
消息Missing required parameter
和應用程序不會註銷。
我可以使用POST方法註銷嗎?這裏可以做些什麼?
啊,我想也是。任何想法設置註銷登錄用戶的令牌? –
你在行 'logoutAction(請求$請求)' –
這是所有關於令牌微量元素對服務器令牌值應用程序方面,以及在腳本中。令牌在結果中爲null:'result.getData()。getToken()'產生空值。但是,'response.body'顯示結果。 –