AsyncTask_HttpURLConnection_一键退出案例

来源:互联网 发布:免费淘宝号和密码大全 编辑:程序博客网 时间:2024/06/13 08:20


1.主函数 MainActivity.lass

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;};};@Overrideprotected 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>>() {@Overrideprotected 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() {@Overridepublic 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();}}@Overrideprotected 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));}};};@Overrideprotected 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 {@Overridepublic 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;}@Overridepublic int getCount() {return list != null ? list.size() : 0;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic 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;}@Overridepublic int getCount() {return list != null ? list.size() : 0;}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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 blocke.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();}}


0 0
原创粉丝点击