Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package br.com.comidadibuteco.activities;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.http.Header;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import com.loopj.android.http.JsonHttpResponseHandler;
- import com.loopj.android.http.RequestParams;
- import de.greenrobot.dao.query.Query;
- import br.com.comidadibuteco.R;
- import br.com.comidadibuteco.sqlite.City;
- import br.com.comidadibuteco.sqlite.CityDao;
- import br.com.comidadibuteco.sqlite.DaoMaster;
- import br.com.comidadibuteco.sqlite.DaoSession;
- import br.com.comidadibuteco.sqlite.DaoMaster.DevOpenHelper;
- import br.com.comidadibuteco.util.ApplicationVariables;
- import br.com.comidadibuteco.util.SingletonEnvironment;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.net.ConnectivityManager;
- import android.net.NetworkInfo;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.view.Gravity;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.AbsListView.OnScrollListener;
- import android.widget.BaseAdapter;
- import android.widget.LinearLayout;
- import android.widget.ListView;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- public class CitiesActivity extends Activity {
- // Adaptador
- private CityBaseAdapter mAdapter;
- // Lista de cidades
- private ArrayList<City> mCities;
- // Lista
- private ListView mListView;
- //Layout carregando
- private LinearLayout mLoadingLayout;
- // Singleton
- private SingletonEnvironment mSingleton;
- // Elementos SQLite
- private DevOpenHelper mHelper;
- private SQLiteDatabase mDatabase;
- private DaoMaster mDaoMaster;
- private DaoSession mDaoSession;
- private CityDao mCityDao;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.cities);
- initDB();
- initWidgets();
- }
- // Inicializa os elementos da base de dados
- private void initDB() {
- mHelper = new DaoMaster.DevOpenHelper(this, "boteco.db", null);
- mDatabase = mHelper.getWritableDatabase();
- mDaoMaster = new DaoMaster(mDatabase);
- mDaoSession = mDaoMaster.newSession();
- mCityDao = mDaoSession.getCityDao();
- }
- private void initWidgets() {
- mSingleton = SingletonEnvironment.getInstance();
- mCities = new ArrayList<City>();
- mAdapter = new CityBaseAdapter();
- //verifica se há conectividade com a rede ou não
- ConnectivityManager cn = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo nf = cn.getActiveNetworkInfo();
- if(nf != null && nf.isConnected()==true )
- {
- // Tenta executar a busca por novos elementos online
- RequestParams mParams = new RequestParams();
- mParams.add("token", ApplicationVariables.TOKEN_SERVER);
- mSingleton.getAsyncHttpClient().post(
- ApplicationVariables.SERVER_DOMAIN
- + ApplicationVariables.CITIES_SEARCH, mParams,
- new JsonHttpResponseHandler() {
- @Override
- public void onStart() {
- super.onStart();
- }
- @Override
- public void onFailure(int statusCode, Header[] headers,
- Throwable throwable, JSONObject errorResponse) {
- super.onFailure(statusCode, headers, throwable,
- errorResponse);
- }
- @Override
- public void onSuccess(int statusCode, Header[] headers,
- JSONObject response) {
- super.onSuccess(statusCode, headers, response);
- new AsynCityDB(response).execute();
- }
- });
- }
- else
- {
- //se não houver, carrega diretamente os dados do BD
- new AsynCityDB(null).execute();
- }
- // Inicializa a ListView
- SetLoadingLayout();
- mListView = (ListView) findViewById(R.id.citiesListView);
- mListView.addFooterView(mLoadingLayout);
- mListView.setAdapter(mAdapter);
- mListView.setOnScrollListener(new OnScrollListener() {
- private int lastItem = 0;
- AsynCityDB task;
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- if (firstVisibleItem + visibleItemCount == totalItemCount
- && totalItemCount > lastItem) {
- lastItem = totalItemCount;
- if (task != null
- && task.getStatus() == AsyncTask.Status.RUNNING) {
- return;
- }
- task = new AsynCityDB(null);
- task.execute();
- }
- }
- });
- }
- void LoadItems() {
- //insere as proximas 3 cidades do banco de dados
- Query<City> mQuery = mCityDao.queryBuilder().limit(3).offset(mCities.size()).build();
- List<City> mTempCities = mQuery.list();
- //se houverem proximos itens, os insere na lista
- if(mTempCities.size() > 0){
- for (City c : mTempCities) {
- mCities.add(c);
- }
- }
- //se nao, remove o footer de carregando
- else{
- //TODO remover footer
- }
- }
- void SetLoadingLayout() {
- LinearLayout layout = new LinearLayout(this);
- ProgressBar progressBar = new ProgressBar(this);
- progressBar.setPadding(0, 0, 10, 0);
- layout.addView(progressBar, new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.WRAP_CONTENT));
- TextView textView = new TextView(this);
- textView.setText("Carregando...");
- textView.setGravity(Gravity.CENTER_VERTICAL);
- layout.addView(textView, new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.FILL_PARENT,
- LinearLayout.LayoutParams.FILL_PARENT));
- mLoadingLayout = new LinearLayout(this);
- mLoadingLayout.addView(layout, new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.WRAP_CONTENT));
- mLoadingLayout.setGravity(Gravity.CENTER);
- }
- private class AsynCityDB extends AsyncTask<Void, Void, Void> {
- private JSONObject response;
- public AsynCityDB(JSONObject response) {
- this.response = response;
- }
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- }
- @Override
- protected Void doInBackground(Void... params) {
- //se houver response, insere ou atualiza cidades do banco
- if (response != null) {
- try {
- JSONArray array = response.getJSONArray("cidades");
- for (int i = 0; i < array.length(); i++) {
- JSONObject object = array.getJSONObject(i);
- City mNextCity = new City(object.getString("id"),
- object.getString("uf"),
- object.getString("nome"));
- // Trabalha sobre o banco de dados
- mCityDao.insertOrReplace(mNextCity);
- }
- } catch (JSONException e) {
- }
- }
- //carrega os dados na listview
- LoadItems();
- return null;
- }
- @Override
- protected void onPostExecute(Void result) {
- super.onPostExecute(result);
- mAdapter.notifyDataSetChanged();
- }
- }
- public class CityBaseAdapter extends BaseAdapter {
- private LayoutInflater mLayoutInflater;
- public CityBaseAdapter() {
- this.mLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
- @SuppressLint("InflateParams") @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder mHolder;
- if (convertView == null) {
- convertView = mLayoutInflater.inflate(R.layout.city_item, null);
- mHolder = new ViewHolder();
- mHolder.mCityName = (TextView) convertView
- .findViewById(R.id.labelCityName);
- convertView.setTag(mHolder);
- } else {
- mHolder = (ViewHolder) convertView.getTag();
- }
- City nextCity = mCities.get(position);
- if (nextCity != null) {
- mHolder.mCityName.setText(nextCity.getNome());
- }
- return convertView;
- }
- // Define a estrutura da cidade
- class ViewHolder {
- TextView mCityName;
- }
- @Override
- public int getCount() {
- return mCities == null ? 0 : mCities.size();
- }
- @Override
- public Object getItem(int position) {
- return mCities == null ? null : mCities.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement