我有一个类AsyncTask运行良好,但是在这个类中我在onPreExecute中有一个ProgressDialog,它运行正常,但我需要当我完成processdialog关闭的过程时,我把代码放在onPostExecute中,这个方式:
protected void onPostExecute() {
progress.dismiss();
}
但它没有做任何事情。对话框不会被忽略。 这是所有代码:
public class JsonRequest extends AsyncTask<String, Void, ArrayList<String>> {
private final Context context;
private ArrayList<String> stringArray = new ArrayList<String>();
private ProgressDialog progress;
public JsonRequest(Context c){
this.context = c;
}
protected void onPreExecute(){
progress= new ProgressDialog(this.context);
progress.setMessage("Loading");
progress.show();
}
@Override
protected ArrayList<String> doInBackground(String... params) {
try {
final String POST_PARAMS = params[1];
URL obj = new URL(params[0]);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
// For POST only - START
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write(POST_PARAMS.getBytes());
os.flush();
os.close();
// For POST only - END
int responseCode = con.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { //success
BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
JSONArray myListsAll= new JSONArray(response.toString());
for(int i=0;i<myListsAll.length();i++){
JSONObject jsonObject = myListsAll.getJSONObject(i);
this.stringArray.add(jsonObject.toString());
}
} else {
System.out.println("POST request not worked");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return this.stringArray;
}
protected void onPostExecute() {
progress.dismiss();
}
所以我打电话给:
public class MyActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private void createListView() {
itens = new ArrayList<ItemFeedsListView>();
String[] itensUrl = {"url","data"};
JsonRequest task = new JsonRequest(this);
try {
ArrayList<String> result = task.execute(itensUrl).get();
for(int i = 0 ; i < result.size() ; i++) {
String currentList = result.get(i);
JSONObject jsonobject = new JSONObject(currentList);
ItemFeedsListView item = new ItemFeedsListView(jsonobject.optString("value1"),jsonobject.optString("value2"),jsonobject.optString("valeu3"),jsonobject.optString("value4"),jsonobject.optString("value5"), R.mipmap.eu, R.mipmap.logo);
itens.add(item);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
//Cria o adapter
adapterListView = new AdapterFeedsListView(this, itens);
//Define o Adapter
listView.setAdapter(adapterListView);
//Cor quando a lista é selecionada para ralagem.
listView.setCacheColorHint(Color.TRANSPARENT);
}
}
答案 0 :(得分:2)
你没有在onPostExecute上调用右键:
你需要:
class A
问题是你没有通过添加onPostExecute()来覆盖AsyncTask类中的方法。您需要添加@Override注释并传入AsyncTask类的返回类型。
祝你好运,快乐的编码!
答案 1 :(得分:1)
您没有正确使用AsyncTask。看看这行代码:
ArrayList<String> result = task.execute(itensUrl).get();
这样做是启动AsyncTask(它通常会在后台线程中完成大部分工作),然后立即阻止主线程使用get()接收其结果方法。在这种情况下,您甚至可能甚至不使用AsyncTask,因为AsyncTask的目的是让主线程不必执行冗长的操作。
相反,你应该单独使用onPostExecute()中后台线程完成的工作。
答案 2 :(得分:0)
您还可以通过以下方式设置可见性:
@Override
protected void onPostExecute(ArrayList<String> data) {
super.onPostExecute(data);
progress.setVisibility(View.GONE);
}