2017-01-11 13 views
2

私はAndroid開発の初心者で、クラスのためのアプリをやっています。 JSONデータをテキストやグラフとしてアプリケーションに表示することです。私はRetrofit 2を使用して1つのアクティビティにテキストとして表示していますが、グラフに問題があります。私はそれを行う方法がわかりません(私はまだ学習しています。チュートリアルから)。データは、この(これは一例です)のように見えます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を見つけたが、私は次に何をすべきかわかりません。データで2つの配列リストを作成する必要がありますか(それは答え、それを行う方法です)か、時間と値を直接取るより良い解決法があり、グラフは時間とともにX軸とY軸として値をプロットします。

答えて

1

ここにあなたの解決策があります。

まずあなたは、コードの下にJavaコード

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" /> 

そして今を追加するには、XMLで今の依存関係

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

に追加する必要があります

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で発生します。また、ボタンクリックで呼び出すのではなく、onCreateにdrawChart()を追加することはできますか? – mustangws

+0

TAGとmv(mChart.setMarkerView(mv)のmv)も赤です。 – mustangws

関連する問題