Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 Android:toast内部异步任务_Java_Android_Android Asynctask_Toast_Android 2.3 Gingerbread - Fatal编程技术网

Java Android:toast内部异步任务

Java Android:toast内部异步任务,java,android,android-asynctask,toast,android-2.3-gingerbread,Java,Android,Android Asynctask,Toast,Android 2.3 Gingerbread,我有一个AsyncTask类SearchForQuestions,它是从活动QuizMap调用的。在SearchForQuestions中循环遍历数组时,我找不到toast在AsynTask中出现的正确上下文 标准Toast.makeTextgetApplicationContext,这是Toast!!!,Toast.LENGTH_SHORT.show;给出错误getApplicationContext未定义 我已经尝试了SO提供的一些解决方案,其中大部分都列出了,并且都涉及到获取UiThrea

我有一个AsyncTask类SearchForQuestions,它是从活动QuizMap调用的。在SearchForQuestions中循环遍历数组时,我找不到toast在AsynTask中出现的正确上下文

标准Toast.makeTextgetApplicationContext,这是Toast!!!,Toast.LENGTH_SHORT.show;给出错误getApplicationContext未定义

我已经尝试了SO提供的一些解决方案,其中大部分都列出了,并且都涉及到获取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();

        }});
}


将活动传递到异步任务中。见下文

private class SearchForQuestions extends AsyncTask<String, Void, DataHandler> {
    Activity activity;
    public void SearchForQuestions(Activity activity){
        this.activity = activity;
    }
//... rest of the code

将活动传递到异步任务中。见下文

private class SearchForQuestions extends AsyncTask<String, Void, DataHandler> {
    Activity activity;
    public void SearchForQuestions(Activity activity){
        this.activity = activity;
    }
//... rest of the code

干杯吧,为什么要为它创建一个函数呢?onPostExecute已在UI线程上


您无法访问,因为除非您传递外部类的实例,否则内部类无法调用外部类的函数。

只需Toast它,为什么要为它创建函数?onPostExecute已在UI线程上

您无法访问,因为内部类不能调用外部类的函数,除非您传递外部类的实例

请在宴会上致祝酒辞 为回调创建接口。 您的异步任务构造函数

private ToastCallback toastCallback;
public SearchQuestions(ToastCallback callback) {
    this.toastCallback = callback;
}

// in doInBackground() {

      toastCallback.invoke("Toast from background");
 }
在您的活动中

private void showNotNearToast(String text) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
        }
   }); 
}

public class MyToastCallback implements ToastCallback {
     @Override
     public void invoke(String text) {
         showNotNearToast(text);
     }
}

// Asynctask call
new SearchQuestion(new MyTosatCallback()).execute(<Your params here>);
请在宴会上致祝酒辞 为回调创建接口。 您的异步任务构造函数

private ToastCallback toastCallback;
public SearchQuestions(ToastCallback callback) {
    this.toastCallback = callback;
}

// in doInBackground() {

      toastCallback.invoke("Toast from background");
 }
在您的活动中

private void showNotNearToast(String text) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
        }
   }); 
}

public class MyToastCallback implements ToastCallback {
     @Override
     public void invoke(String text) {
         showNotNearToast(text);
     }
}

// Asynctask call
new SearchQuestion(new MyTosatCallback()).execute(<Your params here>);

从AsyncTask内部尝试以下操作:

myActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
    }
});
你在哪里有你的电脑

showNotNearToast("My Message"); // showNotNearToast undefined

将myActivity替换为您的活动名称。

从异步任务内部尝试以下操作:

myActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
    }
});
你在哪里有你的电脑

showNotNearToast("My Message"); // showNotNearToast undefined

将myActivity替换为您的活动名称。

滥用publishProgress方法

private class ToastAsyncTask extends AsyncTask<Void, String, Void>{
        @Override
        protected Void doInBackground(Void... voids) {
            SystemClock.sleep(1000);
            publishProgress("Toast msg string");
            SystemClock.sleep(1000);
            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            Toast.makeText(getApplicationContext(), values[0], Toast.LENGTH_SHORT).show();
        }
    }

滥用出版进度法

private class ToastAsyncTask extends AsyncTask<Void, String, Void>{
        @Override
        protected Void doInBackground(Void... voids) {
            SystemClock.sleep(1000);
            publishProgress("Toast msg string");
            SystemClock.sleep(1000);
            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            Toast.makeText(getApplicationContext(), values[0], Toast.LENGTH_SHORT).show();
        }
    }


我不会结束这个问题。我还没有解决我的问题,但提供的答案数量显然在其他情况下有效,这表明还有其他问题。我将重新构造这些类,以避免从AsyncTask中调用。

我不会结束这个问题。我还没有解决我的问题,但提供的答案数量显然在其他情况下有效,这表明还有其他问题。我将重新构造这些类,以避免从AsyncTask中调用。

您的问题是什么?它与Toast或SearchForQuestion有关吗?请参阅我的编辑。Toast.makeTextgetApplicationContext,这是Toast!!!,Toast.LENGTH_SHORT.show;在AsyncTask中不起作用。@JonasCz这篇文章正是我在所发布的代码片段中试图遵循的内容。我在什么地方搞砸了吗?试着让showNotNearToast方法公开静态无效,如果它不起作用,看看我的答案。你的问题是什么?它与Toast或SearchForQuestion有关吗?请参阅我的编辑。Toast.makeTextgetApplicationContext,这是Toast!!!,Toast.LENGTH_SHORT.show;在AsyncTask中不起作用。@JonasCz这篇文章正是我在所发布的代码片段中试图遵循的内容。我在什么地方搞砸了吗?试着让showNotNearToast方法公开静态无效,如果它不起作用,看看我的答案。这很糟糕。你不需要通过活动。如果你关闭应用程序,它会泄漏。我建议a或a@Froyo我从这里得到了我的答案:有很多投票,答案不完整?这很糟糕。你不需要通过活动。如果你关闭应用程序,它将泄漏。我建议a或a@Froyo我从这里得到我的答案:有很多投票,答案不完整?请参阅我的编辑。Toast.makeTextgetApplicationContext,这是Toast!!!,Toast.LENGTH_SHORT.show;不在AsyncTask内工作。AFAICS OP可以调用父类的方法,因为他使用的是内部而不是嵌套的静态类。奇怪,它还没有定义。请看我的编辑。Toast.makeTextgetApplicationContext,这是Toast!!!,Toast.LENGTH_SHORT.show;不在AsyncTask内工作。AFAICS OP可以调用父类的方法,因为他使用的是内部而不是嵌套的静态类。奇怪的是,它还没有定义。所以公共空间显示不近土司,公共接口ToastCallback{…,公共类MyToastCallback实现ToastCallback{…,进入QuizMap,私有void show notneartoaststring text{…,公共类MyToastCallback实现ToastCallback{…和new SearchQuestionnew…进入PostExecute?使用我在上面指定的代码放置new SearchQuestionnew MyToastCallback无法解析为类型您应该将接口放入其他文件中。showNotNearToast和MyToastCallback类进入您的活动类。抱歉@Froyo,当您为接口指定不同的文件时,您是否我的包中还有其他的.java文件吗?是的。你可以这样做,使public void show notneartoast…,public interface ToastCallback{…,公共类MyToastCallback实现ToastCallback
{…进入QuizMap,私有void shownnotneartoastString文本{…公共类MyToastCallback实现ToastCallback{…和new SearchQuestionnew…进入PostExecute?使用我在上面指定的代码放置new SearchQuestionnew MyToastCallback无法解析为类型您应该将接口放入其他文件中。showNotNearToast和MyToastCallback类进入您的活动类。抱歉@Froyo,当您为接口指定不同的文件时,您是否是否在我的包中有任何其他.java文件?是的。您可以在放置myActivity时执行此操作。此.runUnuithReadNew…就在showNotNearToastMy消息上方;提供QuizMap。此:在scopePlacing myActivity中无法访问QuizMap类型的封闭实例。此.runUnuithReadNew…就在showNotNearToastMy消息上方;提供QuizMap。此:不包含在QuizMap类型的站姿在作用域中是可访问的