Android 如何从改装onResponse返回值?
我是Android的初学者,并编写了一个简单的改装示例:Android 如何从改装onResponse返回值?,android,Android,我是Android的初学者,并编写了一个简单的改装示例: LOGININTERFACE mAPISERVICE; mAPISERVICE= LOGINGENERATOR.getAPIServices(); mAPISERVICE.savePost("0016642902","0016642902","password").enqueue(new Callback<LGOINMODEL>() { @Override public
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) {
}
});
它无法返回值,也没有阅读任何教程、示例或其他有关堆栈溢出的文章,因此仍然无法解决此问题。您需要回调函数,以便无论何时调用此函数从服务器获取值,都可以传递回调函数,当返回结果时,它可以返回给您 回调接口 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();
}
});
}
public void makeServerCall(MyResultsListener侦听器){
登录接口服务;
mAPISERVICE=LOGINGENERATOR.getAPIServices();
mAPISERVICE.savePost(“0016642902”、“0016642902”、“密码”).enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
LGOINMODEL输出=response.body();
if(response.issusccessful())
测试[0]=“behzad behzad behzad behzad”;
//用于将数据返回到调用类或函数
onData(输出);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//用于故障处理
onFailed();
}
});
}
使用改装2可以进行同步呼叫:
mAPISERVICE = LOGINGENERATOR.getAPIServices();
Callback<LOGINMODEL> mLOGINMODEL = mAPISERVICE.savePost("0016642902","0016642902","password");
Response<LOGINMODEL> response = mLOGINMODEL.execute();
...
mAPISERVICE=LOGINGENERATOR.getAPIServices();
回调mLOGINMODEL=mAPISERVICE.savePost(“0016642902”、“0016642902”、“密码”);
Response=mLOGINMODEL.execute();
...
但是,同步请求会触发Android 4.0或更高版本上的应用程序崩溃。您将遇到NetworkOnMainThreadException
错误
更多信息。您想返回
测试
数组吗?谁是LGOINMODEL
?感谢您注意我的问题,我想让servercall返回一个字符串值,我该怎么做?您不能从makeservercall返回字符串值,因为它是一个异步代码,成功的api调用后结果将可用,而api调用不会立即可用。这就是为什么我们在使用listener.onData()时使用回调来获取数据是的,确定这是我们目前正在做的,无论响应是什么,我们都将它作为参数传递到侦听器中。onData(输出)这将在您传递引用的位置可用。谢谢,我想编写简单的makeServerCall方法来从服务器获取任何数据,并且想在我的朋友调用我的makeServerCall方法时,给我的朋友返回任何数据,你能为那个计划写代码吗?非常感谢。
mAPISERVICE = LOGINGENERATOR.getAPIServices();
Callback<LOGINMODEL> mLOGINMODEL = mAPISERVICE.savePost("0016642902","0016642902","password");
Response<LOGINMODEL> response = mLOGINMODEL.execute();
...