Android 无法运行异步示例。。?
当我试图运行代码时,只有主toast正在运行。Progressdialog和其他toast消息未运行。此程序是睡眠进程的简单异步示例。主要问题是它未显示Progressdialog 我是否需要添加xml文件(它只包含一个textView和一个按钮)。 请帮我解决这个问题。谢谢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
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;我感谢你..这对我真的很有帮助。我的问候。