2

Я не могу назвать AsyncTask статическим методом. В нем говорится, что «нельзя ссылаться из статического контекста». Важно, чтобы этот метод был статичным, и мне нужно, чтобы он был таким же для нескольких других моих процессов.Не удается вызвать 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 
    } 
} 

EDIT: 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$3.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$1.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); 

Похоже, он не может получить доступ к SharedPreferences от метода AsyncTask. Он работал задолго до этого. Что с этим не так?

+0

затем попробуйте позвонить напрямую asynch – Pavya

+0

@ user3676184 Что вы подразумеваете под именем? – Dinuka

+0

вызовите новые GetSearchResults (requestSearch) .execute(); это когда вам нужно вызвать асинхронный. почему вы создаете для него отдельный метод. – Pavya

ответ

5

Если Async класса является non-static внутренним классом внутри вашего Activity, то вам нужно instance класса ограждающего, чтобы instantiateinner class.

Вы должны назвать как этот путь внутри static метода:

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

Некоторое значение - «null» в вашем методе doInBackground. Можете ли вы опубликовать код своего дела в фоновом режиме? (Line 78) @ Earthling –

+0

Это сработало! :) спасибо человеку – Dinuka

+0

Хотя это отвечает на вопрос, код очень нетрадиционный. – Hindol

2

Объявить свой внутренний класс как static:

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

Или переместить его в свой собственный файл.

+0

Downvoter: why? –

+0

Я не знаю, почему вы получили нижний план, но это почти делает трюк. Дело в том, что контекст приложения не может ссылаться теперь на статический метод. Например: SharedPreferences accpref = getActivity(). GetSharedPreferences ( «accpref», Context.MODE_PRIVATE); – Dinuka

+0

Что касается вашего опубликованного кода, этот ответ правильный. Если вы пытаетесь ссылаться на переменные-члены или методы внешнего класса во внутреннем классе (не показано), у вас есть проблема: вам нужен экземпляр внешнего класса. Невозможно сказать, как сделать это изменение без дополнительной информации. –

0

ваш метод UpdateResults является статическим, но внутренний GetSearchResults класс не определен статический, вы не можете включать ни один статический класс в статический метод, потому что ни один класс принадлежит объекту, но в статическом методе нет объекта

Смежные вопросы