Java 在异步http请求后更新片段UI
我正在使用loop4j进行HttpAsync获取请求 我正在调用来自片段的请求: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
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使用接口进行回调,您的片段必须实现该接口,然后查看是否有方法将回调发送到您处理响应的位置。这是否可行?