Mat*_*ska 5 rest service android
我正在Android中实现REST客户端.我已经看到了使用a Service
来执行与服务器的连接以及ResultReceiver
被通知操作完成的示例.我从片段调用服务,如果我在服务运行时尝试旋转屏幕,则getActivity()方法ResultReceiver
返回null,因为该片段可能不再处于布局中.
片段中的回调方法:
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
Response response = (Response) resultData
.getSerializable(RestService.RESULT);
if (resultCode == RestService.SUCCESS
&& response != null) {
if (getActivity() != null) {
recommendationResponse = response;
getLoaderManager().restartLoader(0, new Bundle(),
Fragment.this);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在getActivity()
返回null.这是正常的吗?我可以使用什么方法在屏幕旋转时允许通知?本地广播?
bly*_*roi 12
没有,
android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)
不是解决方案.
要使用ResultReceiver I:
将其保存在方向更改上:
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putParcelable(Consts.RECEIVER, mReceiver);
super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)重置接收器:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null) {
mReceiver = savedInstanceState.getParcelable(Consts.RECEIVER);
}
else {
mReceiver = new MyResultReceiver(new Handler());
}
mReceiver.setReceiver(this);
}
Run Code Online (Sandbox Code Playgroud)这是我的ResultReceiver类:
import android.os.Bundle;
import android.os.Handler;
import android.os.ResultReceiver;
public class MyResultReceiver extends ResultReceiver {
private Receiver mReceiver;
public MyResultReceiver(Handler handler) {
super(handler);
}
public void setReceiver(Receiver receiver) {
mReceiver = receiver;
}
public interface Receiver {
public void onReceiveResult(int command, Bundle resultData);
}
@Override
protected void onReceiveResult(int command, Bundle resultData) {
if (mReceiver != null) {
mReceiver.onReceiveResult(command, resultData);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3322 次 |
最近记录: |