com.github.mikephil.charting.buf
为了实现动态绘制曲线,我们采用mpAndroidChart的库,
首先我用的是网上常规的MPAndroidChartLibrary-2-1-6.jar,网上流传的这个库最为广泛。
但是回调数据100ms发送一次,自动自动绘制的时候总是报错,突然停止掉了
com.github.mikephil.charting.buffer.CircleBuffer.setPhases(float, float)' on a null object reference
1,百度了一大圈没找到答案
2,去GitHub找到了一个回答,貌似有用
I solved this by adding a null check in the LineBuffer.java code. So if buffer is empty for whatever reason, i reinitialize the buffers
LineBuffer buffer = mLineBuffers[dataSetIndex];
//my code
//start
if(buffer==null) {
initBuffers();
buffer = mLineBuffers[dataSetIndex];
}
//end
buffer.setPhases(phaseX, phaseY);
3,但是这个答案是需要修改源码的,我们只有jar包
4,去GitHub作者那里找到源码库,
5,为了防止我本来的代码修改,需要找一个和MPAndroidChartLibrary-2-1-6.jar相近,但是要比这个版本高,我们幸运的找到了MPAndroidChart.2.1.6,这个版本中有jar库
6,再向上找版本,找到了2.2.3版本,这个版本中没有jar库,当然我们需要的是源码,需要根据步骤2进行修改代码,我们下载了源码,添加为moduel库
7,但是这个时候会发现,添加失败,即使我们按照正确的步骤进行了操作,include ,'MPChartLib',同时修改包中的gradle为library了,但是换视不可以。
8,错误为:
Could not resolve io.realm:realm-android:0.87.5.
Failed to resolve:com.github.PhilJay:MPAndroidChart:v2.2.3
9,这个时候需要我们在app的build上添加
annotationProcessor 'io.realm:realm-android:0.87.5'
10,编译正确,但是运行错误,
javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true
11,修改,我们的Mplib中的build
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true }}
12,修改LineChartRenderer中的函数,
如第二步骤,
13,可能会出现
set = (LineDataSet) data.getDataSetByIndex(i);这个地方报错,只需要向下转型就可以了。 (LineDataSet)
下边给出我三个build.gradle
app的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "main.com.pwj.testmvp"
minSdkVersion 18
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.+'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
implementation 'pub.devrel:easypermissions:1.2.0'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.44'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
annotationProcessor 'io.realm:realm-android:0.87.5'
implementation project(':MPChartLib')
implementation 'com.zhousf.lib:okhttp3:2.9.9'
implementation project(':cbt')
// implementation files('libs/mpandroidchartlibrary-2-1-6.jar')
// implementation files('libs/mpandroidchartlibrary-2-1-3.jar')
}
MPChartLib的build.gradle
apply plugin: 'com.android.library'
apply plugin: 'maven'
apply plugin: 'com.github.dcendents.android-maven'
android {
compileSdkVersion 28
// buildToolsVersion '23.0.2'
// resourcePrefix 'mpcht'
defaultConfig {
minSdkVersion 18
targetSdkVersion 28
versionCode 1
versionName '1.0'
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true }}
sourceSets {
main {
java.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
manifest.srcFile 'AndroidManifest.xml'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
task clearJar(type: Delete) {
delete 'libs/MPChartLib.jar'
}
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
//指定生成的jar名
baseName 'MPChartLib'
//从哪里打包class文件
// from('build/intermediates/classes/debug/com/example/retrofithttprequest')
from('src/com/github/mikephil/charting')
//打包到jar后的目录结构
into('com/example/retrofithttprequest/')
//去掉不需要打包的目录和文件
exclude('R.class')
//去掉R开头的文件
exclude{it.name.startsWith('R');}
}
makeJar.dependsOn(clearJar, build)
repositories {
maven {
url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'
}
}
dependencies {
//compile fileTree(dir: 'libs', include: ['*.jar'])
//compile 'com.android.support:support-v4:19.+'
provided 'io.realm:realm-android:0.87.5' // "optional" dependency to realm-database API
}
android.libraryVariants.all { variant ->
def name = variant.buildType.name
def task = project.tasks.create "jar${name.capitalize()}", Jar
task.dependsOn variant.javaCompile
task.from variant.javaCompile.destinationDir
artifacts.add('archives', task);
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
failOnError false
source = android.sourceSets.main.java.sourceFiles
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives sourcesJar
archives javadocJar
}
项目总的build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
maven {
url 'https://maven.google.com'
}
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url 'https://jitpack.io' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}