Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从改装onResponse返回值?_Android - Fatal编程技术网

Android 如何从改装onResponse返回值?

Android 如何从改装onResponse返回值?,android,Android,我是Android的初学者,并编写了一个简单的改装示例: LOGININTERFACE mAPISERVICE; mAPISERVICE= LOGINGENERATOR.getAPIServices(); mAPISERVICE.savePost("0016642902","0016642902","password").enqueue(new Callback<LGOINMODEL>() { @Override public

我是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) {

        }
    });

它无法返回值,也没有阅读任何教程、示例或其他有关堆栈溢出的文章,因此仍然无法解决此问题。

您需要回调函数,以便无论何时调用此函数从服务器获取值,都可以传递回调函数,当返回结果时,它可以返回给您

回调接口

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();
...