Back to project page infobuzer-android.
The source code is released under:
MIT License
If you think the Android project infobuzer-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package at.kulak.infobuzer; // w w w . j a va 2s . co m import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.AsyncTask; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import at.kulak.infobuzer.model.Entry; public class ListActivity extends ActionBarActivity { final String URL = "http://infobuzer.pl/voucher/json"; Entry[] data = null; boolean isLoading = false; // if data is currently loading - prevent double downloading on orientation change @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); } @Override protected void onResume() { super.onResume(); if(data == null && !isLoading) // prevent reloading on orientation change. getDataFromServer(); else loadDataIntoView(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelableArray("data", data); outState.putBoolean("isLoading", isLoading); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); data = (Entry[])savedInstanceState.getParcelableArray("data"); isLoading = savedInstanceState.getBoolean("isLoading"); } private void getDataFromServer() { // download begining DataTask task = new DataTask() { private ProgressDialog progress = null; @Override protected void onPreExecute() { super.onPreExecute(); progress = new ProgressDialog(ListActivity.this); progress.setTitle(getString(R.string.progress_title)); progress.setMessage(getString(R.string.progress_message)); progress.setCancelable(false); progress.show(); } @Override protected void onPostExecute(Void stream) { super.onPostExecute(stream); // onPostExecute is on UI Thread progress.dismiss(); isLoading = false; ListActivity.this.loadDataIntoView(); } }; isLoading = true; task.execute(); } private void showExitAlert() { AlertDialog.Builder builder = new AlertDialog.Builder(this); final String message = getString(R.string.close_dialog_message); final String button_str = getString(R.string.close_dialog_button); builder.setMessage(message).setCancelable(false).setPositiveButton(button_str, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ListActivity.this.finish(); } }).show(); } private void loadDataIntoView() { if(isLoading && this.data == null) return; if(this.data == null || this.data.length <= 0) { this.showExitAlert(); return; } final ListView list = (ListView)findViewById(R.id.list); ListAdapter adapter = new EntriesAdapter(this, R.layout.list_element, this.data); list.setAdapter(adapter); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { Entry entry = (Entry)list.getAdapter().getItem(position); Intent intent = new Intent(ListActivity.this, DetailsActivity.class); intent.putExtra("entry", entry); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.list, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_refresh) { getDataFromServer(); return true; } return super.onOptionsItemSelected(item); } private class DataTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { try { // get data from the server HttpClient client = new DefaultHttpClient(); HttpGet req = new HttpGet(); req.setURI(new URI(ListActivity.this.URL)); InputStream stream = client.execute(req).getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); Gson gson = new Gson(); Entry[] entries = gson.fromJson(reader, Entry[].class); ListActivity.this.data = entries; return null; } catch(Exception e) { return null; } } } private class EntriesAdapter extends ArrayAdapter<Entry> { private int resource; public EntriesAdapter(Context context, int resource, Entry[] entries) { super(context, resource, entries); this.resource = resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { Entry entry = getItem(position); View view = null; if(convertView==null) { // creating new view LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(this.resource, null); } else { view = convertView; } // setting data TextView tv_title = (TextView)view.findViewById(R.id.title); TextView tv_categories = (TextView)view.findViewById(R.id.categories); TextView tv_date = (TextView)view.findViewById(R.id.date); String shortTitle = entry.getShortTitle(); tv_title.setText(shortTitle.substring(0, Math.min(shortTitle.length(), 30))); // first 30 chars. tv_categories.setText(entry.getCategoriesString(2)); try { Date date = entry.getStartDate(); DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); tv_date.setText(df.format(date)); } catch(Exception e) { tv_date.setText(""); // unable to get valid date. } return view; } } }