나는 이것을 알아낼 수 없습니다. 나는 안드로이드에 익숙하지 않고 웹 사이트에서 데이터베이스를 쿼리하는 동안 대화를 표시하려고합니다. doInBackground()가 완료 될 때까지 ProgressDialog가 표시되지 않는다는 점을 제외하고는 코드가 제대로 작동합니다. 여기 doInBackground()가 완료 될 때까지 ProgressDialog가 표시되지 않습니다.
코드를입니다private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog mProgressDialog;
private Context context;
private String taskResult;
public MyAsyncTask(Activity activity) {
context = activity;
mProgressDialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute() {
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setMessage("Performing Query...");
mProgressDialog.show();
Log.d("log_tag", "Showed dialog");
}
@Override
protected void onPostExecute(Void result) {
if (!error) {
Log.d("log_tag", "No ERROR - " + error);
JSONArray jArray;
List<Map<String, String>> lValues = new ArrayList<Map<String, String>>();
try{
jArray = new JSONArray(taskResult);
JSONObject json_data=null;
//Log.d("log_tag", "for loop to read data");
for(int i=0;i<jArray.length();i++){
json_data = jArray.getJSONObject(i);
Map<String, String> datum = new HashMap<String, String>(2);
datum.put("artist", json_data.getString("artist"));
datum.put("title", json_data.getString("title"));
lValues.add(datum);
}
} catch(JSONException e1){
Message("No Results Found");
} catch (ParseException e1) {
e1.printStackTrace();
}
lstResults.setAdapter(new SimpleAdapter(context, lValues,
android.R.layout.simple_expandable_list_item_2,
new String[] {"artist", "title"},
new int[] {android.R.id.text1, android.R.id.text2}));
} else {
Message("ERROR: " + errString);
error = false;
errString = "";
}
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
Log.d("log_tag", "Closed dialog");
}
}
@Override
protected Void doInBackground(Void... params) {
StringBuilder sb;
InputStream is = null;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("c_name", generateSearchCriteria()));
Log.d("log_tag", nameValuePairs.get(0).toString());
try{
Log.d("log_tag", "Create Object");
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(RHINOGOLD_URL);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
errString = "Connection Error";
error = true;
Log.e("log_tag", "Error in http connection - " + error + " - " + e.toString());
}
//convert response to string
if (!error) {
Log.d("log_tag", "BufferedReader - " + error);
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
sb = new StringBuilder();
Log.d("log_tag", "append");
sb.append(reader.readLine() + "\n");
String line="0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
Log.d("log_tag", "close input stream");
is.close();
if (sb.toString() == null) {
taskResult = "No values returned";
} else {
taskResult=sb.toString();
}
} catch(Exception e) {
errString = "The application encountered an error";
error = true;
Log.e("log_tag", "Error converting result - " + error + " - " + e.toString());
}
}
return null;
}
}
내가 거기 여기에는 번호가 프로그램의 슬루없는 내가 말했듯이, 나는 그래서 난 아직도이 작품의 방법을 모두 파악하고있어 새로운 해요 확신 . 어쨌든, 당신이 볼 수 있듯이 나는 여기에 몇 가지 로그를 가지고 있으며 LogCat 출력을보고 대화 상자가 나타나서 내가 얻은 것을 볼 수 있습니다.
Showed dialog
c_name=artist LIKE 'journey' OR title LIKE 'journey'
Create Object
... (long pause)
BufferedReader - false
append
close input stream
No ERROR - false
Closed dialog
... (긴 멈춤) 다음까지만 대화 상자가 표시되고 분할 초 만 표시됩니다. 일시 중지 후 줄이 너무 빨리 발생합니다. 정확히 어디에서 대화 상자가 표시되는지 알 수 없지만 긴 멈춤 전에 표시해야한다는 것을 이해합니다. 특히 "표시된 대화 상자"를 보았 기 때문에.
마지막 순간에 내 대화가 표시되는 이유를 파악하는 데 도움이됩니까? 이 시도
당신이 대화 상자를 만들 때 어떻게됩니까을 이렇게 ('mProgressDialog = 새해서 ProgressDialog (컨텍스트);')'onPreExecute()'또는 귀하의 활동에? – Sam
생성자와 생성자 사이에서 분리하는 대신'onPreExecute'에서'mProgressDialog = ProgressDialog.show (context, ","Performing Query ... ", true);를 사용하면 올바르게 작동합니까? – Geobits
어느 쪽도 일하지 않았다, 나는 그것을 이해하지 않는다. – Geoff