当应用程序对在线数据库进行查询时,我试图向用户显示加载图标。我尝试过使用 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,但在获得服务器的响应之后。如果我使用关闭,它甚至不会出现)
final ProgressDialog loader = new ProgressDialog(JogarActivity.this);
loader.show();
//...the if-else code i've pasted above
loader.dismiss();
即使使用 runOnUiThread 它也不起作用!我越来越没有选择...
感谢所有帮助。