1.使用Xutils3.0请求数据(10分)
2.使用Gson解析数据并封装成集合(10分)
2.使用XListView实现列表展示数据和刷新(15分)
3.点击条目弹出AlertDialog(如图2中的选择网络)(15分)
4.选择wifi就直接弹出AlertDialog(如图2中的版本更新)(10分)
5.选择手机流量提醒用户跳转到设置wifi页面(10分)
6.点击版本更新中的确定后使用Xutils3.0根据数据中的url下载apk进行安装(图3)(15分)
7.将下载的apk存储到sdcard中(10分)
/**********************************************************/mainActivity
package com.example.yuekaod; import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Environment; import android.provider.Settings; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.google.gson.Gson; import com.limxing.xlistview.view.XListView; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import org.xutils.common.Callback; import org.xutils.http.RequestParams; import org.xutils.x; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.List; public class MainActivity extends AppCompatActivity { private XListView xlistview; private ImageLoader imageLoader; private int selectedFruitIndex = 0; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); xlistview = (XListView) findViewById(R.id.xlistview); try { getDates("http://apis.juhe.cn/oil/region?key=9783f456431f034955961598202d8029&format=2&city=" + URLEncoder.encode("北京市 崇文区", "utf-8")); } catch (Exception e) { e.printStackTrace(); } } public void getDates(String path) { new AsyncTask<String, Void, String>() { @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (s != null) { Gson gson = new Gson(); MenuInfo menuInfo = gson.fromJson(s, MenuInfo.class); List<MenuInfo.ResultBean.DataBean> data = menuInfo.getResult().getData(); xlistview.setAdapter(new MyAdapter(data)); xlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { private String[] arrayFruit; @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { arrayFruit = new String[]{"wifi", "手机流量"}; Dialog alertDialog = new AlertDialog.Builder(MainActivity.this). setTitle("网络选择"). setIcon(R.mipmap.ic_launcher) .setSingleChoiceItems(arrayFruit, 2, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { selectedFruitIndex = which; } }). setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, arrayFruit[selectedFruitIndex], Toast.LENGTH_SHORT).show(); AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("版本更新\n现在检测到新版本,是否更新?"); builder.setNegativeButton("取消", null); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 两种跳转都可以跳转到到设置网络 downLoad(); } }); builder.create().show(); if (arrayFruit[selectedFruitIndex] == "wifi") { } else { AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this); builder1.setMessage("手机网络要耗费,是否跳转到wifi界面"); builder1.setNegativeButton("取消", null); builder1.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_WIFI_SETTINGS); startActivity(intent); } }); builder1.create().show(); } } }). setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }). create(); alertDialog.show(); } }); } } @Override protected String doInBackground(String... strings) { try { String path = strings[0]; URL url = new URL(path); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setConnectTimeout(2000); urlConnection.setReadTimeout(2000); int code = urlConnection.getResponseCode(); if (code == 200) { InputStream is = urlConnection.getInputStream(); String json = StreamTook.read(is); return json; } } catch (Exception e) { e.printStackTrace(); } return null; } }.execute(path); } class MyAdapter extends BaseAdapter { List<MenuInfo.ResultBean.DataBean> data; private final DisplayImageOptions options; public MyAdapter(List<MenuInfo.ResultBean.DataBean> data) { this.data = data; imageLoader = ImageLoader.getInstance(); File file = new File(Environment.getExternalStorageDirectory(), "Bwei"); if (!file.exists()) file.mkdirs(); ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(MainActivity.this) .diskCache(new UnlimitedDiskCache(file)) .build(); imageLoader.init(configuration); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) .cacheOnDisk(true) .build(); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.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(MainActivity.this, R.layout.item, null); TextView textitem = (TextView) convertView.findViewById(R.id.textitem); ImageView imageitem = (ImageView) convertView.findViewById(R.id.imageitem); textitem.setText(data.get(position).getDiscount()); } return convertView; } } private void downLoad() { String url = "http://gdown.baidu.com/data/wisegame/f98d235e39e29031/baiduxinwen.apk"; String path = Environment.getExternalStorageDirectory() + "/apk/myapk.apk"; final File file = new File(path); RequestParams requestParams = new RequestParams(url); requestParams.setAutoResume(true); requestParams.setAutoRename(false); requestParams.setSaveFilePath(path); x.http().get(requestParams, new Callback.ProgressCallback<File>() { @Override public void onSuccess(File result) { Toast.makeText(MainActivity.this, "正在安装中......", Toast.LENGTH_SHORT).show(); installAPK(result); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { progressDialog.dismiss(); } @Override public void onWaiting() { } @Override public void onStarted() { showProgressDialog(); } @Override public void onLoading(long total, long current, boolean isDownloading) { float progress = (float) current / (float) total * 100; if (progress >= 0 && progress <= 100) { progressDialog.setProgress((int) progress); } } }); } private void showProgressDialog() { progressDialog = new ProgressDialog(this); progressDialog.setMessage("正在下载......"); progressDialog.setProgress(0); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.show(); } private void installAPK(File savedFile) { //调用系统的安装方法 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.fromFile(savedFile), "application/vnd.android.package-archive"); startActivity(intent); } public void getimage(String path, ImageView imageView) { DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheOnDisk(true) .cacheInMemory(true) .build(); ImageLoader.getInstance().displayImage(path, imageView, options); } }
/*******************************************************/App
package com.example.yuekaod; import android.app.Application; import org.xutils.x; /** * Created by dell on 2017/8/23. */ public class App extends Application { @Override public void onCreate() { super.onCreate(); x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG); } }/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/MenuInfo
自定义
/*****************************************************************************/StreamTook
package com.example.yuekaod; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** * Created by dell on 2017/8/23. */ public class StreamTook { public static String read(InputStream is) throws Exception { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes)) != -1) { byteArrayOutputStream.write(bytes, 0, len); } byteArrayOutputStream.close(); return byteArrayOutputStream.toString(); } }/*********************************************************/配置<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yuekaod"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>/*******************************************/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" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/textitem" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:layout_marginLeft="260dp" android:id="@+id/imageitem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/a" /> </LinearLayout> </LinearLayout>/***************************************************/activity_main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.yuekaod.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.limxing.xlistview.view.XListView android:id="@+id/xlistview" android:layout_width="match_parent" android:layout_height="match_parent"></com.limxing.xlistview.view.XListView> </LinearLayout> </LinearLayout>
本文介绍如何使用Xutils3.0发起网络请求,并利用Gson解析返回的数据,结合XListView实现列表展示及刷新功能。此外,还介绍了如何通过AlertDialog处理不同的网络连接类型,以及使用Xutils3.0进行APK文件的下载和安装。

被折叠的 条评论
为什么被折叠?



