У меня возникли проблемы с отображением индикатора прогресса диалога. Я просмотрел несколько потоков, и предлагаемые решения, похоже, не работают.Диалоговое окно выполнения задачи Async не отображается
Весь код в этом AsyncTask
действительно получил вызов, однако я не вижу отображаемого индикатора выполнения. Этот AsycTask
определен в отдельном классе и вызывается из моего фрагмента, где я передаю getActivity()
в качестве контекста.
Моя мысль заключается в том, что проблема связана с тем, как контекст передается в диалог прогресса.
public class ExampleClass
{
private class loginAsyncTest extends AsyncTask<HttpPackage, Void, String>
{
ProgressDialog dialog;
Context spinnerContext;
public void setSpinnerContext(Context context)
{
spinnerContext = context;
}
@Override
protected void onPreExecute()
{
dialog = new ProgressDialog(spinnerContext);
dialog.setMessage("Loading...");
dialog.setIndeterminate(false);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setCancelable(true);
dialog.show();
Log.d("http", "dialog spinner started");
}
protected String doInBackground(HttpPackage... httpParameters)
{
HttpClient client = new DefaultHttpClient();
String url = httpParameters[0].getUrl();
// Get HTTP parameters that are passed in
ArrayList<NameValuePair> parameterList = httpParameters[0].getParameters();
HttpPost post = new HttpPost(url);
String responseJson = "";
try
{
post.setEntity(new UrlEncodedFormEntity(parameterList));
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null)
{
responseJson = responseJson + line;
}
}
catch (IOException e)
{
e.printStackTrace();
}
return responseJson;
}
protected void onPostExecute(String result)
{
if(dialog.isShowing())
{
dialog.dismiss();
}
}
}
}
Вот вызов ExampleClass, который поступает из фрагмента, который предоставляет контекст.
Public class SampelFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.dialog_login, container, false);
ExampleClass.loginRequest(params, getActivity()));
return rootView;
}
}
ExampleClass затем передает контекст на наш AsyncTask
public String loginRequest(HttpPackage postParameters, Context context)
{
loginAsyncTest loginAsync = new loginAsyncTest(context);
loginAsync.execute(postParameters);
return someString;
}
, где вы работаете? –
@Lakhan Я вызываю задачу async из фрагмента. Мне бы хотелось, чтобы в диалоговом окне прогресса отображалось, но задача async находится в отдельном классе, где его можно повторно использовать. – mil06