Android 在Service服务中上传数据到服务器

简介: Android 在Service服务中上传数据到服务器

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

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

之后根据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<UserLog> arrayListlog = readSQLite();

调用readSQLite方法:

//查询本地数据
    private ArrayList<UserLog> readSQLite() {
        ArrayList<UserLog> 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);

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


目录
相关文章
|
1月前
|
弹性计算 监控 负载均衡
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
132 60
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
262 62
|
1月前
|
弹性计算 人工智能 数据安全/隐私保护
【手把手教你】如何免费畅快使用阿里云ECS搭建私有Overleaf论文写作服务
本文详细介绍如何利用阿里云ECS免费搭建私有Overleaf论文写作服务,包括ECS服务器的部署、Overleaf服务的安装、TexLive包的更新、XeLaTeX修复、中文字体支持及账号管理等步骤。通过这些操作,你可以实现免费且高效的多人协作论文写作,避免付费版本的高昂费用。适合需要频繁合作撰写论文的团队使用。
82 1
【手把手教你】如何免费畅快使用阿里云ECS搭建私有Overleaf论文写作服务
|
16天前
|
弹性计算 监控 容灾
阿里云ECS提供强大的云上灾备解决方案,通过高可用基础设施、多样的数据备份方式及异地灾备服务,帮助企业实现业务的持续稳定运行
在数字化时代,企业对信息技术的依赖加深,确保业务连续性至关重要。阿里云ECS提供强大的云上灾备解决方案,通过高可用基础设施、多样的数据备份方式及异地灾备服务,帮助企业实现业务的持续稳定运行。无论是小型企业还是大型企业,都能从中受益,确保在面对各种风险时保持业务稳定。
34 4
|
21天前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
36 3
|
13天前
|
存储 运维 算法
服务器数据恢复—raid6阵列硬盘重组raid5阵列如何恢复raid6阵列数据?
服务器存储数据恢复环境: 存储中有一组由12块硬盘组建的RAID6阵列,上层linux操作系统+EXT3文件系统,该存储划分3个LUN。 服务器存储故障&分析: 存储中RAID6阵列不可用。为了抢救数据,运维人员使用原始RAID中的部分硬盘重新组建RAID并进行了初始化。 初始化开始一段时间后,运维人员察觉到情况有异后强制终止初始化,这个时候初始化已经完成一半以上。数据部分已被不可逆的破坏。
|
1月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
206 3
|
2月前
|
存储 数据挖掘
服务器数据恢复—用RAID5阵列中部分盘重建RAID5如何恢复原raid5阵列数据?
服务器数据恢复环境: 一台服务器挂接一台存储,该存储中有一组由5块硬盘组建的RAID5阵列。 服务器故障: 存储raid5阵列中有一块硬盘掉线。由于RAID5的特性,阵列并没有出现问题。工作一段时间后,服务器出现故障,用户方请人维修。维修人员在没有了解故障磁盘阵列环境的情况下,用另外4块硬盘(除去掉线的硬盘)重新创建了一组全新的RAID5阵列并完成数据同步,导致原raid5阵列数据全部丢失。
|
2月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
32 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件