У меня есть класс AsyncTask SearchForQuestions
, который вызывается из Activity QuizMap
. При переходе через массив в SearchForQuestions
я не могу найти правильный контекст для тоста, который появится в AsynTask.Android: тост внутри AsyncTask
Стандарт Toast.makeText(getApplicationContext(), "This is Toast!!!", Toast.LENGTH_SHORT).show();
дает ошибку getApplicationContext()
undefined.
Я пробовал некоторые из решений этого предложения SO, большинство из них перечислены here и беспокоиться о получении UiThread и запуске на этом.
Я не могу заставить это работать. Вот пример фрагментов кода того, что я пробовал. Я поместил метод в QuizMap
и попробую назвать его с SearchForQuestions
, но SearchForQuestions
не распознается. Как я могу обойти это?) Все еще новичок в java ...)
// QuizMap activity
public class QuizMap extends FragmentActivity
implements OnMarkerClickListener {
private GoogleMap map;
private static final String TAG = "QuizMap"; // debugging
...
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quizmap);
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
...
}
// make toast inside AsyncTask
public void showNotNearToast(final String toast) {
QuizMap.this.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(QuizMap.this, "This is Toast!!!", Toast.LENGTH_SHORT).show();
}});
}
.
// SearchForQuestions class
private class SearchForQuestions extends AsyncTask<String, Void, DataHandler> {
// checks for proximity to question locations
Location location =
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
@Override
protected DataHandler doInBackground(String... pointsList) {
String result = pointsList[0];
...
}
@Override
protected void onPostExecute(DataHandler result) {
ArrayList<String> resultsArray = result.results;
Integer numPoints = resultsArray.size();
for (int i =0;i<numPoints;i++){
String[] pointDetails = resultsArray.get(i).split("::");
...
// we can make use of the Android distanceTo function to calculate the distances
float distance = location.distanceTo(fixedLoc);
if (i > DIST) { // this is UCL
showNotNearToast("My Message"); // showNotNearToast undefined
if (distance < DIST) {
...
}
};
В чем вопрос? Связано ли это с Toast или 'SearchForQuestion'? – Froyo
См. Мое редактирование. 'Toast.makeText (getApplicationContext(),« Это Toast !!! », Toast.LENGTH_SHORT) .show();' не работает внутри AsyncTask. – mark
http://stackoverflow.com/a/12897386/4428462 – JonasCz