您的位置:首页 > 理论基础 > 计算机网络

AsyncTask_HttpURLConnection_一键退出案例

2016-07-28 20:37 537 查看
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;
};
};

@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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: