payu-intrepos / Android-SDK

PayU Android SDK
14 stars 8 forks source link

Fragment null must be a public static class to be properly recreated from instance state. #32

Closed kathanshah closed 3 years ago

kathanshah commented 7 years ago

Using API 25 and have expend Bank class as bellow and made changes as bellow to PaymentsActivity

also i have attached the files.

Class.forName("com.payu.custombrowser.Bank"); final MyBank bank = new MyBank() { @Override public void registerBroadcast(BroadcastReceiver broadcastReceiver, IntentFilter filter) { mReceiver = broadcastReceiver; getActivity().registerReceiver(broadcastReceiver, filter); }

            @Override
            public void unregisterBroadcast(BroadcastReceiver broadcastReceiver) {
                if (mReceiver != null) {
                    getActivity().unregisterReceiver(mReceiver);
                    mReceiver = null;
                }
            }

            @Override
            public void onHelpUnavailable() {
                getActivity().findViewById(R.id.parent).setVisibility(View.GONE);
                getActivity().findViewById(R.id.trans_overlay).setVisibility(View.GONE);
            }

            @Override
            public void onBankError() {
                getActivity().findViewById(R.id.parent).setVisibility(View.GONE);
                getActivity().findViewById(R.id.trans_overlay).setVisibility(View.GONE);
            }

            @Override
            public void onHelpAvailable() {
                getActivity().findViewById(R.id.parent).setVisibility(View.VISIBLE);
            }
        };

public static class MyBank extends Bank{ @Override public void registerBroadcast(BroadcastReceiver broadcastReceiver, IntentFilter filter) { mReceiver = broadcastReceiver; getActivity().registerReceiver(broadcastReceiver, filter); }

@Override
public void unregisterBroadcast(BroadcastReceiver broadcastReceiver) {
    if (mReceiver != null) {
        getActivity().unregisterReceiver(mReceiver);
        mReceiver = null;
    }
}

@Override
public void onHelpUnavailable() {
    getActivity().findViewById(R.id.parent).setVisibility(View.GONE);
    getActivity().findViewById(R.id.trans_overlay).setVisibility(View.GONE);
}

@Override
public void onBankError() {
    getActivity().findViewById(R.id.parent).setVisibility(View.GONE);
    getActivity().findViewById(R.id.trans_overlay).setVisibility(View.GONE);
}

@Override
public void onHelpAvailable() {
    getActivity().findViewById(R.id.parent).setVisibility(View.VISIBLE);
}

}

please check the error log bellow V/FA: onActivityCreated I/WebViewFactory: Loading com.google.android.webview version 54.0.2840.85 (code 284008500) I/art: Rejecting re-init on previously-failed class java.lang.Class I/art: Rejecting re-init on previously-failed class java.lang.Class I/art: Rejecting re-init on previously-failed class java.lang.Class I/art: Rejecting re-init on previously-failed class java.lang.Class I/cr_LibraryLoader: Time to load native libraries: 4 ms (timestamps 4879-4883) I/cr_LibraryLoader: Expected native library version number "54.0.2840.85", actual native library version number "54.0.2840.85" I/cr_LibraryLoader: Expected native library version number "54.0.2840.85", actual native library version number "54.0.2840.85" I/chromium: [INFO:library_loader_hooks.cc(151)] Chromium logging enabled: level = 0, default verbosity = 0 I/cr_BrowserStartup: Initializing chromium process, singleProcess=true W/System.err: java.lang.IllegalStateException: Fragment null must be a public static class to be properly recreated from instance state. W/System.err: at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:435) W/System.err: at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:420) W/System.err: at com.payu.payuui.PaymentsActivity.onCreate(PaymentsActivity.java:166) W/System.err: at android.app.Activity.performCreate(Activity.java:6259) W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) W/System.err: at android.app.ActivityThread.-wrap11(ActivityThread.java) W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) W/System.err: at android.os.Looper.loop(Looper.java:148) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5443) W/System.err: at java.lang.reflect.Method.invoke(Native Method) W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) I/cr_Ime: ImeThread is enabled. W/cr_media: Requires BLUETOOTH permission D/FA: Connected to remote service V/FA: Processing queued up service tasks: 2 E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY) V/FA: Activity resumed, time: 257615170 W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc W/Utils: could not parse long range '367-367 ' W/VideoCapabilities: Unrecognized profile/level 0/3 for video/mpeg2 D/OpenGLRenderer: endAllActiveAnimators on 0xb7b5c610 (RippleDrawable) with handle 0xb7a99230 I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 14252 I/chromium: [INFO:CONSOLE(5)] "The value "device-width;" for key "width" is invalid, and has been ignored.", source: https://secure.payu.in/_payment (5) I/chromium: [INFO:CONSOLE(5)] "The value "1.0;" for key "initial-scale" was truncated to its numeric prefix.", source: https://secure.payu.in/_payment (5) I/chromium: [INFO:CONSOLE(5)] "The value "1.0;" for key "maximum-scale" was truncated to its numeric prefix.", source: https://secure.payu.in/_payment (5) I/chromium: [INFO:CONSOLE(5)] "The value "0;" for key "user-scalable" was truncated to its numeric prefix.", source: https://secure.payu.in/_payment (5) I/chromium: [INFO:CONSOLE(5)] "Error parsing a meta element's content: ';' is not a valid key-value pair separator. Please use ',' instead.", source: https://secure.payu.in/_payment (5) E/chromium: [ERROR:interface_registry.cc(99)] Failed to locate a binder for interface: autofill::mojom::AutofillDriver D/AndroidRuntime: Shutting down VM E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Activity.findViewById(int)' on a null object reference at com.payu.custombrowser.Bank.onPageFinishWebclient(Bank.java:694) at com.payu.custombrowser.PayUWebViewClient.onPageFinished(PayUWebViewClient.java:73) at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:531) at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:188) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5443) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) D/FA: Logging event (FE): _ae, Bundle[{_o=crash, _sc=PaymentActivity, _si=9078936444052808819, timestamp=1480494916596, fatal=1}] E/AndroidRuntime: FATAL EXCEPTION: main Process: com.cattechsol.skillhome, PID: 14252 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Activity.findViewById(int)' on a null object reference at com.payu.custombrowser.Bank.onPageFinishWebclient(Bank.java:694) at com.payu.custombrowser.PayUWebViewClient.onPageFinished(PayUWebViewClient.java:73) at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:531) at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:188) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5443) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) Application terminated. PaymentsActivity.zip PaymentsActivity.zip

DhavalsShah commented 7 years ago

Yes, I am facing the same issue.

betaCode95 commented 7 years ago

Is there a fix for this issue?

DhavalsShah commented 7 years ago

Yeah, there is fix for this issue. I removed the BankFragment code from the SdkWebViewActivityNew.java and migrate BankFragment code as a new class and made changes appropriately in SdkWebViewActivityNew.java in order to access BankFragment object. I hope this will help you.

import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import android.view.View;

import com.payUMoney.sdk.R;
import com.payu.custombrowser.Bank;

public  class BankFragment extends Bank{
    BroadcastReceiver mReceiver;
    @Override
    public void registerBroadcast(BroadcastReceiver broadcastReceiver, IntentFilter filter) {
        mReceiver = broadcastReceiver;
        getActivity().registerReceiver(broadcastReceiver, filter);
    }

    @Override
    public void unregisterBroadcast(BroadcastReceiver broadcastReceiver) {
        if (mReceiver != null) {
            getActivity().unregisterReceiver(mReceiver);
            mReceiver = null;
        }
    }

    @Override
    public void onHelpUnavailable() {
        getActivity().findViewById(R.id.parent).setVisibility(View.GONE);
        getActivity().findViewById(R.id.trans_overlay).setVisibility(View.GONE);
    }

    @Override
    public void onBankError() {
        getActivity().findViewById(R.id.parent).setVisibility(View.GONE);
        getActivity().findViewById(R.id.trans_overlay).setVisibility(View.GONE);
    }

    @Override
    public void onHelpAvailable() {
        getActivity().findViewById(R.id.parent).setVisibility(View.VISIBLE);
    }

}
rohitsharma-mobi commented 6 years ago

Thank you saved me