无法从静态方法调用 AsyncTask?
Cannot call AsyncTask from a static method?
我似乎无法从静态方法调用 AsyncTask。它说 "cannot be referenced from a static context"。重要的是这个方法是静态的,我需要像我的其他几个进程一样使用它。
有没有办法从方法中调用 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
}
}
编辑:Anands 解决方案有效,但它一到达方法就抛出此异常:
FATAL EXCEPTION: AsyncTask #1
Process: com.eproject.eproject.emobile, PID: 26831
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.eproject.eproject.emobile.SearchTabs.SearchPeopleTab$GetSearchResults.doInBackground(SearchPeopleTab.java:78)
at com.eproject.eproject.emobile.SearchTabs.SearchPeopleTab$GetSearchResults.doInBackground(SearchPeopleTab.java:63)
显示空指针的第78行指向这行代码:
SharedPreferences accPref = getActivity().getSharedPreferences(
"accPref", Context.MODE_PRIVATE);
看起来它现在无法从 AsyncTask 方法中获取 SharedPreferences。它以前工作得很好。有什么问题吗?
声明你的内在 class 为 static
:
static class GetSearchResults extends AsyncTask<Void, Void, Void> {
或者将其移动到自己的文件中。
如果 Async
class 是一个 non-static
内部 class 在你的 Activity
里面,那么你需要一个 instance
的封闭class 为了 instantiate
inner class
.
你必须在 static
方法中这样调用:
SearchPeopleTab outerClass = new SearchPeopleTab(); //Outer class
GetSearchResults task = outerClass.new GetSearchResults(requestSearch);
task.execute();
你的方法UpdateResults是静态的,但是里面的class GetSearchResults不是静态定义的,你不能在静态方法中涉及none static class,因为none class 属于对象,但是在静态方法中没有 ogject
我似乎无法从静态方法调用 AsyncTask。它说 "cannot be referenced from a static context"。重要的是这个方法是静态的,我需要像我的其他几个进程一样使用它。
有没有办法从方法中调用 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
}
}
编辑:Anands 解决方案有效,但它一到达方法就抛出此异常:
FATAL EXCEPTION: AsyncTask #1
Process: com.eproject.eproject.emobile, PID: 26831
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.eproject.eproject.emobile.SearchTabs.SearchPeopleTab$GetSearchResults.doInBackground(SearchPeopleTab.java:78)
at com.eproject.eproject.emobile.SearchTabs.SearchPeopleTab$GetSearchResults.doInBackground(SearchPeopleTab.java:63)
显示空指针的第78行指向这行代码:
SharedPreferences accPref = getActivity().getSharedPreferences(
"accPref", Context.MODE_PRIVATE);
看起来它现在无法从 AsyncTask 方法中获取 SharedPreferences。它以前工作得很好。有什么问题吗?
声明你的内在 class 为 static
:
static class GetSearchResults extends AsyncTask<Void, Void, Void> {
或者将其移动到自己的文件中。
如果 Async
class 是一个 non-static
内部 class 在你的 Activity
里面,那么你需要一个 instance
的封闭class 为了 instantiate
inner class
.
你必须在 static
方法中这样调用:
SearchPeopleTab outerClass = new SearchPeopleTab(); //Outer class
GetSearchResults task = outerClass.new GetSearchResults(requestSearch);
task.execute();
你的方法UpdateResults是静态的,但是里面的class GetSearchResults不是静态定义的,你不能在静态方法中涉及none static class,因为none class 属于对象,但是在静态方法中没有 ogject