有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检索JSON数据并使用MPAndroidChart绘制折线图,以及在安卓上的改进

我正在尝试使用改型检索数据,并使用MPAndroidChart将其放置。我可以从JSON中检索数据,还可以在一个线图上手动添加一个定义好的x,y(例如,x=1,y=1)

然而,我仍在学习MPLineChart和(特别是使用折线图),并开始学习如何将这两个概念结合起来-检索y1和y2数据,并使用这些数据绘制折线图。有谁能告诉我如何检索JSON数据和绘图

以下是我到目前为止的情况:

主要活动:

import com.github.mikephil.charting.charts.LineChart;
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 {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            drawLineChart();
        }

        private void drawLineChart() {
            LineChart lineChart = findViewById(R.id.chart);
            List<Entry> lineEntries = getDataSet();
            LineDataSet lineDataSet = new LineDataSet(lineEntries, getString(R.string.data1));
            lineDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);
            lineDataSet.setHighlightEnabled(true);
            lineDataSet.setLineWidth(2);
            lineDataSet.setColor(Color.RED);
            lineDataSet.setCircleColor(Color.YELLOW);
            lineDataSet.setCircleRadius(6);
            lineDataSet.setCircleHoleRadius(3);
            lineDataSet.setDrawHighlightIndicators(true);
            lineDataSet.setHighLightColor(Color.RED);
            lineDataSet.setValueTextSize(12);
            lineDataSet.setValueTextColor(Color.DKGRAY);

            LineData lineData = new LineData(lineDataSet);
            lineChart.getDescription().setTextSize(12);
            lineChart.setDrawMarkers(true);
            lineChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTH_SIDED);
            lineChart.animateY(1000);
            lineChart.getXAxis().setGranularityEnabled(true);
            lineChart.getXAxis().setGranularity(1.0f);
            lineChart.getXAxis().setLabelCount(lineDataSet.getEntryCount());
            lineChart.setData(lineData);
        }

        private List<Entry> getDataSet() {
            List<Entry> lineEntries = new ArrayList<Entry>();
            //lineEntries.add(new Entry(0, 1));
            //lineEntries.add(new Entry(1, 2));
            //lineEntries.add(new Entry(2, 3));
            //lineEntries.add(new Entry(3, 4));
            return lineEntries;
        }

    private void fetchData() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        Api api = retrofit.create(Api.class);
        Call<List<Details>> call = api.getstatus();
        call.enqueue(new Callback<List<Details>>() {
            @Override
            public void onResponse(Call<List<Details>> call, Response<List<Details>> response) {
                List<Details> adslist = response.body();

            }
            @Override
            public void onFailure(Call<List<Details>> call, Throwable t) {
                Toast.makeText(MainActivity.this, ""+t.getMessage().toString(), Toast.LENGTH_SHORT).show();
            }
        });
    }
    
    }

对于gson:

public class Details {
    @SerializedName("y1")
    @Expose
    private String y1;
    @SerializedName("y2")
    @Expose
    private String y2;
    @SerializedName("timestamps")
    @Expose
    private String timestamps;

    public String getY1() {
        return y1;
    }

    public void setY1(String y1) {
        y1 = y1;
    }

    public String getY2() {
        return y2;
    }

    public void setY2(String y2) {
        y2 = y2;
    }

    public String getTimestamps() {
        return timestamps;
    }

    public void setTimestamps(String timestamps) {
        timestamps = timestamps;
    }
}

对于Api:

public interface Api {
    String BASE_URL = "http://..";
    @GET("Api.php")
    Call<List<Details>> getstatus();
}

数据如下:

[{"y1":"40","y2":"80","timestamps":"2020-1-10 18:00:34"},{"y1":"50","y2":"60","timestamps":"2020-1-10 17:40:20"},{"y1":"70","y2":"30","timestamps":"2020-1-10 17:20:34"}]

共 (1) 个答案

  1. # 1 楼答案

    像这样更改getDataSet方法

    private void getDataSet(List<Details> list) {
            List<Entry> lineEntries = new ArrayList<Entry>();
            if(list!=null){
    
             for(Details details : list){
    
               lineEntries.add(new Entry(Float.parseFloar(details.getY1()),Float.parseFloat(details.getY2()));
    
               }
            }
            
    
    LineDataSet lineDataSet = new LineDataSet(lineEntries, getString(R.string.data1));
                lineDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);
                lineDataSet.setHighlightEnabled(true);
                lineDataSet.setLineWidth(2);
                lineDataSet.setColor(Color.RED);
                lineDataSet.setCircleColor(Color.YELLOW);
                lineDataSet.setCircleRadius(6);
                lineDataSet.setCircleHoleRadius(3);
                lineDataSet.setDrawHighlightIndicators(true);
                lineDataSet.setHighLightColor(Color.RED);
                lineDataSet.setValueTextSize(12);
                lineDataSet.setValueTextColor(Color.DKGRAY);
    
                LineData lineData = new LineData(lineDataSet);
                lineChart.getDescription().setTextSize(12);
                lineChart.setDrawMarkers(true);
                lineChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTH_SIDED);
                lineChart.animateY(1000);
                lineChart.getXAxis().setGranularityEnabled(true);
                lineChart.getXAxis().setGranularity(1.0f);
                lineChart.getXAxis().setLabelCount(lineDataSet.getEntryCount());
                lineChart.setData(lineData);
    
    
        }
    

    然后
    decalre your line in oncreate method <br>
    LineChart lineChart = findViewById(R.id.chart);<br>
    

    并从fetchData onResposne()方法调用这个getDataSet(List List)方法