public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {
private XListView xLv;
private MyBaseAdapter adapter;
//页码
private int pageIndex = 1;
//默认值是false
private boolean flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
xLv = (XListView) findViewById(R.id.xLv);
//设置是否允许上下拉加载更多数据
xLv.setPullLoadEnable(true);
xLv.setXListViewListener(this);
if (isOnline()) {
getData();
}else{
//没有网,提示用户
showDialog();
}
}
/**
* 提示用户的一个联网对话框
*/
private void showDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("要么去死,要么开网!");
builder.setNegativeButton("你敢不开网",null);
builder.setPositiveButton("开网才好孩子", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//设置跳转网络界面
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
});
builder.create().show();
}
/**
* 判断网络是否连接
* @return true 网络已经连接 false 网络没有连接
*/
public boolean isOnline() {
//得到网络连接的管理者
ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//通过网络管理者得到网络信息
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
//判断网络是否连接
return (networkInfo != null && networkInfo.isConnected());
}
/**
* 加载数据
*/
private void getData(){
try {
getNetWorkData("http://apis.juhe.cn/cook/query.php?menu="+ URLEncoder.encode("西红柿","utf-8")
+"&key=e3c3dd5597dd875ff29c665a25b74025&pn="+pageIndex+"&rn=10");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取网络数据
* 方式:get
*
* @param url 请求接口地址
*/
private void getNetWorkData(String url){
new AsyncTask<String,Void,String>(){
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s == null){
return;
}
//1.解析JSON
Gson gson = new Gson();
MenuInfo menuInfo = gson.fromJson(s,MenuInfo.class);
List<MenuInfo.ResultBean.DataBean> dataBeanList = menuInfo.getResult().getData();
//2.绑定适配器
if(adapter == null) {
adapter = new MyBaseAdapter(MainActivity.this, dataBeanList);
//3.将数据映射到ListView
xLv.setAdapter(adapter);
}else{
//将获取到的新数据添加到原来与adapter绑定集合里面
adapter.loadMore(dataBeanList,flag);
}
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if(code == 200){
InputStream is = connection.getInputStream();
return StreamTools.readFromNetWork(is);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(url);
}
/**
* 下拉的时候会被执行
*/
@Override
public void onRefresh() {
Log.d("MainActivity", "下拉刷新");
//pageIndex = 1 -> 2
flag = false;
++pageIndex;
getData();
xLv.stopRefresh(true);
}
/**
* 上拉的时候会被加载
*/
@Override
public void onLoadMore() {
Log.d("MainActivity", "上拉加载更多");
flag = true;
++pageIndex;
getData();
//停止加载更多
xLv.stopLoadMore();
for (MenuInfo.ResultBean.DataBean dataBean : datas) {
//flag true 数据要添加到最前面 false要添加到最后面
if(flag){
dataBeanList.add(dataBean);
}else {
//首先我把数据都添加到最前面
dataBeanList.add(0, dataBean);
}
}
//刷新界面
notifyDataSetChanged();
}
@Override
public int getCount() {
return dataBeanList != null ? dataBeanList.size() : 0;
}
@Override
public Object getItem(int position) {
return dataBeanList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = convertView.inflate(context,R.layout.item,null);
}
ImageView ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
TextView tvContent = (TextView) convertView.findViewById(R.id.tvContent);
//设置图片以及文字信息
tvContent.setText(dataBeanList.get(position).getTitle());
ImageLoader.getInstance().displayImage(dataBeanList.get(position).getAlbums().get(0),
ivIcon,MyApplication.getDisplayImageOptions());
return convertView;
}
}
}
private XListView xLv;
private MyBaseAdapter adapter;
//页码
private int pageIndex = 1;
//默认值是false
private boolean flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
xLv = (XListView) findViewById(R.id.xLv);
//设置是否允许上下拉加载更多数据
xLv.setPullLoadEnable(true);
xLv.setXListViewListener(this);
if (isOnline()) {
getData();
}else{
//没有网,提示用户
showDialog();
}
}
/**
* 提示用户的一个联网对话框
*/
private void showDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("要么去死,要么开网!");
builder.setNegativeButton("你敢不开网",null);
builder.setPositiveButton("开网才好孩子", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//设置跳转网络界面
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
});
builder.create().show();
}
/**
* 判断网络是否连接
* @return true 网络已经连接 false 网络没有连接
*/
public boolean isOnline() {
//得到网络连接的管理者
ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//通过网络管理者得到网络信息
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
//判断网络是否连接
return (networkInfo != null && networkInfo.isConnected());
}
/**
* 加载数据
*/
private void getData(){
try {
getNetWorkData("http://apis.juhe.cn/cook/query.php?menu="+ URLEncoder.encode("西红柿","utf-8")
+"&key=e3c3dd5597dd875ff29c665a25b74025&pn="+pageIndex+"&rn=10");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取网络数据
* 方式:get
*
* @param url 请求接口地址
*/
private void getNetWorkData(String url){
new AsyncTask<String,Void,String>(){
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s == null){
return;
}
//1.解析JSON
Gson gson = new Gson();
MenuInfo menuInfo = gson.fromJson(s,MenuInfo.class);
List<MenuInfo.ResultBean.DataBean> dataBeanList = menuInfo.getResult().getData();
//2.绑定适配器
if(adapter == null) {
adapter = new MyBaseAdapter(MainActivity.this, dataBeanList);
//3.将数据映射到ListView
xLv.setAdapter(adapter);
}else{
//将获取到的新数据添加到原来与adapter绑定集合里面
adapter.loadMore(dataBeanList,flag);
}
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if(code == 200){
InputStream is = connection.getInputStream();
return StreamTools.readFromNetWork(is);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(url);
}
/**
* 下拉的时候会被执行
*/
@Override
public void onRefresh() {
Log.d("MainActivity", "下拉刷新");
//pageIndex = 1 -> 2
flag = false;
++pageIndex;
getData();
xLv.stopRefresh(true);
}
/**
* 上拉的时候会被加载
*/
@Override
public void onLoadMore() {
Log.d("MainActivity", "上拉加载更多");
flag = true;
++pageIndex;
getData();
//停止加载更多
xLv.stopLoadMore();
}
public void loadMore(List<MenuInfo.ResultBean.DataBean> datas,boolean flag){
for (MenuInfo.ResultBean.DataBean dataBean : datas) {
//flag true 数据要添加到最前面 false要添加到最后面
if(flag){
dataBeanList.add(dataBean);
}else {
//首先我把数据都添加到最前面
dataBeanList.add(0, dataBean);
}
}
//刷新界面
notifyDataSetChanged();
}
@Override
public int getCount() {
return dataBeanList != null ? dataBeanList.size() : 0;
}
@Override
public Object getItem(int position) {
return dataBeanList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = convertView.inflate(context,R.layout.item,null);
}
ImageView ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
TextView tvContent = (TextView) convertView.findViewById(R.id.tvContent);
//设置图片以及文字信息
tvContent.setText(dataBeanList.get(position).getTitle());
ImageLoader.getInstance().displayImage(dataBeanList.get(position).getAlbums().get(0),
ivIcon,MyApplication.getDisplayImageOptions());
return convertView;
}
}
}