如何控制Activity方法流直到非活动类执行网络操作

时间:2017-05-19 08:01:26

标签: java android methods controls flow

我在活动中有一个方法,其中一些操作是从非活动类执行的。我想知道非活动类网络操作何时完成,以便我可以再次调用该方法。但是当我调用非活动类时,方法最后会进行。这是我的代码,..

public void somemethod(){
            .
            .
            .
            .               
if (condition) {

    new RegenerateToken().generate(DriverActivity.this); // calling non activity class which perform some network operation

    //here i want to know that non activity class has performed the network operation so i can call this method again

    }       
            .
            .
            .


log.d("method","ending");
}

非活动类

public class RegenerateToken {



    public void generate(Context context) {



    ExecuteServerReq executeServerReq = new ExecuteServerReq(context, client, Utilz.URL + "/authenticate", params, true, true);
    executeServerReq.execute();
    executeServerReq.getResponse = new ExecuteServerReq.GetResponse() {

    @Override
    public void onResponse(String objects) {
    Utilz.printLog("RegenerateTokenresponse", objects);


    }
    };

    }


    }

2 个答案:

答案 0 :(得分:1)

您需要实现一个接口来获取回调

public class RegenerateToken {

public interface Callback {
    public void onResponce(String data);
}

public void generate(Context context,final Callback callBack) {
    ExecuteServerReq executeServerReq = new ExecuteServerReq(context, client, Utilz.URL + "/authenticate", params, true, true);
    executeServerReq.execute();
    executeServerReq.getResponse = new ExecuteServerReq.GetResponse() {

    @Override
    public void onResponse(String objects) {
        Utilz.printLog("RegenerateTokenresponse", objects);
        callBack.onResponce(objects);
    }};
}
}

回调实施

if(condition) {
    new RegenerateToken().generate(DriverActivity.this, new Callback() {  
        @Override
        public void onResponse(String objects) { //your data do ur processing
        }
    });
}

答案 1 :(得分:0)

您可以使用LocalBroacastManager在您的应用中发送和接收信息

public class RegenerateToken {

    public void generate(Context context) {
    //your code
        executeServerReq.getResponse = new ExecuteServerReq.GetResponse() {

            @Override
            public void onResponse(String objects) {
                Utilz.printLog("RegenerateTokenresponse", objects);
                Intent intent = new Intent("Respone");
                if(expected responce){    
                    intent.putExtra("result", "Successful");
                }
                else{
                    intent.putExtra("result", "UnSuccessful");     
                }
                LocalBroadcastManager.getInstance(this).sendBroadcast(iIntent);

            }
        };
    }
}

在您的活动注册表中,为您的本地广播定义接收器

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    //Register the custom Broadcast "Response"

    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
    new IntentFilter("Response"));
}

// Our handler for received Intents. This will be called whenever an Intent
// with an action named "Response" is broadcasted.
private BroadcastReceiver myMessageReceiver = new BroadcastReceiver() {
@Override
    public void onReceive(Context context, Intent intent) {
    String response= intent.getStringExtra("result");
    if(response.equals("Successful")){
        //on successful execution
        // call your method again or do whatever you wish
    }else{
        //on otherwise            
    }
  }
};