收藏
回答

微信授权登录后返回时会null

您好,你们提供的微信登录授权后接口调用,有些手机会有问题,取不到Context=null

https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html

代码如下:

private static class MyHandler extends Handler {

        private final WeakReference<WXEntryActivity> wxEntryActivityWeakReference;

        public MyHandler(WXEntryActivity wxEntryActivity){

            wxEntryActivityWeakReference = new WeakReference<WXEntryActivity>(wxEntryActivity);

        }

        @Override

        public void handleMessage(Message msg) {

            int tag = msg.what;

            switch (tag) {

                case NetworkUtil.GET_TOKEN: {

                    Bundle data = msg.getData();

                    JSONObject json = null;

                    try {

                        json = new JSONObject(data.getString("result"));

                        String openId, accessToken, refreshToken, scope;

                        openId = json.getString("openid");

                        accessToken = json.getString("access_token");

                        refreshToken = json.getString("refresh_token");

                        scope = json.getString("scope");

                        Intent intent = new Intent(wxEntryActivityWeakReference.get(), SendToWXActivity.class); //这里会出错

                        intent.putExtra("openId", openId);

                        intent.putExtra("accessToken", accessToken);

                        intent.putExtra("refreshToken", refreshToken);

                        intent.putExtra("scope", scope);

                        wxEntryActivityWeakReference.get().startActivity(intent);

                    } catch (JSONException e) {

                        Log.e(TAG, e.getMessage());

                    }

                }

            }

        }

    }


wxEntryActivityWeakReference.get() 为空

错误日志:

Thread Name: 'main'

Back traces starts.

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

    at android.content.ComponentName.<init>(ComponentName.java:132)

    at android.content.Intent.<init>(Intent.java:7415)

    at com.xxx.xxx.wxapi.WXEntryActivity$MyHandler.handleMessage(WXEntryActivity.java:55)

    at android.os.Handler.dispatchMessage(Handler.java:117)

    at android.os.Looper.loopOnce(Looper.java:205)

    at android.os.Looper.loop(Looper.java:293)

    at android.app.ActivityThread.loopProcess(ActivityThread.java:9928)

    at android.app.ActivityThread.main(ActivityThread.java:9917)

    at java.lang.reflect.Method.invoke(Native Method)

    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)

    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1233)

Back traces ends.

回答关注问题邀请回答
收藏

1 个回答

  • CRMEB
    CRMEB
    2023-10-13

    这个问题可能是由于在`MyHandler`的构造方法中,`wxEntryActivityWeakReference`没有被正确初始化导致的。你可以尝试在`handleMessage`方法中添加一个判断条件,检查`wxEntryActivityWeakReference`是否为空,如果为空则不执行后续操作。修改后的代码如下:


    private static class MyHandler extends Handler {
    
            private final WeakReference<WXEntryActivity> wxEntryActivityWeakReference;
    
            public MyHandler(WXEntryActivity wxEntryActivity){
    
                wxEntryActivityWeakReference = new WeakReference<WXEntryActivity>(wxEntryActivity);
    
            }
    
            @Override
    
            public void handleMessage(Message msg) {
    
                int tag = msg.what;
    
                switch (tag) {
    
                    case NetworkUtil.GET_TOKEN: {
    
                        Bundle data = msg.getData();
    
                        JSONObject json = null;
    
                        try {
    
                            json = new JSONObject(data.getString("result"));
    
                            String openId, accessToken, refreshToken, scope;
    
                            openId = json.getString("openid");
    
                            accessToken = json.getString("access_token");
    
                            refreshToken = json.getString("refresh_token");
    
                            scope = json.getString("scope");
    
                            if (wxEntryActivityWeakReference != null && wxEntryActivityWeakReference.get() != null) {
                                Intent intent = new Intent(wxEntryActivityWeakReference.get(), SendToWXActivity.class);
                                intent.putExtra("openId", openId);
                                intent.putExtra("accessToken", accessToken);
                                intent.putExtra("refreshToken", refreshToken);
                                intent.putExtra("scope", scope);
                                wxEntryActivityWeakReference.get().startActivity(intent);
                            }
    
                        } catch (JSONException e) {
    
                            Log.e(TAG, e.getMessage());
    
                        }
    
                    }
    
                }
    
            }
    
        }
    


    2023-10-13
    有用
    回复 1
    • 随缘
      随缘
      2023-10-13
      如果设置的判断,就无法跳转了,有没有什么办法可以跳转?
      2023-10-13
      回复
登录 后发表内容