アプリケーションがオンライン データベースにクエリを実行するときに、読み込み中のアイコンをユーザーに表示しようとしています。AnimationDrawable (カスタム アイコンは必要ないのであきらめました)、ProgressDialog、および ProgressBar を使用してみました。メッセージは必要なく、回転するアイコンだけが必要なため、ProgressBar が最も適切と思われます。しかし、ProgressBar を画面に表示することさえできません。どこで呼び出すかは問題ではありません。ProgressDialog が画面に表示されましたが、サーバーの応答後にのみ表示され、dismiss() または cancel() を使用してもまったく表示されません。
AsyncTasks または Threads を使用して成功しました。
アプリには、オプションのリストを表示しようとする JogarActivity.java クラスがあります。ユーザー ID などのパラメーターを受け取り、UserFunctions を呼び出します。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.jogar_layout);
Intent in = getIntent();
String url = this.getString(R.string.urlSite);
ArrayList<HashMap<String, String>> respostaList = new ArrayList<HashMap<String, String>>();
String idt = in.getStringExtra(TAG_ID);
primeiraPergunta = in.getBooleanExtra(TAG_PRIMEIRAPERGUNTA, true);
TextView insertPergunta = (TextView) findViewById(R.id.insertPergunta);
ListView insertRespostas = (ListView) findViewById(R.id.listResposta);
SharedPreferences settings = getSharedPreferences("PREFS_LOGIN", MODE_PRIVATE);
Integer idUsuario = settings.getInt("idUsuario", 0);
String idUser = idUsuario.toString();
if (primeiraPergunta){
UserFunctions userFunction = new UserFunctions();
json = userFunction.getJogar(idt, idUser);
}else{
try {
json = new JSONArray(in.getStringExtra(TAG_JSON));
json = json.getJSONArray(2);
} catch (JSONException e) {
e.printStackTrace();
}
}
以下は、userFunctions の getJogar 関数です。 public JSONArray getJogar(String categoria, String usuarioId){ List params = new ArrayList();
params.add(new BasicNameValuePair("categoria", categoria));
params.add(new BasicNameValuePair("idUsuario", usuarioId));
JSONArray json = jsonParser.getJSONFromUrl(perguntaURL, params);
return json;
}
JSONParser.java は httpRequest を作成するクラスです: public JSONArray getJSONFromUrl(String url, List params) {
// Making HTTP request
try {
// defaultHttpClient
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
// json = EntityUtils.toString(httpEntity);
// HttpEntity httpEntity2 = httpEntity;
json = EntityUtils.toString(httpEntity);
// is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//then makes the JSON manipulation
JSONParser と userFunctions がアクティビティでない限り、それらの内部で ProgressDialogs を使用できませんでした (アプリケーション コンテキストを取得できません)。すべてのサーバー要求は JSONParser.java で行われるため、最初に ProgressDialog/ProgressBar を配置しようとしました。
私が到達した最も近いのは、JogarActivity でこのコードを使用することでした (ProgressDialog を表示しますが、サーバーの応答を取得した後です。また、dismiss を使用しても表示されません)
final ProgressDialog loader = new ProgressDialog(JogarActivity.this);
loader.show();
//...the if-else code i've pasted above
loader.dismiss();
runOnUiThread を使用しても機能しません! オプションなしで取得しています...
助けてくれてありがとう。