Xutils3.0请求数据, 省流量模式实现,下载安装,sdcard存储(所有类)
来源:互联网 发布:遗传算法应用数据分析 编辑:程序博客网 时间:2024/05/21 06:36
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>
阅读全文
0 0
- Xutils3.0请求数据, 省流量模式实现,下载安装,sdcard存储(所有类)
- //请求数据, 省流量模式实现,下载安装,sdcard存储
- Xutils3.0请求网络数据工具类
- 下载图片省流量模式
- SDCard的数据存储
- 数据存储----------------SDcard
- 使用Xutils3.0 进行上传和下载数据
- Android开发 使用Xutils3请求、解析数据
- 【Android】数据存储之SDcard
- Android存储数据到sdcard
- Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类
- 自定义抽象类CustomSQLiteOpenHelper,实现SQLiteDB自由存储(eg. SDCARD)
- Xutils3框架网络请求封装(单例模式)
- 为用户节省流量,app第一次安装或升级启动时,本地进行一些必要基础数据的存储,避免多余的下载
- Xutils3.0下载带通知栏通知
- xutils3.0下载器的使用
- Android数据存储——SDcard
- 用SharedPreferences数据存储到SDcard
- 1201:被3,5整除的数
- WIN phpstorm 2017.2.1下载、激活及 SVN配置
- [PAT]1004. Counting Leaves (30)@Java
- localStorage的使用
- maven项目中各文件都没有报错,但是项目名称有红叉
- Xutils3.0请求数据, 省流量模式实现,下载安装,sdcard存储(所有类)
- 多条目加载
- 视频编码之I帧 、P帧、B帧
- Android圆形头像实现
- 文件打包发布
- 最新的android studio NDK食用方式
- Piwik插件基础-pages
- 如何排除闭环中重复的环路
- nodejs app.js详解