【已解决】 P59 TicketActivty无法拿到数据,this.mCallBakck返回为空
ITicktetPresentImpl中 this.mCallback = callback; 时是有值的, 可是到了 onResponse中mCallback为空
//homepageFragment执行跳转操作
public void getClickItem(homePageContent.DataBean data) {
mTicktetPresentImpl = new PresentManager().getmITicketPresent();
mTicktetPresentImpl.LoadTicket(data.getTitle(),data.getClick_url(),data.getPict_url());
startActivity(new Intent(getContext(), TicketActivity.class));
}
----------------------ITicktetPresentImpl中加载网络请求----------------
public class ITicktetPresentImpl implements ITicketPresent {
public ITicketPageCallBack mCallback=null;
private String mImageUrl;
private TicketResult mTicketResult;
//判断当前的加载状态
enum LoadState{
SUCCESS,ERROR,LOADDING,NONE
}
private LoadState currentState =LoadState.NONE;
@Override
public void LoadTicket(String title, String url, String imageUrl) {
loadingAction();
LogUtils.w(this,"title"+title);
LogUtils.w(this,"url"+url);
LogUtils.w(this,"imageUrl"+imageUrl);
String newUrl = URLUtils.setStartHttps(url);
LogUtils.w(this,"newUrl"+newUrl);
mImageUrl = imageUrl;
//post请求数据
Retrofit retrofit = RetrofitManager.getInstance().getRetrofit();
//创建api实例
Api api = retrofit.create(Api.class);
// Call<categories> task = api.getCategories();
TicketParaments TicketParaments = new TicketParaments(title,newUrl);
Call<TicketResult>task = api.getTicketResult(TicketParaments);
task.enqueue(new Callback<TicketResult>() {
@Override
public void onResponse(Call<TicketResult> call, Response<TicketResult> response) {
int reponseCode = response.code();
if (reponseCode == HttpURLConnection.HTTP_OK)
{
LogUtils.w(ITicktetPresentImpl.this,"mCallback"+mCallback);
//请求成功
mTicketResult = response.body();
LogUtils.w(ITicktetPresentImpl.this,"请求成功"+mTicketResult.toString());
loadSuccessAction();
}else
{
loadErrorAction();
}
}
@Override
public void onFailure(Call<TicketResult> call, Throwable t) {
LogUtils.w(ITicktetPresentImpl.this,"请求失败"+t.toString());
loadErrorAction();
}
});
}
//加载成功封装
private void loadSuccessAction() {
LogUtils.w(this,"Ui成功回调");
if (mCallback != null) {
mCallback.onSuccessLoad(mImageUrl, mTicketResult);
}else
{
currentState = LoadState.SUCCESS;
}
//否则就修改为success状态
}
//加载失败封装
private void loadErrorAction() {
if (mCallback != null) {
mCallback.loadError();
}else
{
currentState = LoadState.ERROR;
}
}
//加载loadding
private void loadingAction() {
if (mCallback != null) {
//加载成功,通知UI
mCallback.loadding();
}else
{
currentState = LoadState.LOADDING;
}
}
@Override
public void registerViewCallback(ITicketPageCallBack callback) {
this.mCallback = callback;
if (currentState !=LoadState.NONE)
{
LogUtils.w(this,"准备执行");
// 根据不同状态来设置ui
if (currentState == LoadState.SUCCESS)
{
loadSuccessAction();
}else if(currentState ==LoadState.ERROR)
{
loadErrorAction();
}else if(currentState == LoadState.LOADDING) {
loadingAction();
}
}
}
@Override
public void unRegisterViewCallback(ITicketPageCallBack callBack) {
this.mCallback = null;
}
}
@Override
protected void initListener() {
mITicketPresent = PresentManager.newInstance().getmITicketPresent();
if (mITicketPresent !=null) {
mITicketPresent.registerViewCallback(this);
}
}
时机,再设置的地方和使用的地方打个log,就知道谁先执行,谁后执行了。
是我单例写错了, 网络请求时重新初始化了ITicktetPresentImpl, 感谢