AsyncTask_HttpURLConnection_一键退出案例
2016-07-28 20:37
537 查看
1.主函数 MainActivity.lass
2.activity_main.xml
3.GridViewActivity.class
4.activity_grid_view.xml
5.MyApplication.class
6.GridAdapter.class
7.grid_item.xml
8.listview_item.xml
9.MyAdapter
10.DataBean
11.Datas
12.JsonData
13.Result
14.一键退出的类 AppManager.class
15.UIHelper
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.util.Xml; import android.view.KeyEvent; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.Toast; import com.bwie.monthlianxi1.adapter.MyAdapter; import com.bwie.monthlianxi1.bean.DataBean; import com.bwie.monthlianxi1.utils.AppManager; public class MainActivity extends Activity { // private static final String TAG = MainActivity.class.getSimpleName(); private ListView listview; private List<DataBean> pulist; private List<DataBean> list; // 定义一个变量,来标识是否退出 private static boolean isExit = false; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { isExit = false; }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化视图 initView(); // 初始化数据 initData(); // 添加activity到堆栈 AppManager.getAppManager().addActivity(MainActivity.this); } /** * 网络请求数据 */ private void initData() { String path = "http://apis.juhe.cn/goodbook/catalog?key=80691dfa7e7b8865c90c8733aa9e9d90&dtype=xml"; new AsyncTask<String, Void, List<DataBean>>() { @Override protected List<DataBean> doInBackground(String... params) { list = getData(params[0]); return list; } protected void onPostExecute(List<DataBean> result) { listview.setAdapter(new MyAdapter(MainActivity.this, result)); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, GridViewActivity.class); intent.putExtra("id", list.get(position).getId()); startActivity(intent); } }); }; }.execute(path); } /** * 初始化视图 */ private void initView() { listview = (ListView) findViewById(R.id.listview); } /** * 请求数据 * * @param path * @return */ private List<DataBean> getData(String path) { try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); // 设置请求方式 connection.setRequestMethod("GET"); // 设置请求超时 connection.setConnectTimeout(5000); // 设置读取超时 connection.setReadTimeout(5000); int responseCode = connection.getResponseCode(); if (responseCode == 200) { InputStream is = connection.getInputStream(); // 解析数据的方法 pulist = getPull(is); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return pulist; } /** * 通过pull解析ml文件 * * @param is */ @SuppressWarnings("static-access") private List<DataBean> getPull(InputStream is) { List<DataBean> datalist = null; DataBean databean = null; try { // 得到一个pull的解析器对象 XmlPullParser parser = Xml.newPullParser(); parser.setInput(is, "utf-8"); // 得到事件的类型 int eventType = parser.getEventType(); while (eventType != parser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: datalist = new ArrayList<DataBean>(); break; case XmlPullParser.START_TAG: String name = parser.getName(); if ("item".equalsIgnoreCase(name)) { databean = new DataBean(); } else if ("id".equalsIgnoreCase(name)) { databean.setId(parser.nextText()); } else if ("catalog".equalsIgnoreCase(name)) { databean.setCatalog(parser.nextText()); } break; case XmlPullParser.END_TAG: String names = parser.getName(); if ("item".equalsIgnoreCase(names)) { datalist.add(databean); databean = null; } break; } // 得到下一个事件类型 eventType = parser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return datalist; } /** * 监听返回--是否退出程序 */ public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); return true; } return super.onKeyDown(keyCode, event); } /** * 退出的方法 */ private void exit() { if (!isExit) { isExit = true; Toast.makeText(MainActivity.this, "再按一次back按键退出程序", 0).show(); // 利用handler延迟发送更改状态信息 mHandler.sendEmptyMessageDelayed(0, 1000); } else { MainActivity.this.finish(); } } @Override protected void onDestroy() { super.onDestroy(); // 结束Activity&从堆栈中移除 AppManager.getAppManager().finishActivity(this); } }
2.activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listview" ></ListView> </LinearLayout>
3.GridViewActivity.class
import java.io.IOException; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.util.Log; import com.bwie.monthlianxi1.adapter.GridAdapter; import com.bwie.monthlianxi1.bean.Datas; import com.bwie.monthlianxi1.bean.JsonData; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshGridView; /** * 展示详情的类 * * @author Administrator * @date 2016-7-27 */ public class GridViewActivity extends Activity { private PullToRefreshGridView grid_view; private String path; private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { if (msg.what == 0) { @SuppressWarnings("unchecked") List<Datas> list = (List<Datas>) msg.obj; grid_view.setAdapter(new GridAdapter(GridViewActivity.this, list)); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grid_view); initView(); // 初始化数据 initData(); } /** * 初始化数据(请求json) */ private void initData() { Intent intent = getIntent(); String id = intent.getStringExtra("id"); Log.i("TAG", Integer.parseInt(id) + ""); path = "http://apis.juhe.cn/goodbook/query?key=80691dfa7e7b8865c90c8733aa9e9d90&catalog_id=" + Integer.parseInt(id) + "&pn=0&rn=20"; new Thread() { public void run() { try { // 创建HttpClient对象 HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(path); HttpResponse response = client.execute(get); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 200) { String result = EntityUtils.toString( response.getEntity(), "utf-8"); List<Datas> listdatas = parseJson(result); handler.obtainMessage(0, listdatas).sendToTarget(); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } /** * 初始化视图 */ private void initView() { grid_view = (PullToRefreshGridView) findViewById(R.id.grid_view); } /** * json解析 * * @param result */ private List<Datas> parseJson(String result) { Gson gson = new Gson(); JsonData jsondata = gson.fromJson(result, JsonData.class); List<Datas> jsonList = jsondata.getResult().getData(); return jsonList; } }
4.activity_grid_view.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <com.handmark.pulltorefresh.library.PullToRefreshGridView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/grid_view" android:numColumns="3" android:layout_marginTop="30dp" android:layout_marginLeft="30dp" /> </LinearLayout>
5.MyApplication.class
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import android.app.Application; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this).build(); ImageLoader.getInstance().init(configuration); } }
6.GridAdapter.class
import java.util.List; import com.bwie.monthlianxi1.R; import com.bwie.monthlianxi1.bean.Datas; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; public class GridAdapter extends BaseAdapter implements ListAdapter { Context context; List<Datas> list; public GridAdapter(Context context, List<Datas> list) { this.context = context; this.list = list; } @Override public int getCount() { return list != null ? list.size() : 0; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder viewholder; if (convertView == null) { view = View.inflate(context, R.layout.grid_item, null); viewholder = new ViewHolder(); viewholder.grid_image = (ImageView) view .findViewById(R.id.grid_image); viewholder.book_title = (TextView) view .findViewById(R.id.book_title); viewholder.read_num = (TextView) view.findViewById(R.id.read_num); viewholder.by_time = (TextView) view.findViewById(R.id.by_time); view.setTag(viewholder); } else { view = convertView; viewholder = (ViewHolder) view.getTag(); } DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.drawable.ic_launcher) .showImageOnLoading(R.drawable.ic_launcher).cacheInMemory(true) .cacheOnDisk(true).build(); ImageLoader.getInstance().displayImage(list.get(position).getImg(), viewholder.grid_image, options); viewholder.book_title.setText(list.get(position).getTitle()); viewholder.read_num.setText(list.get(position).getReading()); viewholder.by_time.setText(list.get(position).getBytime()); return view; } class ViewHolder { ImageView grid_image; TextView book_title; TextView read_num; TextView by_time; } }
7.grid_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/grid_image" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/book_title" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/read_num" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/by_time" /> </LinearLayout>
8.listview_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="40dp" android:id="@+id/list_text" android:text="文学类别" android:gravity="center_vertical" android:layout_marginLeft="20dp" /> </LinearLayout>
9.MyAdapter
import java.util.List; import com.bwie.monthlianxi1.R; import com.bwie.monthlianxi1.bean.DataBean; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListAdapter; import android.widget.TextView; /** * listview的适配器 * * @author Administrator * @date 2016-7-27 */ public class MyAdapter extends BaseAdapter implements ListAdapter { Context context; List<DataBean> list; public MyAdapter(Context context, List<DataBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list != null ? list.size() : 0; } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder viewholder; if (convertView == null) { view = View.inflate(context, R.layout.listview_item, null); viewholder = new ViewHolder(); viewholder.list_text = (TextView) view.findViewById(R.id.list_text); view.setTag(viewholder); } else { view = convertView; viewholder = (ViewHolder) view.getTag(); } viewholder.list_text.setText(list.get(position).getCatalog()); return view; } class ViewHolder { TextView list_text; } }
10.DataBean
import java.io.Serializable; public class DataBean implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String id; private String catalog; public DataBean() { super(); // TODO Auto-generated constructor stub } public DataBean(String id, String catalog) { super(); this.id = id; this.catalog = catalog; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCatalog() { return catalog; } public void setCatalog(String catalog) { this.catalog = catalog; } @Override public String toString() { return "DataBean [id=" + id + ", catalog=" + catalog + "]"; } }
11.Datas
import java.io.Serializable; public class Datas implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String bytime; private String title; private String reading; private String img; public Datas() { super(); // TODO Auto-generated constructor stub } public Datas(String bytime, String title, String reading, String img) { super(); this.bytime = bytime; this.title = title; this.reading = reading; this.img = img; } public String getBytime() { return bytime; } public void setBytime(String bytime) { this.bytime = bytime; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getReading() { return reading; } public void setReading(String reading) { this.reading = reading; } public String getImg() { return img; } public void setImg(String img) { this.img = img; } @Override public String toString() { return "Datas [bytime=" + bytime + ", title=" + title + ", reading=" + reading + ", img=" + img + "]"; } }
12.JsonData
import java.io.Serializable; public class JsonData implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private Result result; public JsonData() { super(); // TODO Auto-generated constructor stub } public JsonData(Result result) { super(); this.result = result; } public Result getResult() { return result; } public void setResult(Result result) { this.result = result; } @Override public String toString() { return "JsonData [result=" + result + "]"; } }
13.Result
import java.io.Serializable; import java.util.List; public class Result implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private List<Datas> data; public Result() { super(); // TODO Auto-generated constructor stub } public Result(List<Datas> data) { super(); this.data = data; } public List<Datas> getData() { return data; } public void setData(List<Datas> data) { this.data = data; } @Override public String toString() { return "Result [data=" + data + "]"; } }
14.一键退出的类 AppManager.class
import java.util.Stack; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; public class AppManager { private static Stack<Activity> activityStack; private static AppManager instance; private AppManager() { } // 单例模式 public static AppManager getAppManager() { if (instance == null) { instance = new AppManager(); } return instance; } /** * 添加Activity到堆栈 */ public void addActivity(Activity activity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(activity); } /** * 获取当前Activity(堆栈中最后一个加入的) */ public Activity currentActivity() { Activity activity = activityStack.lastElement(); return activity; } /** * 结束当前Activity(堆栈中最后一个加入的) */ public void finishActivity() { Activity activity = activityStack.lastElement(); finishActivity(activity); } /** * 结束指定的Activity * * @param activity */ public void finishActivity(Activity activity) { if (activity != null) { activityStack.remove(activity); activity.finish(); activity = null; } } /** * 结束指定类名的Activity */ public void finishActivity(Class<?> cls) { for (Activity activity : activityStack) { if (activity.getClass().equals(activity)) { finishActivity(activity); } } } /** * 结束所有的activity */ public void finishAllActivity() { for (int i = 0; i < activityStack.size(); i++) { if (activityStack.get(i) != null) { activityStack.get(i).finish(); } } activityStack.clear(); } /** * 退出应用程序 */ @SuppressWarnings("deprecation") public void AppExit(Context context) { try { finishAllActivity(); ActivityManager activityMgr = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); activityMgr.restartPackage(context.getPackageName()); System.exit(0); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
15.UIHelper
import com.bwie.monthlianxi1.R; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; public class UIHelper { /** * 退出程序 * * @param cont */ public static void Exit(final Context cont) { AlertDialog.Builder builder = new AlertDialog.Builder(cont); builder.setIcon(android.R.drawable.ic_dialog_info); builder.setTitle("确定要退出程序吗?"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); // 退出 AppManager.getAppManager().AppExit(cont); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); } }
相关文章推荐
- 关于tcp nagle算法
- 浅析 Get 和 Post 的区别
- SSRS 报表管理器 http://localhost/Reports HTTP500 内部错误处理 过程
- Unix网络编程之socket编程(一)--socket入门简单程序
- Cocos2dx 获取安卓手机网络类型及强度,电量等信息
- 【转载】http协议介绍
- 计算机网络socket编程之UDP
- HttpUtils和XlistView
- TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
- http协议(六)报文首部
- HttpURLConnection+AsyncTask+接口回调实现简易get联网请求封装框架
- Android Https请求详细demo
- 轻松把玩HttpClient之设置代理,可以访问FaceBook
- 轻松把玩HttpAsyncClient之模拟post请求示例
- 轻松把玩HttpClient之封装HttpClient工具类(七),新增验证码识别功能
- 轻松把玩HttpClient之封装HttpClient工具类(六),封装输入参数,简化工具类
- 轻松把玩HttpClient之封装HttpClient工具类(五),携带Cookie的请求
- 轻松把玩HttpClient之封装HttpClient工具类(四),单线程调用及多线程批量调用测试
- 轻松把玩HttpClient之封装HttpClient工具类(三),插件式配置Header
- 轻松把玩HttpClient之封装HttpClient工具类(二),插件式配置HttpClient对象