package cn.yo2.aquarium.example.httpclientasynctask;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.ViewFlipper;
import java.util.ArrayList;
public class HttpClientAsyncTaskActivity extends Activity implements OnClickListener {
private ViewFlipper mViewFlipper;
private ListView mListView;
private ToggleButton mToggleLoad;
private TextView mInfo;
private TextView mListEmpty;
// private GetTypesTask mGetTypesTask;
private GetStationsTask mGetStationsTask;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mViewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);
mListView = (ListView) findViewById(R.id.list_view);
mToggleLoad = (ToggleButton) findViewById(R.id.toggle_load);
mInfo = (TextView) findViewById(R.id.info);
mListEmpty = (TextView) findViewById(R.id.list_empty);
mListView.setEmptyView(mListEmpty);
mToggleLoad.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v == mToggleLoad) {
if (mToggleLoad.isChecked()) {
startLoad();
} else {
cancelLoad();
}
}
}
private void startLoad() {
// mGetTypesTask = new GetTypesTask();
// mGetTypesTask.execute((Void)null);
mGetStationsTask = new GetStationsTask();
mGetStationsTask.execute((Void) null);
}
private void cancelLoad() {
if (mGetStationsTask != null && mGetStationsTask.getStatus() != AsyncTask.Status.FINISHED) {
mGetStationsTask.cancelTask();
}
}
private static final class StationsAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private ArrayList<Station> mStations;
public StationsAdapter(Context context) {
super();
mInflater = LayoutInflater.from(context);
mStations = new ArrayList<Station>(0);
}
public StationsAdapter(Context context, ArrayList<Station> stations) {
super();
mInflater = LayoutInflater.from(context);
mStations = stations;
}
public void setStations(ArrayList<Station> stations) {
mStations = stations;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mStations.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mStations.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return mStations.get(position).id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v;
if (convertView == null) {
v = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
} else {
v = convertView;
}
TextView tv = (TextView) v.findViewById(android.R.id.text1);
tv.setText(mStations.get(position).name);
return v;
}
}
private final class GetStationsTask extends AsyncTask<Void, Void, ArrayList<Station>> {
private static final int CHILD_LIST_VIEW = 0;
private static final int CHILD_PROGRESS_VIEW = 1;
private WebServiceDAL mDal;
public GetStationsTask() {
super();
mDal = new WebServiceDAL();
}
public void cancelTask() {
Status status = getStatus();
MyLog.d("status = " + status);
if (status == Status.RUNNING) {
mDal.abortRequest();
}
cancel(true);
}
@Override
protected void onPreExecute() {
MyLog.i("onPreExecute");
mViewFlipper.setDisplayedChild(CHILD_PROGRESS_VIEW);
mInfo.setText("loading...");
}
@Override
protected ArrayList<Station> doInBackground(Void... params) {
MyLog.i("doInBackground E");
ArrayList<Station> stations = mDal.getStationsByTypeId(54);
MyLog.i("doInBackground X");
return stations;
}
@Override
protected void onPostExecute(ArrayList<Station> stations) {
if (stations == null) {
MyLog.i("onPostExecute error");
mInfo.setText("onPostExecute error");
stations = new ArrayList<Station>(0);
} else {
MyLog.i("onPostExecute success");
mInfo.setText("onPostExecute success");
}
ListAdapter adapter = mListView.getAdapter();
if (adapter == null) {
adapter = new StationsAdapter(HttpClientAsyncTaskActivity.this, stations);
mListView.setAdapter(adapter);
} else {
StationsAdapter stationsAdapter = (StationsAdapter) adapter;
stationsAdapter.setStations(stations);
stationsAdapter.notifyDataSetChanged();
}
mViewFlipper.setDisplayedChild(CHILD_LIST_VIEW);
}
@Override
protected void onCancelled() {
MyLog.i("onCancelled");
mInfo.setText("onCancelled");
ArrayList<Station> stations = new ArrayList<Station>(0);
ListAdapter adapter = mListView.getAdapter();
if (adapter == null) {
adapter = new StationsAdapter(HttpClientAsyncTaskActivity.this, stations);
mListView.setAdapter(adapter);
} else {
StationsAdapter stationsAdapter = (StationsAdapter) adapter;
stationsAdapter.setStations(stations);
stationsAdapter.notifyDataSetChanged();
}
mViewFlipper.setDisplayedChild(CHILD_LIST_VIEW);
}
}
}