Android ProgressDialog不';不显示
我创建了一个Android ProgressDialog不';不显示,android,android-alertdialog,Android,Android Alertdialog,我创建了一个警报对话框,让用户选择是否从服务器下载内容 如果用户选择下载,AlertDialog将被取消,并出现一个连接到AsyncTask的ProgressDialog ProgressDialog从未显示。AlertDialog的“确定”按钮保持选中状态,直到AsyncTask的操作结束 如果我在代码中“注释”了AsyncTask操作,则AlertDialog将被正确解除,并显示ProgressDialog 我没有在真正的设备上尝试这个应用程序,只有模拟器 问题出在哪里?试试这段代码,这可能
警报对话框
,让用户选择是否从服务器下载内容
如果用户选择下载,AlertDialog
将被取消,并出现一个连接到AsyncTask
的ProgressDialog
ProgressDialog
从未显示。AlertDialog
的“确定”按钮保持选中状态,直到AsyncTask
的操作结束
如果我在代码中“注释”了AsyncTask
操作,则AlertDialog
将被正确解除,并显示ProgressDialog
我没有在真正的设备上尝试这个应用程序,只有模拟器
问题出在哪里?试试这段代码,这可能会对您有所帮助
private class allinfo extends AsyncTask<String, Void, JSONObject> {
private ProgressDialog dialog;
protected void onPreExecute(){
dialog = ProgressDialog.show(collection.this, "Loading", "Loading. Please wait...", true,false);
}
@Override
protected JSONObject doInBackground(String... arg0) {
// TODO Auto-generated method stub
return json;
}
protected void onPostExecute(JSONObject json)
{
dialog.dismiss();
info(json);
}
}
私有类allinfo扩展异步任务{
私人对话;
受保护的void onPreExecute(){
dialog=ProgressDialog.show(collection.this,“正在加载”,“正在加载.请稍候…”,true,false);
}
@凌驾
受保护的JSONObject doInBackground(字符串…arg0){
//TODO自动生成的方法存根
返回json;
}
受保护的void onPostExecute(JSONObject json)
{
dialog.dismise();
信息(json);
}
}
ProgressDialog
在AsyncTask
示例中使用AlertDialog
正按钮实现:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Your Title");
// set dialog message
alertDialogBuilder
.setMessage("Click yes to go to AsyncTask!")
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
new MyAsyncTaskClass().execute();
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
// Here is the start of the AsyncTask
class MyAsyncTaskClass extends AsyncTask<String, String, Void> {
private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
protected void onPreExecute() {
progressDialog.setMessage("Dialog Message");
progressDialog.show();
progressDialog.setCanceledOnTouchOutside(false);
}
@Override
protected Void doInBackground(String... params) {
// TODO stuff
}
protected void onPostExecute(Void v) {
this.progressDialog.dismiss();
}
}
}
公共类MainActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、主布局);
AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(此);
//定名
alertDialogBuilder.setTitle(“您的标题”);
//设置对话框消息
alertDialogBuilder
.setMessage(“单击“是”转到AsyncTask!”)
.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
新建MyAsyncTaskClass().execute();
}
})
.setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
//如果单击此按钮,只需关闭
//打开对话框,不执行任何操作
dialog.cancel();
}
});
//创建警报对话框
AlertDialog AlertDialog=alertDialogBuilder.create();
//表现出来
alertDialog.show();
}
//这是异步任务的开始
类MyAsyncTaskClass扩展了AsyncTask{
private ProgressDialog ProgressDialog=新建ProgressDialog(MainActivity.this);
受保护的void onPreExecute(){
progressDialog.setMessage(“对话框消息”);
progressDialog.show();
progressDialog.setCanceledOnTouchOutside(false);
}
@凌驾
受保护的Void doInBackground(字符串…参数){
//待办事项
}
受保护的void onPostExecute(void v){
此.progressDialog.discouse()文件;
}
}
}
这是startDownload部分
private void startDownload() {
String url ="file download link";
Toast.makeText(dwn.this, url,Toast.LENGTH_LONG).show();
new DownloadFileAsync().execute(url);
}
这是异步任务
class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... aurl) {
int count;
try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/file.type");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
}
catch (Exception e) {
// TODO Auto-generated catch block
}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
显示一些代码。你解决过这个问题吗?如果是,请将适当的答案标记为正确,或添加您自己的答案并将其标记为已接受。
class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
@Override
protected String doInBackground(String... aurl) {
int count;
try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/file.type");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
}
catch (Exception e) {
// TODO Auto-generated catch block
}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading PDF file");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}