Java 在异步http请求后更新片段UI

Java 在异步http请求后更新片段UI,java,android,http,Java,Android,Http,我正在使用loop4j进行HttpAsync获取请求 我正在调用来自片段的请求: RestHttpClientUsage.registerUser(m_context); 这是我的rest客户端代码: public static void registerUser(Context context) throws JSONException { RestHttpClient.get("?Operation=RegisterUser" , params, new JsonHttpR

我正在使用loop4j进行HttpAsync获取请求

我正在调用来自片段的请求:

RestHttpClientUsage.registerUser(m_context);
这是我的rest客户端代码:

public static void registerUser(Context context) throws JSONException 
{   
    RestHttpClient.get("?Operation=RegisterUser" , params, new JsonHttpResponseHandler() 
    {                   
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
        {
            ...
        }

        @Override
        public void onFailure(int statusCode, Header[] headers,String responseString, Throwable throwable) 
        {
            ...
        }

    });
}
我的问题是如何从onSuccess/onFailure回调中访问调用片段

我需要在调用结束后调用我的片段UpdateUI


我可以从上下文对象中获取片段吗?

您可以做的只是将响应(本例中为json对象/数组)序列化为全局变量或POJO,然后您可以从loop4j上下文外部调用UI


这对您有意义吗?

因为它在UI线程上提供响应(您在UI上创建请求),我认为您可以这样做:

callingFragment.this.getActivity().getSupportFragmentManager().findFragmentBytag("your calling fragment tag").updatUI;

您可以使用专用
广播接收器
来更新UI。下面是
BroadcastReceiver
的声明:

public class MyFragment extends Fragment {
    // Declare UI elements
    private final BroadcastReceiver receiver = new MyBroadcastReceiver();

    // Initialize elements in onCreate

    @Override
    public void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter("UPDATE_MY_FRAGMENT");
        getActivity().registerReceiver(receiver, filter);
    }

    @Override
    public void onPause() {
        super.onPause();
        getActivity().unregisterReceiver(receiver);
    }

    private class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {

            // Read data from intent.getExtras()
            // update UI elements
        }
    }
}
public static void registerUser(final Context context) throws JSONException 
{   
    RestHttpClient.get("?Operation=RegisterUser" , params, new JsonHttpResponseHandler() 
    {                   
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
        {
            Intent intent = new Intent("UPDATE_MY_FRAGMENT");
            // pass data using intent.putExtra based on response
            context.sendBroadcast(intent);
        }

        @Override
        public void onFailure(int statusCode, Header[] headers,String responseString, Throwable throwable) 
        {
            Intent intent = new Intent("UPDATE_MY_FRAGMENT");
            // pass data using intent.putExtra based on response
            context.sendBroadcast(intent);
        }

    });
}
并将
intent
registerUser
发送到私有
brodcastereceiver

public class MyFragment extends Fragment {
    // Declare UI elements
    private final BroadcastReceiver receiver = new MyBroadcastReceiver();

    // Initialize elements in onCreate

    @Override
    public void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter("UPDATE_MY_FRAGMENT");
        getActivity().registerReceiver(receiver, filter);
    }

    @Override
    public void onPause() {
        super.onPause();
        getActivity().unregisterReceiver(receiver);
    }

    private class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {

            // Read data from intent.getExtras()
            // update UI elements
        }
    }
}
public static void registerUser(final Context context) throws JSONException 
{   
    RestHttpClient.get("?Operation=RegisterUser" , params, new JsonHttpResponseHandler() 
    {                   
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
        {
            Intent intent = new Intent("UPDATE_MY_FRAGMENT");
            // pass data using intent.putExtra based on response
            context.sendBroadcast(intent);
        }

        @Override
        public void onFailure(int statusCode, Header[] headers,String responseString, Throwable throwable) 
        {
            Intent intent = new Intent("UPDATE_MY_FRAGMENT");
            // pass data using intent.putExtra based on response
            context.sendBroadcast(intent);
        }

    });
}

保存数据不是我的问题,我的问题是如何在处理完http响应后立即调用我的片段ui update使用接口进行回调,您的片段必须实现该接口,然后查看是否有方法将回调发送到您处理响应的位置。这是否可行?