Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我用fragment请求网络会报错 ,请问怎么解决 #7

Closed
wpsmgkn opened this issue Nov 16, 2016 · 1 comment
Closed

我用fragment请求网络会报错 ,请问怎么解决 #7

wpsmgkn opened this issue Nov 16, 2016 · 1 comment

Comments

@wpsmgkn
Copy link

wpsmgkn commented Nov 16, 2016

AndroidRuntime: FATAL EXCEPTION: main
Process: com.niule.hdd, PID: 2129
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.niule.hdd/com.niule.hdd.MainActivity}: java.lang.ClassCastException: com.niule.hdd.mvp.ui.fragment.HomeOneFragment cannot be cast to com.jess.arms.base.BaseActivity
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2219)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5045)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: com.niule.hdd.mvp.ui.fragment.HomeOneFragment cannot be cast to com.jess.arms.base.BaseActivity
at com.niule.hdd.mvp.presenter.HomeOnePresenter.getBannerList(HomeOnePresenter.java:65)
at com.niule.hdd.mvp.ui.fragment.HomeOneFragment.initData(HomeOneFragment.java:97)
at com.jess.arms.base.BaseFragment.onActivityCreated(BaseFragment.java:46)
at com.niule.hdd.mvp.ui.fragment.HomeOneFragment.onActivityCreated(HomeOneFragment.java:102)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2096)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:181)
at com.trello.rxlifecycle.components.support.RxAppCompatActivity.onStart(RxAppCompatActivity.java:50)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188)
at android.app.Activity.performStart(Activity.java:5241)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2179)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 
at android.app.ActivityThread.access$800(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5045) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
at dalvik.system.NativeStart.main(Native Method) 

源码

   public void getBannerList() {

    //请求外部存储权限用于适配android6.0的权限管理机制
    PermissionUtil.externalStorage(new PermissionUtil.RequestPermission() {
        @Override
        public void onRequestPermissionSuccess() {
            //request permission success, do something.
        }
    }, mRxPermissions, mRootView, mErrorHandler);



    mModel.getBannerList()
            .subscribeOn(Schedulers.io())
            .retryWhen(new RetryWithDelay(3, 2))//遇到错误时重试,第一个参数为重试几次,第二个参数为重试的间隔
            .doOnSubscribe(new Action0() {
                @Override
                public void call() {
                        mRootView.showLoading();
                }
            }).subscribeOn(AndroidSchedulers.mainThread())
            .observeOn(AndroidSchedulers.mainThread())
            .doAfterTerminate(new Action0() {//**这里是引发错误的地方**
                @Override
                public void call() {
                        mRootView.hideLoading();//隐藏上拉刷新的进度条
                }
            })
            .compose(((BaseActivity) mRootView).<BaseObject>bindToLifecycle())//使用RXlifecycle,使subscription和activity一起销毁
            .subscribe(new ErrorHandleSubscriber<BaseObject>(mErrorHandler) {
                @Override
                public void onNext(BaseObject baseObject) {
                    if(baseObject.isSuccess()){
                        Log.d("HomeOnePresenter", baseObject.toString());
                    }else {
                        mRootView.showMessage(baseObject.getMessage().toString());
                    }
                }
            });
}
@JessYanCoding
Copy link
Owner

.compose(((BaseActivity) mRootView).bindToLifecycle())

你的view接口是用fragment实现的,这里你强转成activity所以强转失败,复制下面的替换之,这段代码的意思是将生命周期绑定到和fragment的声明周期一样,如果fragment,被关闭,这个网络请求也会结束,规避了内存泄漏的风险
.compose(((BaseFragment) mRootView).bindToLifecycle())

附送个工具类


public static LifecycleTransformer bindToLifecycle(BaseView view) {
if (view instanceof BaseActivity) {
return ((BaseActivity) view).bindToLifecycle();
} else if (view instanceof BaseFragment) {
return ((BaseFragment) view).bindToLifecycle();
} else {
throw new IllegalArgumentException("view isn't activity or fragment");
}

}

用法
.compose(bindToLifecycle(mRootView));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants