handleWindowVisibility:令牌 android.os.BinderProxy 没有 activity
handleWindowVisibility: no activity for token android.os.BinderProxy
我有一个登录屏幕,成功登录后,它完成并显示另一个包含用户信息的页面。
我读到了 and also this post。
我还阅读了很多有关我们如何扩展应用程序 class 的内容,但我仍然无法 运行 这段代码。
您可以在下面找到我的代码,我也会解释错误。
这是我使用 Volley 调用 AsyncTask 的方式:
错误类似于 no activity for token android.os.BinderProxy
,当我调用 startActivity(intent);
.
时它会出现
我知道这个错误是因为 activity 被杀死并且 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) {
}
});
我的界面如下:
VolleyCallback.java:
public interface VolleyCallback {
void onSuccess(JSONObject result) throws JSONException;
void onError(String result) throws Exception;
}
Util.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);
MyCustomApplication.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);
}
}
这段代码似乎是正确的,但我唯一的怀疑是当你想在startActivity(intent)
中打开新的activity时,错误发生了。
因此,检查下一个名为 SelfieCapture.class
的 class,看看它是否也从 MyBaseActivity
扩展。
还要考虑当你想得到currentActivity
时,如果你把它放在onCreate
中,你会得到null
。更多信息请参考Understand the Activity Lifecycle.
在某些情况下,我发现使用带有 persistentState 参数的 onCreate 可能会导致问题:
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
}
将 onCreate 更改为仅使用 savedInstanceState 参数修复了问题:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
就我而言,这发生在我试图通过 intent extras 传递一个非常长的 JSON 字符串时。
据我推断,通过额外的包传递一个非常大的值可能会在启动新意图时导致内存问题。
尝试使用共享首选项或可序列化对象在活动之间共享大量内容
希望对您有所帮助!
我不知道为什么以及如何,但我所做的就是我只是
build > Rebuilt Project 然后在重建之后,我只是 File > Invalidate Caches / Restart
然后我的 activity 运行完美...!
我在登录时遇到此错误 activity 因为我忘记打开模拟器互联网!我打开它,它解决了。
我的意思是这个错误:令牌 android.os.BinderProxy
没有 activity
我有一个登录屏幕,成功登录后,它完成并显示另一个包含用户信息的页面。
我读到了
我还阅读了很多有关我们如何扩展应用程序 class 的内容,但我仍然无法 运行 这段代码。
您可以在下面找到我的代码,我也会解释错误。
这是我使用 Volley 调用 AsyncTask 的方式:
错误类似于 no activity for token android.os.BinderProxy
,当我调用 startActivity(intent);
.
时它会出现
我知道这个错误是因为 activity 被杀死并且 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) {
}
});
我的界面如下:
VolleyCallback.java:
public interface VolleyCallback {
void onSuccess(JSONObject result) throws JSONException;
void onError(String result) throws Exception;
}
Util.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);
MyCustomApplication.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);
}
}
这段代码似乎是正确的,但我唯一的怀疑是当你想在startActivity(intent)
中打开新的activity时,错误发生了。
因此,检查下一个名为 SelfieCapture.class
的 class,看看它是否也从 MyBaseActivity
扩展。
还要考虑当你想得到currentActivity
时,如果你把它放在onCreate
中,你会得到null
。更多信息请参考Understand the Activity Lifecycle.
在某些情况下,我发现使用带有 persistentState 参数的 onCreate 可能会导致问题:
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
}
将 onCreate 更改为仅使用 savedInstanceState 参数修复了问题:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
就我而言,这发生在我试图通过 intent extras 传递一个非常长的 JSON 字符串时。 据我推断,通过额外的包传递一个非常大的值可能会在启动新意图时导致内存问题。 尝试使用共享首选项或可序列化对象在活动之间共享大量内容
希望对您有所帮助!
我不知道为什么以及如何,但我所做的就是我只是 build > Rebuilt Project 然后在重建之后,我只是 File > Invalidate Caches / Restart
然后我的 activity 运行完美...!
我在登录时遇到此错误 activity 因为我忘记打开模拟器互联网!我打开它,它解决了。
我的意思是这个错误:令牌 android.os.BinderProxy
没有 activity