Xutils3.0请求数据, 省流量模式实现,下载安装,sdcard存储(所有类)

本文介绍如何使用Xutils3.0发起网络请求,并利用Gson解析返回的数据,结合XListView实现列表展示及刷新功能。此外,还介绍了如何通过AlertDialog处理不同的网络连接类型,以及使用Xutils3.0进行APK文件的下载和安装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值