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

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


目录
相关文章
|
5月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
625 4
|
20天前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
74 23
|
2月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
227 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
5月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
939 4
|
6月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
857 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
6月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
92 1
|
7月前
|
JavaScript 前端开发 Android开发
让Vite+Vue3项目在Android端离线打开(不需要起服务)
让Vite+Vue3项目在Android端离线打开(不需要起服务)
263 10
|
6月前
|
存储 大数据 数据库
Android经典面试题之Intent传递数据大小为什么限制是1M?
在 Android 中,使用 Intent 传递数据时存在约 1MB 的大小限制,这是由于 Binder 机制的事务缓冲区限制、Intent 的设计初衷以及内存消耗和性能问题所致。推荐使用文件存储、SharedPreferences、数据库存储或 ContentProvider 等方式传递大数据。
264 0
|
7月前
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
182 0
|
7月前
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
116 0
下一篇
oss创建bucket