我是Android的初学者,编写了一个简单的改造示例:
LOGININTERFACE mAPISERVICE;
mAPISERVICE= LOGINGENERATOR.getAPIServices();
mAPISERVICE.savePost("0016642902","0016642902","password").enqueue(new Callback<LGOINMODEL>() {
@Override
public void onResponse(Call<LGOINMODEL> call, Response<LGOINMODEL> response) {
LGOINMODEL output=response.body();
if(response.isSuccessful())
test[0] ="behzad behzad behzad";
}
@Override
public void onFailure(Call<LGOINMODEL> call, Throwable t) {
}
});
但是在这一行:
test[0] ="behzad behzad behzad";
它无法返回值,并且没有阅读Stack Overflow上的任何教程,示例或其他帖子,因此仍然无法解决此问题。
答案 0 :(得分:1)
你需要一个回调,所以每当你调用这个函数从服务器获取值时你都可以传递回调,当结果出现时它可以回复你。
回调界面
<强> MyResultsListener 强>的.java
public interface MyResultsListener{
public void onData(LGOINMODEL loginModel);
public void onFailed();
}
现在假设您所做的调用是在某个函数中,然后将MyResultsListener引用作为参数传递以获取结果。
public void makeServerCall(MyResultsListener listener){
LOGININTERFACE mAPISERVICE;
mAPISERVICE= LOGINGENERATOR.getAPIServices();
mAPISERVICE.savePost("0016642902","0016642902","password").enqueue(new Callback<LGOINMODEL>() {
@Override
public void onResponse(Call<LGOINMODEL> call, Response<LGOINMODEL> response) {
LGOINMODEL output=response.body();
if(response.isSuccessful())
test[0] ="behzad behzad behzad";
//for getting back data to calling class or function
listener.onData(output);
}
@Override
public void onFailure(Call<LGOINMODEL> call, Throwable t) {
//for failure handling
listener.onFailed();
}
});
}
答案 1 :(得分:0)
使用retrofit2可以进行同步调用:
mAPISERVICE = LOGINGENERATOR.getAPIServices();
Callback<LOGINMODEL> mLOGINMODEL = mAPISERVICE.savePost("0016642902","0016642902","password");
Response<LOGINMODEL> response = mLOGINMODEL.execute();
...
但是,同步请求会在Android 4.0或更高版本上触发应用程序崩溃。您会遇到NetworkOnMainThreadException
错误。
更多信息here。