使用Stand stand asynctask看不到进度条

时间:2015-10-23 19:50:07

标签: android android-asynctask progressdialog

我正在尝试通过JSON从Web Server获取一些数据。我正在使用asynctask这样做。通常在我的ListView中显示5-10秒。

因此我想把微调器进度条。我的代码工作正常只有问题是进度条不可见。

调用asyntask的MyActivity代码     尝试{     JSONObject output = new AsyncTaskJsonParse(this,status,A,B,city).execute()。get();

try {
        JSONObject output = new AsyncTaskJsonParse(ListViewDisplay.this,status, bgrp, antigen, city).execute().get();

        JSONObject src = output.getJSONObject("data");

        String flag = output.getString("success");
        String flagmsg = output.getString("message");

        if (flag == "1") {
            JSONArray jarr_name = new JSONArray(src.getString("name"));
            JSONArray jarr_fathername = new JSONArray(src.getString("fathername"));
            JSONArray jarr_moh = new JSONArray(src.getString("moh"));
            JSONArray jarr_city = new JSONArray(src.getString("city"));
            JSONArray jarr_phone = new JSONArray(src.getString("phone"));

            int n = jarr_name.length();

            name_array = new String[n];
            fathername_array = new String[n];
            moh_array = new String[n];
            phone_array = new String[n];
            city_array = new String[n];
            for (int i = 0; i < n; i++) {
                name_array[i] = (String) jarr_name.get(i);
                fathername_array[i] = (String) jarr_fathername.get(i);
                moh_array[i] = (String) jarr_moh.get(i);
                phone_array[i] = (String) jarr_phone.get(i);
                city_array[i] = "Vadodara";

                Log.d("Inside StringArray", i + "");
            }

            String msg = src.getString("name");

            list = (ListView) findViewById(R.id.listView);

            CustomListAdapter custAdaptor = new CustomListAdapter(this, name_array, fathername_array, mohalla_array, city_array, phone_array);
            list.setAdapter(custAdaptor);


        }else
        {
            Toast.makeText(this, "Data not found" + flagmsg, Toast.LENGTH_LONG).show();

        }

        }catch(ExecutionException e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch(InterruptedException e)
        {
            e.printStackTrace();
        }catch(JSONException je)
        {

        }

带有进度条代码的独立asyntask

public class AsyncTaskJsonParse extends AsyncTask<String, String, JSONObject>
{
String A,B;
private String url = "abc.com/check.php";
List<NameValuePair> param=new ArrayList<NameValuePair>();

private Context context;
private ProgressDialog progress;

public AsyncTaskJsonParse(Context context,String A,String B,String antigen,String city)
{
    this.A=A;
    this.B=B;
    this.city=city;
    this.context=context;
    progress=new ProgressDialog(context);
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    Log.e("In preexecution  ", "Preexecution 1");

    progress.setMessage("Processing...");
    progress.setIndeterminate(true);

    progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progress.setCancelable(true);
    Log.e("In preexecution  azam", "Preexecution 2");
    progress.show();
    if(progress.isShowing())
    {
        Log.d("In preexecution  ", "Showing 2");
    }
  }
//rest of code i.e. doInBackground and postexecute come after this.
@Override
protected JSONObject doInBackground(String... arg0) {
    // TODO Auto-generated method stub

    try
    {
        JsonParsor parse=new JsonParsor();
        Log.d("diInbackgrnd  ","Dialog box");

        jsonobj = parse.getJSONFromUrl(url, param);
    }
    catch(Exception e)
    {
        Log.e(TAG, " "+e );
    }

    return jsonobj;
}
@Override
protected void onPostExecute(JSONObject result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
    //pDialog.dismiss();

    if(progress.isShowing())
    {
        Log.e("In onPost ", "Showing 2");
    }

    progress.dismiss();
}

}

在我的日志中,我可以看到消息“在预执行中显示2”。应用程序按预期工作,但Spinner进度条不可见。

注意:我没有在任何xml文件中添加任何进度条组件。我需要添加它吗?如果是,那么在哪里以及如何?

类JsonParser.java

public class JsonParsor {



final String TAG = "JsonParser.java";

static InputStream is = null;
static JSONObject jObj = null;
static String str = "";

public JSONObject getJSONFromUrl(String url,List<NameValuePair> params) {

    try {
        HttpClient client = new DefaultHttpClient();

        HttpPost post = new HttpPost(url);
        post.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse response = client.execute(post);

        HttpEntity entity = response.getEntity();



        is = entity.getContent();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }




    try
    {
        BufferedReader br=new BufferedReader(new InputStreamReader(is,"iso-8859-1"), 8);

        StringBuilder builder=new StringBuilder();
        String line=null;

        while((line=br.readLine())!=null)
        {
            builder.append(line + "\n");
        }

        is.close();

        str=builder.toString();


    }
    catch(Exception e)
    {

    }

    try {
        jObj=new JSONObject(str);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return jObj;
 }
}

2 个答案:

答案 0 :(得分:1)

我怀疑你的问题是你的AsyncTask立即完成,因为parse.getJSONFromUrl ...也是Async。所以最新发生的是progress.dismiss();在onPostExecute中也立即调用。

尝试删除progress.dismiss();来自onPostExecute,看看会发生什么

答案 1 :(得分:0)

这应该有效。但没有progress.setMessage(“Processing ...”); 你仍然可以设置它。

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = new ProgressDialog(getActivity(),R.style.MyTheme);
            dialog.setCancelable(false);
            dialog.setProgressStyle(android.R.style.Widget_ProgressBar_Small);
            dialog.show();
        }