【问题标题】:AsyncTask in other class error in android javaandroid java中其他类错误中的AsyncTask
【发布时间】:2015-05-07 14:49:47
【问题描述】:

嗨,我试图在其他类中使用 asynctask,但是当我调用它时它不起作用

这是我的代码

package com.examplee.test;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.widget.Toast;

    public class test extends Activity {

        public static void main(String[] args) {

            new ProgressTask(test.this).execute();  // THIS IS ERROR CANNOT USE THIS IN STATIC CONTEXT and when i change static thing class doesn't work anymore


        }

        private class ProgressTask extends AsyncTask<String, Void, Boolean> {
            private ProgressDialog dialog;

            public ProgressTask(test mainActivity) {
                context = mainActivity;
                dialog = new ProgressDialog(context);
            }

            private Context context;

            protected void onPreExecute() {
                this.dialog.setMessage("Please Wait For Some Time...");
                this.dialog.setCancelable(false);
                this.dialog.setTitle("Please Wait...");
                this.dialog.setIcon(R.drawable.ic_launcher);
                this.dialog.show();
            }

                @Override
            protected void onPostExecute(final Boolean success) {

                    if (dialog.isShowing()) {
                    dialog.dismiss();
                }

                    if (success) {
                        Toast.makeText(context, "Done", Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(context, "Some Error", Toast.LENGTH_LONG).show();
                    }

            }

            protected Boolean doInBackground(final String... args) {

                // My Work i have to perform

                return null; 


              }
        }

    }

谁能更正这段代码? 即使我尝试更改 progresstask.execute 上的所有内容,也没有任何效果:(

如果有人能花时间帮我解决问题,我将不胜感激:)

这一行是我在课堂上所需要的

public static void main(String[] args)

【问题讨论】:

  • 这门课在我看来不是一成不变的......你如何开始这个活动?
  • 您正在尝试在 Android 中运行 main 方法。请参考 Android 开发者文档
  • 我改变了话题,我的意思是任何类都不能执行 new ProgressTask(test.this).execute();它可以毫无问题地在 MainActivity 中执行
  • @eduyayo public static void main(String[] args) { 这是运行课程所必需的,我无法更改此行主线对不起,我不是 Java 专家,只是初学者需要代码帮助跨度>
  • 是的,@radioactive,因此我对这个问题投了反对票。您不能在 android 运行时之外运行 android 运行时。您可以使用单元测试框架,但不能使用简单的main

标签: java android android-asynctask


【解决方案1】:

这不是在 android 中启动应用程序的正确方法。在Java,你将使用

public static void main(String[] args) {

但在android 中,它从onCreate 方法开始活动。

查看activity 生命周期:

应该是这样的

public class Test extends Activity {

     @Override
    protected void onCreate(Bundle saveInstance)
    {
       // This onCreate method will be called first when activity starts
       super.onCreate(saveInstance);
      new ProgressTask(test.this).execute();
    }

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

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
     }
    }
   }

以上只是一个模板。您需要根据需要进行更改。

【讨论】:

  • @radioactive 你是什么意思?您需要在模拟器或真实设备中运行您的程序。这不像 java 应用程序运行并在控制台中获取输出。转到here 并开始学习基础知识:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
相关资源
最近更新 更多