handleWindowVisibility:令牌 android.os.BinderProxy 没有活动

新手上路,请多包涵

我有一个登录屏幕,成功登录后,它完成并显示另一个包含用户信息的页面。

我读到了 这篇文章这篇文章

我还阅读了很多关于我们如何扩展 Application 类的内容,但我仍然无法运行这段代码。

您可以在下面找到我的代码,我也会解释错误。

这就是我使用 Volley 调用 AsyncTask 的方式:

错误类似于 no activity for token android.os.BinderProxy 当我调用 startActivity(intent); 时它会出现。

我知道这个错误是因为活动被杀死并且 Volley 响应后的 AsyncTask 想要使用被杀死的上下文,但我不知道如何修复它。

 Util.request_function(
     activity,
     MainActivity.user_session,
     key_value,
     new VolleyCallback() {
          @Override
          public void onSuccess(JSONObject result, Context context) {

                 Activity activity =
                 MyBaseActivity.myCustomApplication.getCurrentActivity();
                 Intent intent = new Intent(activity, SelfieCapture.class);
                 startActivity(intent);
                 finish();
          }
          @Override
          public void onError(String result) {

          }
});

我有如下接口:

排球回调.java:

 public interface VolleyCallback {
    void onSuccess(JSONObject result) throws JSONException;
    void onError(String result) throws Exception;
}

工具.java

 public static void request_function(Context context, CognitoUserSession cognitoUserSession, Map<String, String> key_value, final VolleyCallback callback) {
        JSONObject jsonBody = new JSONObject();
        CustomJSONObjectRequest postRequest = new CustomJSONObjectRequest(Request.Method.POST,
                MainActivity.API_URL,
                null,
                response -> {
                   JSONObject jsonObject = (JSONObject) response;
                   //SoMe Stuff//
                   callback.onSuccess(null);
             }, error -> {
                   //Log Error//
             }){
                  @Override
                  public String getBodyContentType() {
                         return "application/json; charset=utf-8";
                  }

                  @Override
                  public Map<String, String> getHeaders() {
                  final Map<String, String> headers = new HashMap<>();
                  headers.put("Content-Type", "application/json");
                         return headers;
                  }

                  @Override
                  public byte[] getBody() {
                         return jsonBody.toString().getBytes();
                  }
        };
     // Request added to the RequestQueue
     VolleyController.getInstance(context).addToRequestQueue(postRequest);

我的自定义应用程序.java

 public class MyCustomApplication extends Application {

    private Activity mCurrentActivity = null;

    public void onCreate() {
        super.onCreate();

    }

    public Activity getCurrentActivity() {
        return mCurrentActivity;
    }

    public void setCurrentActivity(Activity mCurrentActivity) {
        this.mCurrentActivity = mCurrentActivity;
    }
}

MyBaseActivity.java

 public class MyBaseActivity extends Activity {
    public static MyCustomApplication myCustomApplication;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myCustomApplication = (MyCustomApplication)this.getApplicationContext();
    }
    protected void onResume() {
        super.onResume();
        myCustomApplication.setCurrentActivity(this);
    }
    protected void onPause() {
        clearReferences();
        super.onPause();
    }
    protected void onDestroy() {
        clearReferences();
        super.onDestroy();
    }

    private void clearReferences(){
        Activity currActivity = myCustomApplication.getCurrentActivity();
        if (this.equals(currActivity))
            myCustomApplication.setCurrentActivity(null);
    }
}

原文由 Massoud 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

这段代码似乎是正确的,但我唯一的怀疑是,当您想在 startActivity(intent) 中打开新活动时,会发生错误。

因此,检查下一个名为 SelfieCapture.class 的触发类,看看它是否也从 MyBaseActivity 扩展。

还要考虑当你想得到 currentActivity ,如果你把它放在 onCreate ,你会得到 null 有关详细信息,请参阅 了解活动生命周期

原文由 Hamid Mir 发布,翻译遵循 CC BY-SA 4.0 许可协议

在某些情况下,我发现将 onCreatepersistentState 参数一起使用会导致问题:

     override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
    }

onCreate 更改为仅使用 savedInstanceState 参数可解决此问题:

     override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

原文由 vkataria 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题