2016-08-10 4 views
1

У меня есть пробл с моей диаграммой. Сам график показывает, но строка, отображающая значения, не отображается. Я получаю значения от DB. Я добавляю некоторые изображения ниже и код для моей деятельности:Android - MPAndroidChart - LineChart не показывает строку

Первое я вижу enter image description here

И уже через несколько секунд ... enter image description here

Мой код:

public class SensorDataActivity extends AppCompatActivity { 

RelativeLayout mainLayout; 

SensorDataRequest_Temperature sensorDataRequest_temperature; 
ArrayList<Entry> temperature_data_entry; 
ArrayList<String> temperature_dates_entry; 
XAxis xAxis; 
YAxis leftAxis; 
LineChart mChart; 

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

    mainLayout = (RelativeLayout) findViewById(R.id.mainLayout); 

    mChart =(LineChart) findViewById(R.id.mChart); 

    if (mChart != null) { 
     mChart.setNoDataTextDescription("press anywhere to refresh or wait"); 
    mChart.setHighlightPerTapEnabled(true); 
    mChart.setTouchEnabled(false); 
    mChart.setDrawGridBackground(false); 
    mChart.setDrawBorders(false); 
    mChart.setBackgroundColor(Color.WHITE); 
    mChart.setHighlightPerTapEnabled(true); 
    // disable the right axis's 
    mChart.getAxisRight().setEnabled(false); 
} 

addResponseListener_temperature(); 
queueInit(); 
} 

/* 
    Response Listener for the Temperature table Request. 
    used in case "Month" or "Week" was clicked in spinner. 
*/ 
private void addResponseListener_temperature() { 
    Response.Listener<String> responseListener = new Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     Log.d("Response",response); 
     JSONArray json; 
     try { 
      json = new JSONArray(response); 
      Log.i("log_json",json.get(1).toString()); 

      temperature_data_entry = new ArrayList<>(); 
      temperature_dates_entry = new ArrayList<>(); 

      for (int i=0; i<json.length(); i++) 
      { 
       JSONArray tempJ = new JSONArray(json.get(i).toString()); 
       //Log.i("tempJ",tempJ.toString()); 

       // get the temperature values. 
       temperature_data_entry.add(new Entry(Integer.valueOf(tempJ.getString(1)) ,i)); 
       // get the temperature timestamps. 
       temperature_dates_entry.add(tempJ.getString(0)); 
      } 

      xAxis = mChart.getXAxis(); 
      xAxis.setTextSize(12f); 
      xAxis.setDrawGridLines(false); 
      xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
      xAxis.setEnabled(true); 
      xAxis.setAxisMinValue(0); 
      xAxis.setValueFormatter(new AxisValueFormatter() { 

       private SimpleDateFormat mFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

       @Override 
       public String getFormattedValue(float value, AxisBase axis) { 
        String timeStamp = "none"; 
        try { 
         Date date = mFormat.parse(temperature_dates_entry.get((int)value)); 
         timeStamp = mFormat.format(new Date(date.getTime())); 

        } catch (ParseException e) { 
         e.printStackTrace(); 
        } 
        return timeStamp; 
       } 

       @Override 
       public int getDecimalDigits() { 
        return 0; 
       } 
      }); 

      leftAxis = mChart.getAxisLeft(); 
      leftAxis.setAxisMaxValue(60f); 
      leftAxis.setTextSize(20f); 
      leftAxis.setDrawAxisLine(false); 
      leftAxis.setEnabled(true); 

      LineDataSet set1 = new LineDataSet(temperature_data_entry,"temperature data"); 
      set1.setAxisDependency(YAxis.AxisDependency.LEFT); 
      set1.setColor(Color.BLUE); 
      set1.setDrawCircles(false); 
      set1.setDrawValues(true); 
      set1.setLineWidth(3f); 
      set1.setValues(temperature_data_entry); 
      set1.setValueTextColor(Color.RED); 
      set1.setVisible(true); 


      LineData data = new LineData(set1); 
      mChart.setData(data); // set the data and list of lables into chart 
      data.setValueTextColor(Color.RED); 
      data.setDrawValues(true); 

      mChart.invalidate(); 
      mChart.notifyDataSetChanged(); 

     }catch (JSONException je) 
     { 
      Log.e("JSONException",je.getMessage()); 
     } 

    } 
}; 
// initiating the SensorDataRequest object with the appropriate parameters. 
sensorDataRequest_temperature = new SensorDataRequest_Temperature(
     //userDetails.get("raspberry_product_key"), 
     TEMP_RASP_ID, 
     responseListener); 
} 

/* 
    initiates the RequestQueue object with the activity context and 
    adds all the table's request's to the queue. 
*/ 
private void queueInit() { 
    // creating a RequestQueue object and providing it with the context of this activity. 
    RequestQueue queue = Volley.newRequestQueue(SensorDataActivity.this); 
    // adding our SensorDataRequest object to our RequestQueue object. 
    queue.add(sensorDataRequest_temperature); 

} 


@Override 
protected void onResume() { 
    mChart.invalidate(); 
    mChart.notifyDataSetChanged(); 
    super.onResume(); 
} 

ответ

1

Судя по предоставленному вами коду, вы используете последнюю версию библиотеки MPAndroidChart 3.0.0-beta1. Там было внесено множество изменений.

В вашем случае вероятная проблема заключается в том, что ваши записи неправильно сконструированы. Конструктор записи изменился и теперь равен Entry(float x, float y), поэтому вам нужно сначала указать значение x, а затем значение y. Изменение кода это должно работать (просто переключают значения):

// Get the temperature values. 
temperature_data_entry.add(new Entry(i, Integer.valueOf(tempJ.getString(1)))); 
+0

Он использует его правильно (т. Е. Так же, как вы упомянули) – suku

0

Я думаю, что проблема в том, что этот код:

@Override 
protected void onResume() { 
mChart.invalidate(); 
mChart.notifyDataSetChanged(); 
super.onResume(); 
} 

Вы должны сделать mChart.invalidate(); только после набора данных изменяется/добавлено , У меня была такая же проблема, когда я использовал invalidate перед добавлением набора данных. Поэтому я мог видеть данные, но он никогда не был заселен. Когда я добавил эту строку после добавления набора данных, она отлично работала.