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>