Android 无法运行异步示例。。?

Android 无法运行异步示例。。?,android,android-asynctask,android-activity,android-background,Android,Android Asynctask,Android Activity,Android Background,当我试图运行代码时,只有主toast正在运行。Progressdialog和其他toast消息未运行。此程序是睡眠进程的简单异步示例。主要问题是它未显示Progressdialog 我是否需要添加xml文件(它只包含一个textView和一个按钮)。 请帮我解决这个问题。谢谢 package com.example.asyncexample; import android.os.AsyncTask; import android.os.Bundle; import android.view.V

当我试图运行代码时,只有主toast正在运行。Progressdialog和其他toast消息未运行。此程序是睡眠进程的简单异步示例。主要问题是它未显示Progressdialog

我是否需要添加xml文件(它只包含一个textView和一个按钮)。 请帮我解决这个问题。谢谢

package com.example.asyncexample;

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;


    public class MainActivity extends Activity {


ProgressDialog progressBar;
int prorgessInc = 1;            // incrementing the progress dialog

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.start_button);
    button.setOnClickListener(startTaskListener);
    }


private OnClickListener startTaskListener =  new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    Context context = getApplicationContext();

    progressBar = new ProgressDialog(v.getContext());

    BackgroundTask test = new BackgroundTask(); 

        test.execute(context);

        CharSequence text = "Main Thread is Running";
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
    }
};

private class BackgroundTask extends AsyncTask<Context, Integer, String>{
    protected void OnPreExecute() {
        CharSequence msg = "BackgroundTask is Operating";
        progressBar.setCancelable(true);
        progressBar.setMessage(msg);
        progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressBar.setProgress(0);
        progressBar.setMax(100);
        progressBar.show();

    }

    @Override
    protected String doInBackground(Context... params) {
        //BackgroundTask Is Running
        for(int i =0; i<=100; i+=prorgessInc){
            try {Thread.sleep(100);}
        catch (InterruptedException e) { e.printStackTrace();}

            publishProgress(prorgessInc);

            if(isCancelled()) break;
            }

        return getString(R.string.backgndcompld);
    }

    protected void OnProgressUpdate(Integer...values ) {
            //Update Progress bar
        progressBar.incrementProgressBy(prorgessInc);

    }

    protected void PostExecute(String result){
        //Dissmiss progressbar 
        progressBar.dismiss();

        Context context = getApplicationContext();
        int duration  = Toast.LENGTH_LONG;
        Toast toast2 = Toast.makeText(context, result, duration);
        toast2.show();
    }

}
}       
package com.example.asyncexample;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.ProgressBar;
导入android.widget.Toast;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Context;
公共类MainActivity扩展了活动{
ProgressDialog progressBar;
int prorgessInc=1;//递增进度对话框
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮按钮=(按钮)findViewById(R.id.start_按钮);
setOnClickListener(startTaskListener);
}
私有OnClickListener startTaskListener=新OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Context=getApplicationContext();
progressBar=newprogressdialog(v.getContext());
BackgroundTask测试=新的BackgroundTask();
执行(上下文);
CharSequence text=“主线程正在运行”;
int duration=Toast.LENGTH\u LONG;
Toast Toast=Toast.makeText(上下文、文本、持续时间);
toast.show();
}
};
私有类BackgroundTask扩展了AsyncTask{
受保护的void OnPreExecute(){
CharSequence msg=“BackgroundTask正在运行”;
progressBar.setCancelable(真);
progressBar.setMessage(msg);
progressBar.setProgressStyle(ProgressDialog.STYLE_水平);
progressBar.setProgress(0);
设置最大进度条(100);
progressBar.show();
}
@凌驾
受保护字符串doInBackground(上下文…参数){
//BackgroundTask正在运行

对于(inti=0;iRight),您的问题在于异步任务的方法命名

您已定义:

  • 受保护的void OnPreExecute()
  • 受保护的void OnProgressUpdate()
  • 受保护的void PostExecute()
然而,真正的方法是:

  • 受保护的void onPreExecute()
  • 受保护的void onProgressUpdate()
  • 受保护的void onPostExecute()
注意大小写的不同。如果您使用了下面的
@覆盖
,您的IDE可能会向您显示这一点

我已对该代码和代码的其他部分进行了一些清理。请看:

public class MainActivity
        extends Activity
        implements View.OnClickListener
{

    private Button button;
    private ProgressDialog progressBar;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_example);
        button = (Button) findViewById(R.id.start_button);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v)
    {
        Log.d("click", "start button clicked, starting task");
        BackgroundTask test = new BackgroundTask();
        test.execute();
    }

    private class BackgroundTask
            extends AsyncTask<Void, Integer, String>
    {

        int PROGRESS_INCREMENT = 1;
        int PROGRESS_MAX = 100;
        String DIALOG_MSG = "AsyncTask is Operating";

        @Override
        protected void onPreExecute()
        {
            progressBar = new ProgressDialog(getApplicationContext());
            progressBar.setCancelable(true);
            progressBar.setMessage(DIALOG_MSG);
            progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressBar.setProgress(0);
            progressBar.setMax(PROGRESS_MAX);
            progressBar.show();
        }

        @Override
        protected String doInBackground(Void... params)
        {
            for (int i = 0; i <= 100; i += PROGRESS_INCREMENT)
            {
                try
                {
                    Thread.sleep(100);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
                publishProgress(PROGRESS_INCREMENT);
                if (this.isCancelled())
                {
                    break;
                }
            }
            return "[some result text]";
        }

        @Override
        protected void onProgressUpdate(Integer... values)
        {
            progressBar.incrementProgressBy(PROGRESS_INCREMENT);
        }

        @Override
        protected void onPostExecute(String result)
        {
            progressBar.dismiss();
            Toast.makeText(getApplicationContext(),
                            result,
                            Toast.LENGTH_LONG)
                            .show();
        }
    }
}
公共类活动
扩展活动
实现View.OnClickListener
{
私人按钮;
私人ProgressDialog progressBar;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_示例);
按钮=(按钮)findViewById(R.id.start\u按钮);
setOnClickListener(此);
}
@凌驾
公共void onClick(视图v)
{
Log.d(“单击”,“单击启动按钮,启动任务”);
BackgroundTask测试=新的BackgroundTask();
test.execute();
}
私有类背景任务
扩展异步任务
{
int PROGRESS_INCREMENT=1;
int PROGRESS_MAX=100;
字符串对话框\u MSG=“AsyncTask正在运行”;
@凌驾
受保护的void onPreExecute()
{
progressBar=新建ProgressDialog(getApplicationContext());
progressBar.setCancelable(真);
progressBar.setMessage(对话框消息);
progressBar.setProgressStyle(ProgressDialog.STYLE_水平);
progressBar.setProgress(0);
progressBar.setMax(PROGRESS_MAX);
progressBar.show();
}
@凌驾
受保护字符串doInBackground(无效…参数)
{

对于(int i=0;我感谢你..这对我真的很有帮助。我的问候。