博客
关于我
Android 在Service服务中上传数据到服务器
阅读量:138 次
发布时间:2019-02-28

本文共 2605 字,大约阅读时间需要 8 分钟。

前言:根据自己的项目去总结的一个思路,和具体实现方法。

思路:在项目中创建一个服务类UserlogService 继承自Service

之后根据Service的生命周期。
Service的生命周期这一块,可以看我的这篇博文,,就不在本篇文章中讲解了。
根据Service生命周期,把具体操作写在onStartCommand()中。
onStartCommand()的代码如下:
定期触发3秒上传一次

@Override    public int onStartCommand(Intent intent, int flags, int startId) {        mHelper = UserLogDBHelper.getInstance(this, 1);        mHelper.openReadLink();        myhandler.sendMessageDelayed(Message.obtain(myhandler, 1), 3000);        return  START_STICKY;    }

1.查询本地没有上传的数据。

//查询本地未上传数据ArrayList
arrayListlog = readSQLite();

调用readSQLite方法:

//查询本地数据    private ArrayList
readSQLite() { ArrayList
arrayList = mHelper.query("1=1"); return arrayList; }

2.调用API,上传数据,这一步才是核心。

这里面用的是Post异步请求

/**调用API,上传数据     * @param userLog     */    private void setUploaddata(final UserLog userLog) {        try {        String userlogjson = new Gson().toJson(userLog);        //定义OKhttp        OkHttpClient okHttpClient = new OkHttpClient();        MediaType JSON = MediaType.parse("application/json");        //定义请求体        RequestBody body = RequestBody.create(JSON, userlogjson);            Request request = new Request.Builder()                    .post(body)                    .url("http://v.juhe.cn/toutiao/index")                    .build();                    //异步请求            okHttpClient.newCall(request).enqueue(new Callback() {                @Override                public void onFailure(Call call, IOException e) {                }                @Override                public void onResponse(Call call, Response response) throws IOException {                    String ss = response.body().string();                    ResultMsg resultMsg = new Gson().fromJson(ss, ResultMsg.class);                    if (resultMsg.Result.equals("1")) {                        Log.d(TAG, "run: 上传成功");                        Looper.prepare();                        //上传成功的数据从本地删除                        Delete(userLog.UserLogID);                        Looper.loop();                    } else {                    }                }            });        } catch (Exception e) {            e.printStackTrace();        }    }

3.上传数据之后,从本地删除已经上传的数据,上面代码已经写出

这是Delete()的具体方法。

//删除本地数据    private void  Delete(String UserLogID)    {        try {            mHelper.delete("UserLogID='" + UserLogID+"'");        }catch (Exception ex)        {            Log.d(TAG, "Delete: "+ex.toString());        }    }

最后一步,在MainActivity中,启动服务。

//开启日志上传服务Intent intent=new Intent(this,UserLogService.class);startService(intent);

以上就是上传到服务器的一个基本思路,仅做记录参考,有需要的可以参考学习!

转载地址:http://tsed.baihongyu.com/

你可能感兴趣的文章
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>
Mysql: 对换(替换)两条记录的同一个字段值
查看>>
mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>