- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 MPAndroidChart 绘制实时数据图表,并遵循代码示例 here和 here 。我过去曾使用过包含静态数据的图表。
按照第一个示例,我在 onCreate 方法中初始化全局声明的 mChart 变量。但是,当调用 onResume 时,mChart 变量再次设置为 NULL,并且我的 addEntry() 方法由于 NULL 异常而失败。
我需要做什么才能防止 mChart 设置为 NULL(XML 中的其他变量在 onCreate 中初始化并在 onResume 中保留其值)。
顺便说一句,这个应用程序还有一个 BLE 服务,该服务使用源自 AndroidStudio BLE 示例的源代码运行。
这就是 mChart 在 onCreate 结束时的样子(包括 mDataField 用于比较)。
mChart = {LineChart@830034242904} "com.github.mikephil.charting.charts.LineChart{41e56d58 V.ED.... ......ID 0,0-0,0 #7f0b0066 app:id/chart}"
mDataField = {TextView@830035362136} "android.widget.TextView{41f68158 V.ED.... ......ID 0,0-0,0 #7f0b0068 app:id/data_value}"
mChart 被声明为类私有(private)变量:
private LineChart mChart;
我的onCreate()方法(根据AndroidStudio调试器,mChart在该方法末尾有一个非NULL值):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gatt_services_characteristics);
final Intent intent = getIntent();
mDeviceName = intent.getStringExtra(EXTRAS_DEVICE_NAME);
mDeviceAddress = intent.getStringExtra(EXTRAS_DEVICE_ADDRESS);
// Sets up UI references.
((TextView) findViewById(R.id.device_address)).setText(mDeviceAddress);
mGattServicesList = (ExpandableListView) findViewById(R.id.gatt_services_list);
mGattServicesList.setOnChildClickListener(servicesListClickListner);
mConnectionState = (TextView) findViewById(R.id.connection_state);
mDataField = (TextView) findViewById(R.id.data_value);
getActionBar().setTitle(mDeviceName);
getActionBar().setDisplayHomeAsUpEnabled(true);
Intent gattServiceIntent = new Intent(this, BluetoothLeService.class);
bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
// https://github.com/PhilJay/MPAndroidChart/wiki/Getting-Started
// in this example, a LineChart is initialized from xml
LineChart mChart = (LineChart) findViewById(R.id.chart);
// mChart.setOnChartValueSelectedListener(this);
// ---------------------------------------------------------
// Set up chart formatting
// ---------------------------------------------------------
mChart.setDescription(new Description());
mChart.setNoDataText("No Data Yet");
// enable value highlighting
mChart.setHighlightPerDragEnabled(true);
mChart.setHighlightPerTapEnabled(true);
mChart.setTouchEnabled(true);
// enable scaling and dragging
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
mChart.setDrawGridBackground(false);
// enable pinch zoom to avoid scaling x and y axis separately
mChart.setPinchZoom(true);
// alternative background color
mChart.setBackgroundColor(Color.LTGRAY);
LineData data = new LineData();
data.setValueTextColor(Color.WHITE);
// add data to line chart
mChart.setData(data);
// get legend object
Legend l = mChart.getLegend();
// customize legend
l.setForm(Legend.LegendForm.LINE);
l.setTextColor(Color.WHITE);
XAxis x1 = mChart.getXAxis();
x1.setTextColor(Color.WHITE);
x1.setDrawGridLines(false);
x1.setAvoidFirstLastClipping(true);
YAxis y1 = mChart.getAxisLeft();
y1.setTextColor(Color.WHITE);
y1.setAxisMaxValue(120f);
y1.setDrawGridLines(true);
YAxis y12 = mChart.getAxisRight();
y12.setEnabled(false);
final Button emailButton = (Button) findViewById(R.id.button_email);
emailButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
showEmailDialog();
}
} );
}
还有,我的 onResume。根据调试器的结果,在调用 super.onResume() 之前,mChart 等于 NULL。
@Override
protected void onResume() {
super.onResume();
registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
if (mBluetoothLeService != null) {
final boolean result = mBluetoothLeService.connect(mDeviceAddress);
Log.d(TAG, "Connect request result=" + result);
}
// Simulate real time data
new Thread( new Runnable(){
@Override
public void run(){
// add 100 entries
for(int i = 0; i<100; i++){
runOnUiThread(new Runnable(){
@Override
public void run() {
addEntry(); // Chart is notified of update in addEntry method
}
});
// pause between adds
try {
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
最后,这是我的 XML:
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_device_address"
android:textSize="18sp"/>
<Space android:layout_width="5dp"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/device_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"/>
</LinearLayout>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="200sp" />
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_state"
android:textSize="12sp"/>
<Space android:layout_width="5dp"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/connection_state"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/disconnected"
android:textSize="12sp"/>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_data"
android:textSize="12sp"/>
<Space android:layout_width="5dp"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/data_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/no_data"
android:textSize="12sp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="bottom|right"
android:layout_centerInParent="true"
android:weightSum="5"
android:layout_alignParentBottom="true">
<Button
android:id="@+id/button_email"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:maxLines="1"
android:textSize="10sp"
android:text="@string/button_email_name"/>
</LinearLayout>
<ExpandableListView android:id="@+id/gatt_services_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
最佳答案
您将其定义为 onCreate
中的局部变量
LineChart mChart = (LineChart) findViewById(R.id.chart);
将该行更改为
mChart = (LineChart) findViewById(R.id.chart);
由于mChart
被定义为一个字段
关于java - MPAndroidchart mChart 在 onCreate 和 onResume 之间设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657287/
我正在做一个项目,最近开始使用 MPAndroidChart。 我让 MPAndroidChart 正常工作并正确填充图表数据,但我想要一种能够拖动和选择图表区域的方法。选择完成后,它需要返回所选点的
我知道删除x值的方法,但是我如何删除y值。我基本上不希望饼图上有任何文本。 该图显示了饼图顶部带有80.0和20.0标签的当前状态。 最佳答案 删除Y值 使用dataset.setDrawValues
在我的应用程序中,我使用 ios-charts 库(MPAndroidChart 的快速替代品)。我需要的只是显示带有日期和值的折线图。 现在我使用这个函数来显示图表 func setChart(da
我正在使用这个很棒的绘图仪框架 ios-charts。 Android 版本的文档指出,可以使用“setTouchEnabled(false)”禁用图表上的触摸事件。但是我在 iOS 版本中找不到此功
我正在使用 MPAndroidChart (v3.0.2) 在我的 Android 应用程序中实时绘制我的数据。我需要平滑图表的线条(来自传感器的噪音)。我了解我需要使用以下任何一种方法: lineD
我正在尝试使用 MpAndroidChart 库绘制圆角饼图。 预期输出与此类似。 两端都需要外圆。有一个方法 pieChart.setDrawRoundedSlices(true),但问题是饼图的起
那么如何只渲染 x 轴而不渲染其上的网格线。从附图中可以看出,我将轴线的宽度设置为 4 ,将网格线的宽度设置为 2 。所以黑线出现在白轴线上。我只想显示轴线。我该怎么做。 最佳答案 正如 docs 中
我想在轴的末端放置一个箭头,但我不知道如何在 MPAndroidCharts 库中实现这一点。最后应该是这样的。 我目前的风格: val xAxis = chart.xAxis xAxis.s
在 CombinedChart 中添加 chart.setFitBars(true) 将使第一个和最后一个条可见。 我需要做同样的事情来组合折线图和条形图。 现在,第一个和最后一个条不完全可见。 我试
我想点击显示,三个tooltips/markers , 只有一个 dataset . 如下图所示: 我该怎么做? 最佳答案 我创建了一个 LineChart并给它数据。 对于多个标记,我创建了一个实现
有没有办法让 MarkerView 固定位置?我需要在 修复它左上或 右上角角落。 最佳答案 这是将标记固定在左上角或右上角的一种方法 创建自定义 MarkerView 后,您可以执行以下操作。 1)
我使用 MPAndroidChart 制作了 LineChart 并将 x 轴文本大小设置为 15。不幸的是,由于文本大小较大,x 轴标签在顶部被截断: 我怎么解决这个问题? 最佳答案 chart.e
我在Android Studio中将Kotlin与MPAndroidChart结合使用。我设法从示例中构建标准图表,但是我需要一些不同的东西。 是否可以在条形图包含间隙的地方构建水平条形图? 类似于以
我想更改限制线顶部图表的颜色。我们现在已经实现了更改跨越限制线的图表条的颜色。但我想做的是改变图表跨越限制线的颜色。 最佳答案 我假设您在此处使用BarChart 事实证明this response正
我读过各种教程,但大多数都展示了相同的示例。图例数组放入以下构造函数中: new PieData(legendValues, IPieDataSet dataSet) 但是 PieData 没有这个构
这是我的饼图,我想将这些数据移动到我想要的位置,那么我该怎么做呢? protected void onCreate(Bundle savedInstanceState) { super.onC
example 我已经尝试过了。请帮助我..我真的不知道。我认为这与 Canvas 类有关。 自定义线图渲染器 我觉得颜色不是根据x值填充的,而是一次性填充的。 这很难,因为我不习惯 Canvas 。
我正在使用“implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'”这个库来创建饼图,并且我手动输入的饼图条目值显示不正确。我按照教程进行操
在MpAndroidChart中使用饼图时,成功绘制了饼图。当尝试向图表图例添加自定义标签和颜色时。标签正在更新,但所有图例的图例颜色均为蓝色。 ArrayList PieEntryLabels
这是条形图的图片。正如您所看到的,存在对齐问题,条形图未与标签对齐,特别是在中间部分。另外,我希望底部轴显示 10 的条形,而不是 1.2、1.4、1.6 等,因为永远不会有任何小数,所以它没有用。我
我是一名优秀的程序员,十分优秀!