Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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
Java 无法从静态方法调用AsyncTask?_Java_Android_Android Activity_Android Asynctask_Static Methods - Fatal编程技术网

Java 无法从静态方法调用AsyncTask?

Java 无法从静态方法调用AsyncTask?,java,android,android-activity,android-asynctask,static-methods,Java,Android,Android Activity,Android Asynctask,Static Methods,我似乎无法从静态方法调用AsyncTask。它说“不能从静态上下文引用”。这是很重要的,这个方法是静态的,我需要像我的一些其他过程 是否有方法从方法调用AsyncTask public static void UpdateResults(String requestSearch){ new GetSearchResults(requestSearch).execute(); //shows an error } class GetSearchResults extends AsyncT

我似乎无法从静态方法调用AsyncTask。它说“不能从静态上下文引用”。这是很重要的,这个方法是静态的,我需要像我的一些其他过程

是否有方法从方法调用AsyncTask

public static void UpdateResults(String requestSearch){
    new GetSearchResults(requestSearch).execute(); //shows an error
}

class GetSearchResults extends AsyncTask<Void, Void, Void> {

    String requestSearch;

    GetSearchResults(String searchtext){
        this.requestSearch = searchtext;
    }

    @Override
    protected Void doInBackground(Void... params) {
        //functions continuing 
    }
}
显示空指针的第78行指向这一行代码:

SharedPreferences accPref = getActivity().getSharedPreferences(
                    "accPref", Context.MODE_PRIVATE);

看起来它现在无法从AsyncTask方法获取SharedReferences。它以前工作得很好。有什么问题吗?

将您的内部类声明为
static

static class GetSearchResults extends AsyncTask<Void, Void, Void> {
静态类GetSearchResults扩展了异步任务{

或者将其移动到自己的文件中。

如果
Async
类是
活动
中的
非静态的
内部类,那么您需要一个封闭类的
实例
,以便
实例化
内部类

您必须在
static
方法中以这种方式调用:

SearchPeopleTab outerClass = new SearchPeopleTab(); //Outer class
        GetSearchResults task = outerClass.new GetSearchResults(requestSearch);
        task.execute();

您的方法UpdateResults是静态的,但内部类GetSearchResults不是静态定义的,您不能在静态方法中包含任何静态类,因为没有任何类属于object,但在静态方法中没有OgObject,然后尝试直接调用asynch@user3676184mate是什么意思?调用新的GetSearchResults(requestSearch).execute();这是您需要调用asynch时的情况。为什么要在中为ITA创建单独的方法,在静态void UpdateResults方法中使用asynctask内容?@user3676184ok。但您也可以在GetSearchResults中执行所有内容。我不知道您为什么会获得否决票,但这几乎可以解决问题。只是无法引用应用程序的上下文现在从静态方法开始。例如:SharedReferences accpref=getActivity().GetSharedReferences(“accpref”,Context.MODE_PRIVATE);就您发布的代码而言,这个答案是正确的。如果您试图在内部类中引用外部类的成员变量或方法(问题中未显示),您有一个问题:您需要外部类的实例。如果没有更多信息,无法说明如何进行此更改。非常简单,我尝试在GetSearchResults AsyncTask中获取应用程序上下文,但由于我将其更改为静态,因此不允许我引用getActivity()上下文现在,如果你想调用一个类的实例方法,你需要一个类的实例。在静态上下文中没有这个实例。在你的doInBackground方法中,一些值是
null
。你能在后台发布你的do的代码吗?(第78行)@earthlinga虽然这回答了这个问题,但代码非常非常规。常规的方法是什么@Hindol?我愿意接受更多的想法我有一个想法,但可能不是最好的。因为你需要访问上下文(活动就是上下文)从静态方法中,您可以使用应用程序上下文。看到这一点。然后,您不需要从内部类访问外部类,这在我看来是一种不好的做法。然后,您无法轻松地将内部类移动到单独的文件中。
SearchPeopleTab outerClass = new SearchPeopleTab(); //Outer class
        GetSearchResults task = outerClass.new GetSearchResults(requestSearch);
        task.execute();