#android #progressdialog #ui-thread
#Android #progressdialog #пользовательский интерфейс-поток
Вопрос:
Я действительно изо всех сил пытался выяснить, как получить ProgressDialog в потоке пользовательского интерфейса для этого кода, учитывая, что uploadPhoto и был бы признателен за любые рекомендации:
@Override
/** Handle Upload a Photo **/
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
// Get image
if (resultCode == RESULT_OK) {
// ProgressDialog dialog = ProgressDialog.show(this, "", "Uploading Photo...", true, false);
switch(requestCode) {
// Take Photo
case 4001:
// Upload
uploadPhoto(Uri.fromFile(mImageFile));
break;
// Select Photo
case 5001:
// Get image
Uri selectedImage = imageReturnedIntent.getData();
// Upload
uploadPhoto(selectedImage);
break;
}
// Dismiss
// dialog.dismiss();
}
}
Ответ №1:
Используйте AsyncTask примерно так:
public class NetworkTask extends AsyncTask<Object , Void, Object> {
Context context;
boolean shouldContinue = true;
public ProgressDialog dialog;
String waitMessage = "Please wait, loading data...";
public NetworkTask(Context con){
this.context = con;
}
public void setMessage(String msg){
waitMessage = "Please wait, " msg;
}
protected void onPreExecute(){
shouldContinue = ConnectionUtils.isNetworkAvailable(context);
if(shouldContinue)
dialog = ProgressDialog.show(context, null, waitMessage, true);
else{
Dialog.showToast(context, Constants.NETWORK_ERROR);
return;
}
}
@Override
protected void onPostExecute(Object result){
if(dialog != null ){
if(dialog.isShowing())
dialog.dismiss();
dialog = null;
}
}
@Override
protected Object doInBackground(Object... params){
//do uploading and other tasks
}
}
и в вашем Activity
вызове это так:
NetWorkTask task = new NetWorkTask(this); //Here you can pass other params
task.execute("");
Ответ №2:
использование AsyncTask может быть. поместите функцию загрузки фотографий в фоновый режим асинхронной задачи.
запустите диалоговое окно выполнения в предварительном выполнении.
закрыть / отменить диалоговое окно выполнения после выполнения.
пост-выполнение и предварительное выполнение выполняются в потоке пользовательского интерфейса.
private class uploadPhoto extends AsyncTask<Void, Void, Void>{
private ProgressDialog dialog;
protected void onPostExecute(Void dResult) {
dialog.cancel();
}
protected void onPreExecute() {
dialog = new ProgressDialog(Myactivity.this);
dialog.setCancelable(true);
dialog.setMessage("uploading...");
dialog.show();
}
protected Void doInBackground(Void... params) {
// call upload photo here.
}
}
для вызова AsyncTask используйте
new uploadPhoto().execute();
Комментарии:
1. Я вроде понимаю, о чем вы говорите, но я никогда не делал ничего из этого.
2. хорошо, тогда вам, возможно, придется взглянуть на AsyncTask и как это работает. обычно он используется для экземпляров такого типа. я добавил некоторый код, чтобы вы знали, как это работает.