Am使用改造来连接服务器,我的应用程序有登录页面和注销页面在登录期间我从文本框中获取值并使用POST请求发送到服务器它工作正常,
public void LoginUser(View v)
{RestAdapter adapter = new RestAdapter.Builder()
.setEndpoint(ROOT_URL)
.build();
WashAPI api = adapter.create(WashAPI.class);
api.LoginUser(
Email.getText().toString(),
Password.getText().toString(),
//Creating an anonymous callback
new Callback<Response>() {
@Override
public void success(Response result, Response response) {
//On success we will read the server's output using bufferedreader
//Creating a bufferedreader object
BufferedReader reader = null;
//An string to store output from the server
String output = "";
try {
//Initializing buffered reader
reader = new BufferedReader(new InputStreamReader(result.getBody().in()));
//Reading the output in the string
output = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
登录界面
public interface WashAPI {
@FormUrlEncoded
@POST("/xxx/yyy/signin")
public void LoginUser(
@Field("email") String email,
@Field("password") String password,
Callback<Response> callback);
}
这很好用
使用我的服务器API登录后,它返回一个令牌,在注销时我需要发送令牌,以便我的会话得到体验。
注销代码
public void signout(View v)
{
Log.d("insidetoken",t);
RestAdapter adapter = new RestAdapter.Builder()
.setEndpoint(ROOT_URL)
.build();
SignoutAPI api = adapter.create(SignoutAPI.class);
api.signout(t,
new Callback<Response>() {
@Override
public void success(Response result, Response response) {
BufferedReader reader = null;
String output = "";
try {
reader = new BufferedReader(new InputStreamReader(result.getBody().in()));
output = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
退出界面
public interface SignoutAPI {
@FormUrlEncoded
@POST("/xxx/yyy/zzz/signout")
public void signout(
@Field("token") String token,
Callback<Response> callback);
}
我的代码对于signin和sigout都是一样的
但是对于登录它是有效的,并且对于注销,它给了我RETROFIT ERROR:500 INTERNAL SERVER ERROR
但是使用POSTMAN它工作得很好AuthenticationContext.AcquireTokenAsync
答案 0 :(得分:0)
500内部服务器错误表示服务器端存在问题,您应该使用邮递员进行检查。
我很确定Web服务响应中存在问题,而不是Android端代码。
答案 1 :(得分:0)
正如评论中所提到的,您似乎在登录服务中正在做一些未在注销服务中完成的事情。
要解决此问题,请确保在注销服务时检查名为typedef struct
{
int a;
double b;
} data;
data glob;
int main()
{
thread reader([]()
{
while(1)
{
sleep(1s);
cout << glob;
}
});
thread writer1([]()
{
while(1)
glob.a++;
});
thread writer2([]()
{
while(1)
glob.b++;
});
int i;
cin >>i;
}
的POST参数。
答案 2 :(得分:0)
也许您以错误的方式给予令牌 以我的方式,标题中的授权是“承载者令牌” -> 在我的情况下,我将参数更改为此
fun setProfileAvatar(token: String,@Part image: MultipartBody.Part) : Single<Message> {
return apiService.setProfileAvatar("Bearer ${token}",image)
}
答案 3 :(得分:0)
您可以在改造中启用日志记录以显示服务器端错误和消息。 使用此链接了解如何启用它。