android学习笔记

com.github.mikephil.charting.buf

2020-05-15  本文已影响0人  鼾声鼾语

为了实现动态绘制曲线,我们采用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
}

上一篇下一篇

猜你喜欢

热点阅读