2017-01-11 2 views
2

저는 안드로이드 개발에서 총 초보자이며 수업을 위해 앱을 만들고 있습니다. 필자의 주장은 JSON 데이터를 텍스트 및 그래프로 표시하는 것입니다. Retrofit 2를 사용하여 하나의 활동에 텍스트로 표시하고 있지만 그래프에 문제가 있습니다. 어떻게하는지는 모르지만 (지금도 배우고 있습니다. 지금까지 한 모든 것은 도움이되었습니다.) 자습서에서).안드로이드 JSON 데이터로 라인 그래프를 그려야합니다.

{ 
"id": 1, 
"measurements": [{ 
    "time": "18:25:43", 
    "value": 25.4 
}, 
{ 
    "time": "18:35:43", 
    "value": 27.3 
}, 
{ 
    "time": "18:45:21", 
    "value": 26.3 
}, 
{ 
    "time": "18:55:43", 
    "value": 25.2 
}, 
{ 
    "time": "19:05:43", 
    "value": 25.2 
}, 
{ 
    "time": "19:15:43", 
    "value": 25.2 
}, 
{ 
    "time": "19:25:43", 
    "value": 24.9 
}] 
} 

내가 this을 발견했습니다,하지만 난 다음에 무엇을 확실하지 않다 :

데이터는 (이 예이다)과 같다. 데이터가있는 배열 목록을 두 개 만들어야합니까 (해답이 무엇인지, 어떻게 수행 할 수 있습니까?) 아니면 시간과 값이 직접 걸리는 더 나은 솔루션이 있으며 시간이 X 축과 Y 축인 그래프로 그려집니다.

답변

1

다음은 해결책입니다.

먼저 당신이

dependencies{ 
    compile 'com.github.PhilJay:MPAndroidChart:v2.2.3' 
    ....} 

는 이제 XML에서 자바 코드에 코드 아래

ArrayList<Entry> x; 
ArrayList<String> y; 
private LineChart mChart; 
public String TAG = "YOUR CLASS NAME"; 

내부에서 onCreate 방법

을 지금

<com.github.mikephil.charting.charts.LineChart 
       android:id="@+id/chart1" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 

그리고 추가 종속성에 추가해야

x = new ArrayList<Entry>(); 
    y = new ArrayList<String>(); 
    mChart = (LineChart) view.findViewById(R.id.chart1); 
    mChart.setDrawGridBackground(false); 
    mChart.setDescription(""); 
    mChart.setTouchEnabled(true); 
    mChart.setDragEnabled(true); 
    mChart.setScaleEnabled(true); 
    mChart.setPinchZoom(true); 
    mChart.setMarkerView(mv); 
    XAxis xl = mChart.getXAxis(); 
    xl.setAvoidFirstLastClipping(true); 
    YAxis leftAxis = mChart.getAxisLeft(); 
    leftAxis.setInverted(true); 
    YAxis rightAxis = mChart.getAxisRight(); 
    rightAxis.setEnabled(false); 
    Legend l = mChart.getLegend(); 
    l.setForm(Legend.LegendForm.LINE); 

버튼 클릭시이 메소드를 호출하십시오.

private void drawChart() { 

    String tag_string_req = "req_chart"; 

    StringRequest strReq = new StringRequest(Request.Method.POST, "YOUR URL", 
      new Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 

        Log.d(TAG, "Response: " + response); 

        try { 
         JSONObject jsonObject = new JSONObject(response); 
         String id = jsonObject.getString("id"); 
         JSONArray jsonArray = jsonObject.getJSONArray("measurements"); 
         for (int i = 0; i < jsonArray.length(); i++) { 

          int value = jsonObject.getInt("value"); 
          String date = jsonObject.getString("time"); 
          x.add(new Entry(value, i)); 
          y.add(date); 

         } 
         LineDataSet set1 = new LineDataSet(x, "NAV Data Value"); 
         set1.setLineWidth(1.5f); 
         set1.setCircleRadius(4f); 
         LineData data = new LineData(y, set1); 
         mChart.setData(data); 
         mChart.invalidate(); 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Error: " + error.getMessage()); 
     } 
    }); 
    strReq.setRetryPolicy(new RetryPolicy() { 

     @Override 
     public void retry(VolleyError arg0) throws VolleyError { 
     } 

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

     @Override 
     public int getCurrentRetryCount() { 
      return 0; 
     } 
    }); 
    strReq.setShouldCache(false); 
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
} 

의 AppController 코드는 여기

public class AppController extends Application { 
public static final String TAG = AppController.class.getSimpleName(); 
private RequestQueue mRequestQueue; 
private static AppController mInstance; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    mInstance = this; 
} 

    public static synchronized AppController getInstance() { 
    return mInstance; 
} 

public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     mRequestQueue = Volley.newRequestQueue(getApplicationContext()); 
    } 
    return mRequestQueue; 
} 

public <T> void addToRequestQueue(Request<T> req, String tag) { 
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); 
    getRequestQueue().add(req); 
} 
} 

희망이 당신을 도울 것입니다. 문제가 있으면 알려주세요.

+0

처음에는 문제가 해결되지 않았습니다. com.github.PhilJay : MPAndroidChart : v2.2.3 – mustangws

+0

그래, 그 문제에 대한 해결책을 찾았으나 이제는 "방법 또는 변수를 해결할 수 없음" . 그것은 StringRequest, Method, Listener, ErrorListener, VolleyError, getMessage, setRetryPolicy, RetryPolicy, setShouldCache, AppController에서 발생합니다. 또한 buttonChar()을 단추를 클릭 할 때 호출하는 대신 onCreate에 넣을 수 있습니까? – mustangws

+0

TAG 및 mv (mChart.setMarkerView (mv)의 mv)도 빨간색입니다. – mustangws

관련 문제