Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Asynctask结果在activty关闭并导致崩溃后出现_Android_Android Asynctask_Crash_Request_Android Context - Fatal编程技术网

Android Asynctask结果在activty关闭并导致崩溃后出现

Android Asynctask结果在activty关闭并导致崩溃后出现,android,android-asynctask,crash,request,android-context,Android,Android Asynctask,Crash,Request,Android Context,我有一个应用程序,它有一个用于web Api请求的Asynctask,并且有许多用于多个选项卡的请求 当用户在选项卡之间快速滚动时,许多请求便当!但当用户关闭活动时,一些正在进行的后台操作会导致应用程序崩溃 我试过这个: 在我的doinBackground中,我总是检查片段是否已添加() 当Asynctask从活动运行时,我也会这样做: 在活动的顶部,我取消了ran Asyctask,然后检查它的onPostExecute,如果没有取消,做一些UI工作。但问题是我在doInBackground中

我有一个应用程序,它有一个用于web Api请求的
Asynctask
,并且有许多用于多个选项卡的请求

当用户在选项卡之间快速滚动时,许多请求便当!但当用户关闭活动时,一些正在进行的后台操作会导致应用程序崩溃

我试过这个: 在我的doinBackground中,我总是检查片段是否已添加()

当Asynctask从活动运行时,我也会这样做: 在活动的顶部,我取消了ran Asyctask,然后检查它的
onPostExecute
,如果没有取消,做一些UI工作。但问题是我在
doInBackground
中崩溃了

这是在
StaticUtils.generateReguest
中创建respond时发生崩溃的一行:

if (status != 200 && status != 401 && status != 404 && status != 0) {
            Intent intent = new Intent(context, ErrorActivity.class); //error point to this line
            intent.putExtra(ErrorActivity.REASON, "SERVER");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            (context).startActivity(intent);
        }
这是导致上述线的对数cat:

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

我想这可能是因为上下文的关系。因为当我生成一个请求时,我会将活动上下文传递给Requestgenerator,正如您在代码中看到的,它会导致显示错误活动。当用户关闭时,活动上下文已更改,因此请求生成器无法打开“ErrorActivity”。处理此问题的最佳实践是什么?我在谷歌上搜索,找不到一个好的解决方案?

我认为上下文是空的。 为什么不对上下文进行空检查呢

      if(context != null){
          Intent intent = new Intent(context, ErrorActivity.class); 
          intent.putExtra(ErrorActivity.REASON, "SERVER");
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          (context).startActivity(intent);
      }

您的
上下文
为空,我不确定您是如何传递上下文的。但我建议这样做

public class YourActivity extends Application{
    Context appContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_two);
        appContext=getApplicationContext();
MyAsynchClass mAsynch= new MyAsynchClass(appContext);
mAsynch.execute();
    }
然后使用构造函数中的
appContext

如果上述方法无效,则使用该方法

,


公共类MyApplication扩展了应用程序{
私有静态语境;
public void onCreate(){
super.onCreate();
MyApplication.context=getApplicationContext();
}
公共静态上下文getAppContext(){
返回MyApplication.context;
} }
1)在该位置放置一个调试器点,并检查哪个变量变为null。看起来它的上下文为null,但仍然需要检查它一次

2) 如果这不起作用,请使用相同的功能

if (status != 200 && status != 401 && status != 404 && status != 0) {
    Intent intent = new Intent(context, ErrorActivity.class);
        intent.putExtra(ErrorActivity.REASON, "SERVER");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

在岗位上表现出色。我不确定,但由于在后台线程中而不是在UI线程中进行后台工作,因此无法处理UI处理。

在活动暂停时也应执行相同的操作。崩溃发生在doingOnBackground!您能给我日志吗?您在哪里使用
context.getPackageName()
?不在哪里,但它指向这一行:Intent Intent=new Intent(context,ErrorActivity.class);我做过这样的事。把问题再读一遍。在任务活动更改期间
<application android:name="com.xyz.MyApplication">

</application>

public class MyApplication extends Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApplication.context;
    } }
if (status != 200 && status != 401 && status != 404 && status != 0) {
    Intent intent = new Intent(context, ErrorActivity.class);
        intent.putExtra(ErrorActivity.REASON, "SERVER");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }