okhttp和linechart的应用:从http获取数据生成折线图 34 / 100

这篇具有很好参考价值的文章主要介绍了okhttp和linechart的应用:从http获取数据生成折线图 34 / 100。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MainActivity类

package com.example.linecharthttp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private final OkHttpClient okHttpClient = new OkHttpClient();
    private Button mGetNumberButton;
    private Button mGetDataButton;
    private LineChart mLineChart;
    private List<Entry> mListOne = new ArrayList<>();

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLineChart = findViewById(R.id.lineChart);
        mGetNumberButton = findViewById(R.id.getNumberButton);
        mGetNumberButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GetNumber();

            }
        });

        mGetDataButton = findViewById(R.id.getDataButton);
        mGetDataButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                doGetAsync();
            }
        });

    }

    public int GetNumber() {
        Request request = new Request.Builder()
                .url("http://192.xxx.x.x:xxxx/PlotData/Size")
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                Log.e(TAG, "失败");
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                String string = response.body().string();
                String[] dataBuf_FirstLine = string.split(",");
                String[] Datasize = dataBuf_FirstLine[0].split(":");
                String size = Datasize[1];
                Log.e(TAG, "数据长度为:" + size);
            }
        });
        return 0;
    }

    public void doGetAsync() {
        Request request = new Request.Builder()
                .url("http://192.xxx.x.x:xxxx/PlotData/P1")
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                Log.e(TAG, "失败");
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                String string = response.body().string();
                String[] dataBuf_FirstLine = string.split("\":");
                String[] volt = dataBuf_FirstLine[4].split(",");
                volt[10] = "3.892264";
                volt[0] = "3.892206";

                ArrayList listone = new ArrayList<>(volt.length);
                Collections.addAll(listone, volt);
                listone.remove(1);
                listone.remove(10);//上面删除一个,最后一个就是第10个

                String[] date = dataBuf_FirstLine[2].split(",");
                date[0] = "00:00:00:020";
                date[9] = "00:00:00:920";
                ArrayList listtow = new ArrayList<>(date.length);
                Collections.addAll(listtow, date);
                listtow.remove(10);
                TextData textData = new TextData();

                for (int i = 0; i < listtow.size(); i++) {
                    String strDateTime = (String) listtow.get(i);
                    String strValue1 = (String) listone.get(i);
                    textData.setTestDateTime(strDateTime);
                    textData.setVolt(Double.parseDouble(strValue1));
                    mListOne.add(new Entry(i, (float) textData.getVolt()));
                }

                initChart();
                initChartBackground();


                Log.e(TAG, listone.toString());
            }
        });
    }

    private void initChartBackground() {
        Description description = null;
        //设置描述
        description = new Description();
        description.setEnabled(true);//设置是否启用标题
        description.setText("测试时间-电压-电流曲线");//设置标题文本
        description.setTextSize(20);//设置文本大小
        description.setTypeface(Typeface.MONOSPACE);//设置文本字体样式
        description.setTextColor(Color.BLACK);//设置文本颜色
        description.setXOffset(10f);//设置X轴的偏移量,float值
        description.setYOffset(10f);//设置Y轴的偏移量,float值
        //mLineChart.setBackgroundColor(Color.BLACK);
        // description.setTextAlign(Paint.Align.CENTER);//提示框的文本对齐,中心对齐
        description.setPosition(350, 30);//设置描述所处的位置
        mLineChart.setDescription(description);//添加给LineChart
        // mLineChart.setNoDataText("暂无数据");   // 没有数据时样式

        XAxis xAxis = mLineChart.getXAxis();//得到x轴
        xAxis.setDrawAxisLine(true);//是否绘制轴线
        xAxis.setDrawGridLines(true);//设置x轴上每个点对应的线
        xAxis.setDrawLabels(true);//绘制标签  指x轴上的对应数值
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴的位置,在整个图形的底部

        xAxis.setLabelCount(mListOne.size(), true); //设置X轴刻度 第一个参数是想要x轴有多少条刻度,第二个参数true是将刻度数设置为你的第一个参数的数量 ,false是将刻度数设置为你的第一个参数的数量+1(0.0点也要算哦)
        xAxis.setGranularity(1f);//设置x轴坐标间的最小间距
        xAxis.setAxisMaximum(mListOne.size() + 1);//设置x轴的最大范围
        // xAxis.setAxisMinimum(0f);//设置x轴的最小范围
        //xAxis.setGridColor(Color.TRANSPARENT);//设置x轴刻度透明

        //Y轴不是有左右两边嘛,这就是获取左右两边的y轴

        YAxis axisLeft = mLineChart.getAxisLeft();
        //    axisRight.setEnabled(false);//将右边的y轴隐藏
        //y轴最大值最小值范围
        //  axisLeft.setAxisMaximum(550f);
        //axisLeft.setAxisMinimum(0f);

        axisLeft.setTextColor(Color.parseColor("#000000"));//设置左y轴字的颜色
        axisLeft.setAxisLineColor(Color.BLACK);//y轴颜色
        axisLeft.setGridColor(Color.parseColor("#C0C0C0"));//y轴线颜色
        axisLeft.enableGridDashedLine(10f, 10f, 0f);

    }

    private void initChart() {
        LineDataSet one = new LineDataSet(mListOne, "电压");//将数据赋值到你的线条上
        one.setColor(Color.parseColor("#67BCFF"));//设置线的颜色
        one.setDrawCircles(false);//设置是否绘制点,默认是true
        one.setDrawValues(false);//是否绘制点上的文字,默认为true
        LineData lineData = new LineData();// //线的总管理
        lineData.addDataSet(one);//每加一条就add一次
        mLineChart.setData(lineData);//把线条设置给你的lineChart上
        mLineChart.invalidate();//刷新
    }
}
TextData类
package com.example.linecharthttp;

public class TextData {
    String mTestDateTime;   // 测试记录点日期时间
    double mVolt;           // 电压(double)

    public TextData() {
    }

    public String getTestDateTime() {
        return mTestDateTime;
    }

    public void setTestDateTime(String testDateTime) {
        mTestDateTime = testDateTime;
    }

    public double getVolt() {
        return mVolt;
    }

    public void setVolt(double volt) {
        mVolt = volt;
    }

    public TextData(String testDateTime, double volt) {
        mTestDateTime = testDateTime;
        mVolt = volt;
    }

    @Override
    public String toString() {
        return "测试时间-电压曲线数据:" +
                "测试时间为:" + mTestDateTime + '\'' +
                ", 测试电压为:" + mVolt +
                '}';
    }
}

activity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/lineChart"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        tools:ignore="MissingClass">

    </com.github.mikephil.charting.charts.LineChart>

    <Button
        android:id="@+id/getNumberButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取数量"
        android:layout_marginTop="50dp"/>

    <Button
        android:id="@+id/getDataButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取数据并生成曲线"
        android:layout_marginTop="30dp"/>

</LinearLayout>

效果
okhttp和linechart的应用:从http获取数据生成折线图 34 / 100,okhttp,http,网络协议

需要加的依赖

这个没有依据,都是我自己会用到的,具体加那些看自己代码需要

    implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
    def dialogx_version = "0.0.46"
    implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
    implementation 'androidx.sqlite:sqlite:2.2.0'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.google.code.gson:gson:2.7'
    implementation 'com.alibaba:fastjson:1.2.67'
    implementation("com.squareup.okhttp3:okhttp:4.10.0")
AndroidManifest.xml

也是按我自己需要的添加

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application

        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.LineChartHttp"
        android:usesCleartextTraffic="true"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

最后
okhttp和linechart的应用:从http获取数据生成折线图 34 / 100,okhttp,http,网络协议文章来源地址https://www.toymoban.com/news/detail-631513.html

到了这里,关于okhttp和linechart的应用:从http获取数据生成折线图 34 / 100的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android应用:实现网络加载商品数据【OKHttp、Glide、Gson】

    实现网络加载商品数据的功能: 1、在AndroidManifest.xml中声明网络权限; 2、在app/build.gradle中添加okhttp, glide, gson等必需的第3方库; 3、在MainActivity中通过OkHttpClient连接给定的Web服务,获取商品数据;对应的json数据为本地的json文件,名字为goods_list_data.json;数据内容为:[ {“id”

    2024年02月08日
    浏览(59)
  • 数据可视化,使用Echarts生成柱状图,折线图,饼图

    目录 ECharts的快速上手 步骤1:引入 echarts.js 文件 步骤2:准备一个呈现图表的盒子 步骤3:初始化 echarts 实例对象 步骤4:准备配置项 步骤5:将配置项设置给 echarts 实例对象 示例代码: 相关配置讲解: 效果展示:  1.柱状图 常见效果: 标记: 显示: 横向柱状图: 柱状图示

    2024年01月20日
    浏览(52)
  • 基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据

    STHS34PF80传感器项目种修改 Arduino 脚本,重新移植到STM32的MCU中。 该项目基于STHS34PF80 IR温度传感器,能够检测环境和物体温度,并且在最大4米范围内检测存在和运动。有一个Arduino脚本,显示如何为基本环境和物体温度测量配置传感器,并如何配置嵌入式功能算法,并使用它们

    2024年02月11日
    浏览(34)
  • OkHttp搞定Http请求

    官方文档 仓库 OkHttp是一款高效的HTTP客户端框架: HTTP/2支持允许对同一主机的所有请求共享一个套接字。 连接池可以减少请求延迟(如果HTTP/2不可用)。 透明GZIP压缩下载大小。 响应缓存完全避免了重复请求的网络。 当网络出现问题时,OkHttp会自动恢复一般的连接问题;若服务

    2024年02月02日
    浏览(36)
  • Http客户端OkHttp的基本使用

    OkHttp是一个强大的开源HTTP客户端,它被广泛用于Android和Java应用程序中。OkHttp具有简单易用的API,提供了许多高级功能,如连接池、请求压缩和缓存等。 要使用OkHttp,需要在项目的构建文件中添加以下依赖: 请将 x.x.x 替换为您希望使用的OkHttp版本号。 GET请求 以下是发送G

    2024年02月09日
    浏览(59)
  • WPS AI内测申请窍门;AI数字人最全工具盘点;AI超级个体必读书籍;产品国际化与本地化指南;生成式AI应用路线图 | ShowMeAI日报

    👀 日报周刊合集 | 🎡 生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 随着生成式AI「 对生成内容的可控性 」不断提高,其应用场景也在不断扩展和深化,这个演进过程大致分为如图所示的6个阶段。 与简单的文本/图片生成相比,包含声音、视频、3D场景、动画、复

    2024年02月16日
    浏览(52)
  • Java请求Http接口-OkHttp(超详细-附带工具类)

    简介:OkHttp是一个默认有效的HTTP客户端,有效地执行HTTP可以加快您的负载并节省带宽,如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试备用地址。这对于IPv4 + IPv6和冗余数据中心中托管的服务是必需的。OkHttp启动具有现代TLS功能(SNI,ALPN)的新连接,并在握手

    2024年02月12日
    浏览(39)
  • jdk8使用okhttp发送http2请求

    本文主要用于工作记录,在项目中遇到了就记录一下 在早期,原生的JDK8是不支持HTTP/2协议的,所以,要想使用这个特性,需要有web服务器和应用环境的支持, 例如:在VM中增加 -Xbootclasspath/p:/Users/a1234/Downloads/alpn-boot-8.1.11.v20170118.jar 来配合使用 但是从8u252开始,ALPN层已经从

    2024年02月14日
    浏览(50)
  • WebClient, HttpClient, OkHttp: 三个Java HTTP客户端的比较

    在Java世界中,有许多用于发送HTTP请求的库。在本文中,我们将重点介绍并比较三种流行的HTTP客户端:WebClient,HttpClient和OkHttp。我们将通过讲解它们的基本概念,使用方法和示例,以及它们的优缺点,帮助你选择最适合你的HTTP客户端。 WebClient是Spring 5中引入的非阻塞,反应

    2024年02月08日
    浏览(42)
  • 扔掉okhttp、httpClient,这款轻量级 HTTP 神器好用到爆

    前言 功能特性 快速使用 HTTP请求相关注解 配置项说明 高级功能 全局拦截器 调用适配器和数据转码器 总结 在 SpringBoot 项目直接使用 okhttp 、 httpClient 或者 RestTemplate 发起 HTTP 请求,既繁琐又不方便统一管理。因此,在这里推荐一个适用于 SpringBoot 项目的轻量级HTTP客户端框架

    2024年02月07日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包