您好,你们提供的微信登录授权后接口调用,有些手机会有问题,取不到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.
这个问题可能是由于在`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()); } } } } }