android利用LineChart,通过mysql查询一个单位在不同时间的值;然后在一线图上生成多条曲线,请给出代码
时间: 2024-05-14 07:12:42 浏览: 18
以下是一个简单的示例代码,使用LineChartView库和MySQL数据库查询来生成一条曲线:
1. 在build.gradle文件中添加以下依赖项:
```
dependencies {
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
implementation 'mysql:mysql-connector-java:8.0.23'
}
```
2. 在layout文件中添加LineChartView:
```
<com.github.mikephil.charting.charts.LineChartView
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
3. 在Activity中查询数据库并将数据添加到LineChart中:
```
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
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.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.utils.ColorTemplate;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private LineChart chart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chart = findViewById(R.id.chart);
chart.setDrawGridBackground(false);
// 设置 x 轴
XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
xAxis.setGranularity(1f);
// 设置 y 轴
YAxis leftAxis = chart.getAxisLeft();
leftAxis.setDrawGridLines(false);
YAxis rightAxis = chart.getAxisRight();
rightAxis.setEnabled(false);
// 查询数据库
new Thread(new Runnable() {
@Override
public void run() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM data");
final List<Entry> entries1 = new ArrayList<>();
final List<Entry> entries2 = new ArrayList<>();
while (resultSet.next()) {
float x = resultSet.getFloat("time");
float y1 = resultSet.getFloat("value1");
float y2 = resultSet.getFloat("value2");
entries1.add(new Entry(x, y1));
entries2.add(new Entry(x, y2));
}
runOnUiThread(new Runnable() {
@Override
public void run() {
// 添加数据到 LineChart
LineData lineData = new LineData();
lineData.addDataSet(createDataSet(entries1, "Value1"));
lineData.addDataSet(createDataSet(entries2, "Value2"));
chart.setData(lineData);
chart.invalidate();
}
});
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
Log.e("MainActivity", e.getMessage());
}
}
}).start();
}
private LineData createDataSet(List<Entry> entries, String label) {
LineData lineData = new LineData();
LineData lineDataSet = new LineDataSet(entries, label);
lineDataSet.setLineWidth(2.5f);
lineDataSet.setCircleRadius(4.5f);
lineDataSet.setColor(ColorTemplate.getHoloBlue());
lineDataSet.setCircleColor(ColorTemplate.getHoloBlue());
lineData.addDataSet(lineDataSet);
final List<String> xValues = new ArrayList<>();
for (int i = 0; i < entries.size(); i++) {
xValues.add(String.valueOf(entries.get(i).getX()));
}
chart.getXAxis().setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return xValues.get((int) value % xValues.size());
}
});
return lineData;
}
}
```
在这个例子中,我们查询了一个名为“data”的数据库表,并将结果添加到两个不同的Entry列表中。然后,我们创建了两个LineDataSet,分别包含这两个列表中的条目,以及用于样式的一些设置。最后,我们将这两个LineDataSet添加到LineData中,并将其设置为LineChart的数据。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)