Диалог прогресса при открытии - PullRequest
1 голос
/ 12 марта 2012

У меня есть приложение, которое загружает информацию из канала json в список.Это занимает минуту, чтобы загрузить, поэтому я хотел бы настроить индикатор выполнения, чтобы пользователи знали, что приложение что-то делает.Нужно ли реализовывать AsyncTask, или есть простой способ заставить значок прогресса вращения отображаться во время загрузки списка?Я предполагаю, что мне нужно поместить код progressdialog в задачу, которую я загружаю.Вот мой код для просмотра списка.

public class Schedule extends ListActivity {

protected EditText searchText;
protected SQLiteDatabase db;
protected Cursor cursor;
protected TextView textView;
protected ImageView imageView;
protected ArrayList<HashMap<String, String>> myList;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.schedule);

    View layout = findViewById(R.id.gradiant);

    GradientDrawable gd = new GradientDrawable(
            GradientDrawable.Orientation.TOP_BOTTOM, new int[] {
                    0xFF95B9C7, 0xFF06357A });
    gd.setCornerRadius(2f);

    layout.setBackgroundDrawable(gd);

    myList = new ArrayList<HashMap<String, String>>();

    JSONObject jsonObjSend = new JSONObject();
    JSONObject json = JSONfunctions
            .getJSONfromURL("myAPIURL");

    try {

        JSONArray current = json.getJSONArray("d");

        for (int i = 0; i < current.length(); i++) {
            HashMap<String, String> map = new HashMap<String, String>();
            JSONObject e = current.getJSONObject(i);

            map.put("id", String.valueOf(i));
            map.put("showid", "" + Html.fromHtml(e.getString("ShowID")));
            map.put("name", "" + Html.fromHtml(e.getString("Title")));
            map.put("showvenue", "" + e.getString("ShowVenue"));
            map.put("subtitle", "" + Html.fromHtml(e.getString("SubTitle")));
            map.put("venueid", "" + e.getString("VenueID"));

            String showDate = e.getString("ShowDate");
            long epoch = Long.parseLong(showDate);
            Date showDatePresent = new Date(epoch * 1000);
            SimpleDateFormat sdf = new SimpleDateFormat("E, MMMM d");
            String dateOfShow = sdf.format(showDatePresent);
            map.put("showdate", "" + dateOfShow);

            String showStart = e.getString("ShowStart");
            long epoch2 = Long.parseLong(showStart);
            Date showTimePresent = new Date(epoch2 * 1000);
            SimpleDateFormat sdf2 = new SimpleDateFormat("h:mm a");
            String timeOfShow = sdf2.format(showTimePresent);
            map.put("showstart", "" + timeOfShow);

            String showEnd = e.getString("ShowEnd");
            long epoch3 = Long.parseLong(showEnd);
            Date showEndPresent = new Date(epoch3 * 1000);
            SimpleDateFormat sdf3 = new SimpleDateFormat("h:mm a");
            String endOfShow = sdf3.format(showEndPresent);
            map.put("showend", "" + endOfShow);

            String gatesOpen = e.getString("GatesOpen");
            long epoch4 = Long.parseLong(gatesOpen);
            Date gatesOpenPresent = new Date(epoch4 * 1000);
            SimpleDateFormat sdf4 = new SimpleDateFormat(
                    "'Gates open: 'h:mm a");
            String gatesAreOpen = sdf4.format(gatesOpenPresent);
            map.put("gatesopen", "" + gatesAreOpen);

            map.put("aboutartist", "" + e.getString("AboutArtist"));
            map.put("program", "" + Html.fromHtml(e.getString("Program")));
            map.put("programnotes",
                    "" + Html.fromHtml(e.getString("ProgramNotes")));
            map.put("pricing", "" + Html.fromHtml(e.getString("Pricing")));
            map.put("featuring", "" + e.getString("Featuring"));
            map.put("parkdetails", "" + e.getString("ParkDetails"));
            map.put("starred", "" + e.getString("Starred"));

            map.put("image500", "" + e.getString("Image500"));

            map.put("image250", "" + e.getString("Image250"));

            map.put("aboutartist",
                    "" + Html.fromHtml(e.getString("AboutArtist")));
            myList.add(map);
        }

    } catch (JSONException e) {
        Log.e("log_tag", "Error parsing data " + e.toString());

    }

    ListAdapter adapter = new SimpleAdapter(this, myList,
            R.layout.line_item, new String[] { "name", "showdate",
                    "showstart", "showvenue" }, new int[] { R.id.title,
                    R.id.showdate, R.id.showstart, R.id.showvenue });
    setListAdapter(adapter);

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            HashMap<String, String> hashMap = myList.get(position);
            // hashMap.put("map", hashMap);
            Intent intent = new Intent(getApplicationContext(),
                    ArtistDetails.class);
            intent.putExtra("map", hashMap);
            startActivity(intent);
        }

    });

}

public void featured(View view) {
    startActivity(new Intent(getApplicationContext(), Featured.class));
}

public void schedule(View view) {
    startActivity(new Intent(getApplicationContext(), Schedule.class));
}

public void venue(View view) {
    startActivity(new Intent(getApplicationContext(), Venues.class));
}

public void share(View view) {
    startActivity(new Intent(getApplicationContext(), Friends.class));
}

public void myravinia(View view) {
    startActivity(new Intent(getApplicationContext(), Account.class));
}

Надеюсь, мой вопрос был ясен, дайте мне знать, если вам нужно, чтобы я отобразил какие-либо другие детали.

Ответы [ 4 ]

0 голосов
/ 05 мая 2012

Спасибо всем за помощь. Из этого я смог составить решение. Здесь гораздо больше кода, чем раньше, но вот что сработало.

public class Schedule extends ListActivity {

protected EditText searchText;
protected SQLiteDatabase db;
protected Cursor cursor;
protected TextView textView;
protected ImageView imageView;
protected ArrayList<HashMap<String, String>> myList;
protected ImageLoader imageLoader;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.schedule);

    View layout = findViewById(R.id.gradiant);

    GradientDrawable gd = new GradientDrawable(
            GradientDrawable.Orientation.TOP_BOTTOM, new int[] {
                    0xFF95B9C7, 0xFF06357A });
    gd.setCornerRadius(2f);

    layout.setBackgroundDrawable(gd);

    new GetEventsTask().execute("blah");

}

public void featured(View view) {
    startActivity(new Intent(getApplicationContext(), Featured.class));
}

public void schedule(View view) {

}

public void venue(View view) {
    startActivity(new Intent(getApplicationContext(), Venues.class));
}

public void share(View view) {
    startActivity(new Intent(getApplicationContext(), Friends.class));
}

public void myravinia(View view) {
    startActivity(new Intent(getApplicationContext(), Account.class));
}

protected class GetEventsTask extends
        AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> {

    protected ArrayList<HashMap<String, String>> threadList;

    private final ProgressDialog dialog = new ProgressDialog(Schedule.this);

    protected void onPreExecute() {
        this.dialog.setMessage("Loading...");
        this.dialog.setCancelable(false);
        this.dialog.show();
    }



    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(
            String... params) {

        Log.v("Yup", "The thread is running");
        threadList = new ArrayList<HashMap<String, String>>();

        JSONObject json = JSONfunctions
                .getJSONfromURL("my.json.feed.url");

        try {


            JSONArray current = json.getJSONArray("d");

            for (int i = 0; i < current.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject e = current.getJSONObject(i);

                map.put("id", String.valueOf(i));
                map.put("showid", "" + Html.fromHtml(e.getString("ShowID")));
                map.put("name", "" + Html.fromHtml(e.getString("Title")));
                map.put("showvenue", "" + e.getString("ShowVenue"));
                map.put("subtitle",
                        "" + Html.fromHtml(e.getString("SubTitle")));
                map.put("venueid", "" + e.getString("VenueID"));

                String showDate = e.getString("ShowDate");
                long epoch = Long.parseLong(showDate);
                Date showDatePresent = new Date(epoch * 1000);
                SimpleDateFormat sdf = new SimpleDateFormat("E, MMMM d");
                String dateOfShow = sdf.format(showDatePresent);
                map.put("showdate", "" + dateOfShow);

                String showStart = e.getString("ShowStart");
                long epoch2 = Long.parseLong(showStart);
                Date showTimePresent = new Date(epoch2 * 1000);
                SimpleDateFormat sdf2 = new SimpleDateFormat("h:mm a");
                String timeOfShow = sdf2.format(showTimePresent);
                map.put("showstart", "" + timeOfShow);

                String showEnd = e.getString("ShowEnd");
                long epoch3 = Long.parseLong(showEnd);
                Date showEndPresent = new Date(epoch3 * 1000);
                SimpleDateFormat sdf3 = new SimpleDateFormat("h:mm a");
                String endOfShow = sdf3.format(showEndPresent);
                map.put("showend", "" + endOfShow);

                String gatesOpen = e.getString("GatesOpen");
                long epoch4 = Long.parseLong(gatesOpen);
                Date gatesOpenPresent = new Date(epoch4 * 1000);
                SimpleDateFormat sdf4 = new SimpleDateFormat(
                        "'Gates open: 'h:mm a");
                String gatesAreOpen = sdf4.format(gatesOpenPresent);
                map.put("gatesopen", "" + gatesAreOpen);

                map.put("aboutartist", "" + e.getString("AboutArtist"));
                map.put("program",
                        "" + Html.fromHtml(e.getString("Program")));
                map.put("programnotes",
                        "" + Html.fromHtml(e.getString("ProgramNotes")));
                map.put("pricing",
                        "" + Html.fromHtml(e.getString("Pricing")));
                map.put("featuring", "" + e.getString("Featuring"));
                map.put("parkdetails", "" + e.getString("ParkDetails"));
                map.put("starred", "" + e.getString("Starred"));

                map.put("image500", "" + e.getString("Image500"));

                map.put("image250", "" + e.getString("Image250"));

                map.put("aboutartist",
                        "" + Html.fromHtml(e.getString("AboutArtist")));
                threadList.add(map);
            }

        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());

        }

        return threadList;


    }


    protected void onPostExecute(ArrayList<HashMap<String, String>> result) {

        myList = new ArrayList<HashMap<String, String>>();
        myList = result;

        LazyAdapter adapter = new LazyAdapter(Schedule.this, myList);
        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);
        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                HashMap<String, String> hashMap = myList.get(position);
                // hashMap.put("map", hashMap);
                Intent intent = new Intent(getApplicationContext(),
                        ArtistDetails.class);
                intent.putExtra("map", hashMap);

                startActivity(intent);

            }

        });

        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
        }
    }

}
 }
0 голосов
/ 12 марта 2012

вы можете сделать это так:

final Handler handler = new Handler();

dialog = ProgressDialog.show(Events.this, "Wait", "Please wait...", false);

new Thread()
{
    public void run()
    {
        // Do a lot of funny things with json here in background
        handler.post(new Runnable()
        {
            public void run()
            {
                if(dialog != null)
                    dialog.dismiss();
            }
        }
    }
}
0 голосов
/ 29 апреля 2012

Привет, попробуйте этот метод, используя asyntask

protected class ParsingTask extends AsyncTask<Context, String, ArrayList<Items>>   {

     private ProgressDialog loadingDialog = new ProgressDialog(JsonParserActivity.this);



     protected void onPreExecute() {
         loadingDialog.setMessage("loading app store..");
         loadingDialog.show();
     }
        //items is a list of model class item 
    @Override
    protected ArrayList<Items> doInBackground( Context... params )  {

        String source = getJsonString(url);


        try {
            // do ur parsing here with the above source.
           }

         catch (Throwable e) {
            e.printStackTrace();
        }
        return result;
     }      
 catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        if (source != null) {
      }
        if (!this.isCancelled()) {
        }

        return result;
    }

    @Override
    protected void onProgressUpdate(String... s)   {
        super.onProgressUpdate(s);
        Toast.makeText(getApplicationContext(), s[0], Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPostExecute( ArrayList<Items> response )  {
            // st ur list view here
                mListView.setAdapter(new JsonListAdapter(JsonParserActivity.this));
            loadingDialog.dismiss();

    }

    @Override
    protected void onCancelled() {
        super.onCancelled();

        Toast.makeText(getApplicationContext(), "The operation was cancelled", 1).show();
    }


private String getJsonString(String url) {
        DefaultHttpClient client = new DefaultHttpClient(); 
        HttpGet getRequest;
        try {
            getRequest = new HttpGet(url);
            HttpResponse getResponse = client.execute(getRequest);
            HttpEntity getResponseEntity = getResponse.getEntity();
            return EntityUtils.toString(getResponseEntity);
        } catch (Exception e) {
            Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
            return null;
        }
    }

}

0 голосов
/ 12 марта 2012

Лучший способ сделать то, что вы пытаетесь выполнить, - убедиться, что задача является асинхронной.Поэтому, когда вы получаете фид JSON, это должна быть асинхронная задача, потому что вы хотите, чтобы одновременно выполнялась другая задача, которая была бы вашим диалоговым окном прогресса.Если вы не сделаете его асинхронным, тогда диалоговое окно выполнения может оказаться замороженным и может привести к аварийному завершению синхронной задачи, которая выполнялась в качестве фида JSON.Я хотел бы сделать вашу задачу JSON feed асинхронной.

...