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);

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


目录
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1558 4
|
10月前
|
网络协议 关系型数据库 应用服务中间件
如何迁移网站数据到新的服务器
迁移网站数据到新服务器是一个系统化的过程,需谨慎操作以避免数据丢失或服务中断。小编为您整理发布如何迁移网站数据到新的服务器,以下是详细步骤和注意事项。
|
缓存 人工智能 架构师
释放数据潜力:利用 MCP 资源让大模型读懂你的服务器
MCP(Model Control Protocol)资源系统是将服务器数据暴露给客户端的核心机制,支持文本和二进制两种类型资源。资源通过唯一URI标识,客户端可通过资源列表或模板发现资源,并使用`resources/read`接口读取内容。MCP还支持资源实时更新通知及订阅机制,确保动态数据的及时性。实现时需遵循最佳实践,如清晰命名、设置MIME类型和缓存策略,同时注重安全性,包括访问控制、路径清理和速率限制等。提供的示例代码展示了如何用JavaScript和Python实现资源支持。
1200 80
|
10月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
635 11
|
9月前
|
存储 安全 数据管理
服务器违规资源被删,数据定时备份OSS 云存储才是 “救命稻草”
在数字化时代,数据已成为企业与个人的核心资产。然而,服务器违规、硬件故障等问题频发,导致数据丢失、业务中断,甚至造成不可挽回的损失。为保障数据安全与业务连续性,定时备份至关重要。阿里云国际站OSS提供高效、可靠的云存储解决方案,支持自动定时备份,帮助用户轻松应对数据风险。本文详解OSS备份操作步骤与注意事项,助你为数据穿上“防护甲”,实现安全无忧存储。
|
11月前
|
弹性计算 安全
阿里云服务器镜像,快速迁移项目数据
有时候旧服务器快到期了,想把项目、数据、软件挪到新服务器上,如果全部重新搭建的话,那无疑是耗时又费力。有了镜像迁移,就方便了许多。
770 1
|
存储 数据库 Python
使用HTTP POST协议将本地压缩数据发送到服务器
总的来说,使用HTTP POST协议将本地压缩数据发送到服务器是一个涉及多个步骤的过程,包括创建压缩文件,设置HTTP客户端,发送POST请求,以及服务器端的处理。虽然这个过程可能看起来复杂,但一旦你理解了每个步骤,就会变得相对简单。
416 19
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
552 28
|
12月前
|
弹性计算 NoSQL 数据库
阿里云服务器如何备份数据?
阿里云服务器数据备份有多种方法,用户可按需选择。主要方式包括:1)快照备份,创建云盘的时间点拷贝,支持定期备份与数据恢复;2)数据库备份DBS,适用于多种环境的数据库备份,涵盖本地及多云场景;3)云备份Cloud Backup,提供统一灾备平台,支持ECS整机、数据库、文件系统等全方位备份,保障数据安全。
|
12月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2817 2