Android基础——xutils

本文深入探讨了Android开发中常用的xutils框架,详细介绍了如何利用xutils进行断点续传操作,并提供了关键JAVA代码示例。

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

//断点续传的JAVA代码

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ProgressBar;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;

import java.io.File;

import bw.com.bw_day01_xutils.R;

@ContentView(value = R.layout.activity_down_load_apk)
public class DownLoadApkActivity extends AppCompatActivity {

    //初始化控件
    @ViewInject(value = R.id.pb_id)
    private ProgressBar mProgressBar;

    //下载的地址:
    private String apkUrl = "http://218.244.149.129:9010/download.php?apkid=12";

    //sd卡中存储的名称
    private String apkName = "hello.apk";

    //TODO 2, 断点续传中, 设置可以取消的任务
    private Callback.Cancelable cancelable;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //引入注解
        x.view().inject(this);
    }

    //点击按钮, 下载apk, 存入sd中 -- 路径, 最后实现自动安装的功能
    @Event(value = {R.id.down_load_id,R.id.stop_load_id})
    private void onClick(View view)
    {

        switch (view.getId())
        {
            case R.id.down_load_id: // 点击下载

                //请求参数
                RequestParams params = new RequestParams(apkUrl);

                //TODO    1 ,  设置支持断点续传
                params.setAutoResume(true);//设置支持断点续传

                //存入sd中 -- 指定路径  getExternalCacheDir() 混存目录
                String filePath = getExternalCacheDir() + File.separator + apkName;
                //指定路径, 到网络请求参数中
                params.setSaveFilePath(filePath);

                //TODO  3, 断点续传中, 获取可以取消的任务
                cancelable = x.http().get(params, new Callback.ProgressCallback<File>() {

                    @Override
                    public void onLoading(long total, long current, boolean isDownLoading) {
                        // todo 正在加载的方法 -- 实时更新进度
                        int progress = (int)(current *100/total);//得到当前加载的进度
                        mProgressBar.setProgress(progress);
                    }

                    @Override
                    public void onSuccess(File file) {
                        // todo 加载成功  -- 最后的操作  -- 一定是下载成功了, 所有只需要安装即可
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        DownLoadApkActivity.this.startActivity(intent);
                    }

                    @Override
                    public void onError(Throwable throwable, boolean b) {
                        // todo  加载失败
                    }
                    @Override
                    public void onCancelled(CancelledException e) {
                        // todo  取消方法
                    }
                    @Override
                    public void onFinished() {
                        // todo 完成的方法
                    }
                    @Override
                    public void onWaiting() {
                        // todo  等待的方法
                    }
                    @Override
                    public void onStarted() {
                        // todo  开始加载的方法
                    }
                });

                break;

            case R.id.stop_load_id: //点击暂停

                //TODO 4, 暂停下载
                cancelable.cancel();

                break;
        }

    }
}

//数据库的

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import org.xutils.DbManager;
import org.xutils.ex.DbException;
import org.xutils.view.annotation.ContentView;
import org.xutils.x;

import java.util.List;

import bw.com.bw_day01_xutils.R;

@ContentView(value =  R.layout.activity_db)
public class DbActivity extends AppCompatActivity {

    private DbManager dbManager;//数据库的管理器对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //引入注解
        x.view().inject(this);

        //1, 创建数据库  -- 实例化数据库的配置信息
        DbManager.DaoConfig daoConfig = new DbManager.DaoConfig();
        daoConfig.setDbName("bw_1511C.db");//数据库的名称
        daoConfig.setDbVersion(1);//设置版本号
        daoConfig.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
            @Override
            public void onUpgrade(DbManager dbManager, int i, int i1) {

            }
        });//数据库版本更新的回调方法

        dbManager =  x.getDb(daoConfig);

        //2,  表 -- 实体类 (改良)  --TODO  切记:  必须要包含一个无参的构造方法

        //3, 数据--内容 -- 添加数据
        try {
            dbManager.save(new User("张三",20));
            dbManager.save(new User("李四",25));
            dbManager.save(new User("王五",30));

        } catch (DbException e) {
            e.printStackTrace();
        }

        //5, 修改数据
        //根据id 得到要修改的类
        try {
            User user = dbManager.findById(User.class,1);
            user.setName("宋小宝");
            user.setAge(40);
            dbManager.update(user,"name","age");

        } catch (DbException e) {
            e.printStackTrace();
        }

        //6,删除数据
        try {
            //根据id 得到要删除的类
            User user = dbManager.findById(User.class,2);
            dbManager.delete(user);
        } catch (DbException e) {
            e.printStackTrace();
        }


        //4, 查看数据
        try {
            //查询所有数据
            List<User> data =  dbManager.findAll(User.class);
            //查询指定id的数据    dbManager.findById(User.class,2);

            for(User user:data)
            {
                Log.e("TAG","user -- " + user);
            }

        } catch (DbException e) {
            e.printStackTrace();
        }

    }
}
//数据库的工具类

import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;

/**
 * Created by Administrator on 2018/1/23.
 */

//指定表
@Table(name = "user")
public class User {

    //指定字段
    //name 字段名称,isId = true  是否为主键 ,autoGen = true  是否自动增长
    @Column(name = "_id",isId = true,autoGen = true)
    private int id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

//网络解析

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;

import com.google.gson.Gson;

import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;

import java.util.List;

import bw.com.bw_day01_xutils.R;

/**
 *  需求:  通过xUtils 获取网络数据, 解析数据, 将数据显示在ListView 中
 *
 *  1, 导入依赖和jar包
 *  2, 添加权限
 *  3, 初始化xUtils -- Application 的子类中  -- MyApp  -- 在清单文件中引入App
 */
//TODO 加载页面
    @ContentView(value = R.layout.activity_get_data)
public class GetDataActivity extends AppCompatActivity {

    //TODO 初始化控件
    @ViewInject(value = R.id.lv_id)
    private ListView mLv;

    //数据源 -- 网络获取 -- 实体类
    private List<VMoive.DataBean> data;

    //适配器
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //TODO 引入注解
        x.view().inject(this);

        //TODO 重点:  xUtils 获取网络数据

        //声明请求参数( 下载地址);
        RequestParams params = new RequestParams("http://app.vmoiver.com/apiv3/post/getPostInCate?cateid=0&p=1");

        //1参: 请求参数  ; 2参: 回调接口
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String s) {
                //TODO 获取数据成功的回调方法  s -- 返回的json字符串

                //解析数据
                VMoive vMoive = new Gson().fromJson(s,VMoive.class);

                //得到数据源
                data = vMoive.getData();

                //初始化适配器
                adapter = new MyAdapter(GetDataActivity.this,data);

                mLv.setAdapter(adapter);

            }

            @Override
            public void onError(Throwable throwable, boolean b) {
                //TODO 获取数据失败的回调方法
            }

            @Override
            public void onCancelled(CancelledException e) {
                //TODO 取消的回调方法
            }

            @Override
            public void onFinished() {
                //TODO 获取数据完成的方法
                }
        });

    }
}
//完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值