2016-06-28 15 views
-1

私はウェブサービスからデータをフェッチし、チャートセットに値を設定しようとすると、sqliteのリアルタイムデータを使用して値を設定しながら、mpandroidチャートを使用してBarChart(グループ化されたデータセット)チャートを作成しようとしています。ここでchartdataオブジェクト の値は、私のコードです:データセットエントリはMpAndroidチャートのx軸よりも長いですか?

import android.database.Cursor; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.CursorLoader; 
import android.support.v4.content.Loader; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.android.volley.RequestQueue; 
import com.github.mikephil.charting.charts.BarChart; 
import com.github.mikephil.charting.data.BarData; 
import com.github.mikephil.charting.data.BarDataSet; 
import com.github.mikephil.charting.data.BarEntry; 
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; 

import java.util.ArrayList; 
import java.util.List; 

import SqliteDatabase.TimeTrackerDAO; 
import model.DashboardModelCommercial; 

/** 
* Created by 4264 on 27-06-2016. 
*/ 
public class DashBoardCommercial extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>{ 
    RequestQueue mrequestqueue; 
    TimeTrackerDAO timeTrackerDAO; 
    private int dashboard = 1; 
    Cursor c; 
    List<DashboardModelCommercial>listobj; 
    View view; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.fragment_commercial, container, false); 

     BarChart chart = (BarChart)view. findViewById(R.id.chart); 
     timeTrackerDAO=new TimeTrackerDAO(getContext().getApplicationContext()); 
     listobj=new ArrayList<>(); 

     getLoaderManager().initLoader(dashboard, null, this); 
     return view; 
    } 



    /*private ArrayList<IBarDataSet> getDataSet() { 
     ArrayList<IBarDataSet> dataSets = null; 

     ArrayList<BarEntry> valueSet1 = new ArrayList<>(); 
     BarEntry v1e1 = new BarEntry(110.000f, 0); // Jan 
     valueSet1.add(v1e1); 
     BarEntry v1e2 = new BarEntry(40.000f, 1); // Feb 
     valueSet1.add(v1e2); 
     BarEntry v1e3 = new BarEntry(60.000f, 2); // Mar 
     valueSet1.add(v1e3); 
     BarEntry v1e4 = new BarEntry(30.000f, 3); // Apr 
     valueSet1.add(v1e4); 
     BarEntry v1e5 = new BarEntry(90.000f, 4); // May 
     valueSet1.add(v1e5); 
     BarEntry v1e6 = new BarEntry(100.000f, 5); // Jun 
     valueSet1.add(v1e6); 

     ArrayList<BarEntry> valueSet2 = new ArrayList<>(); 
     BarEntry v2e1 = new BarEntry(150.000f, 0); // Jan 
     valueSet2.add(v2e1); 
     BarEntry v2e2 = new BarEntry(90.000f, 1); // Feb 
     valueSet2.add(v2e2); 
     BarEntry v2e3 = new BarEntry(120.000f, 2); // Mar 
     valueSet2.add(v2e3); 
     BarEntry v2e4 = new BarEntry(60.000f, 3); // Apr 
     valueSet2.add(v2e4); 
     BarEntry v2e5 = new BarEntry(20.000f, 4); // May 
     valueSet2.add(v2e5); 
     BarEntry v2e6 = new BarEntry(80.000f, 5); // Jun 
     valueSet2.add(v2e6); 


     ArrayList<BarEntry> valueSet3 = new ArrayList<>(); 
     BarEntry v2e= new BarEntry(150.000f, 0); // Jan 
     valueSet3.add(v2e); 
     BarEntry v = new BarEntry(90.000f, 1); // Feb 
     valueSet3.add(v); 
     BarEntry vv = new BarEntry(120.000f, 2); // Mar 
     valueSet3.add(vv); 
     BarEntry vvv = new BarEntry(60.000f, 3); // Apr 
     valueSet3.add(vvv); 
     BarEntry vvvv = new BarEntry(20.000f, 4); // May 
     valueSet3.add(vvvv); 
     BarEntry vvvvv = new BarEntry(80.000f, 5); // Jun 
     valueSet3.add(vvvvv); 

     BarDataSet barDataSet1 = new BarDataSet(valueSet1, "Brand 1"); 
     barDataSet1.setColor(Color.rgb(0, 155, 0)); 
     BarDataSet barDataSet2 = new BarDataSet(valueSet2, "Brand 2"); 
     barDataSet2.setColors(ColorTemplate.COLORFUL_COLORS); 
     BarDataSet barDataSet3 = new BarDataSet(valueSet3, "Brand 3"); 
     barDataSet3.setColors(ColorTemplate.COLORFUL_COLORS); 

     dataSets = new ArrayList<>(); 
     dataSets.add(barDataSet1); 
     dataSets.add(barDataSet2); 
     dataSets.add(barDataSet3); 
     return dataSets; 
    } 

    private ArrayList<String> getXAxisValues() { 
     ArrayList<String> xAxis = new ArrayList<>(); 
     xAxis.add("JAN"); 
     xAxis.add("FEB"); 
     xAxis.add("MAR"); 
     xAxis.add("APR"); 
     xAxis.add("MAY"); 
     xAxis.add("JUN"); 
     return xAxis; 
    } 
*/ 
    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     return new CursorLoader(getContext().getApplicationContext(), TimeTrackerDAO.DB_Timetracker_DashBoardCommercial, null, null, null, null){ 

      ForceLoadContentObserver mObserver=new ForceLoadContentObserver(); 
      @Override 
      public Cursor loadInBackground() { 


       c = timeTrackerDAO.DashBoardCommercial(); 
       if(c==null){ 
        Log.d("No Data", "No Data"); 
       } 

       else { 
        c.getCount(); 
        c.registerContentObserver(mObserver); 
        c.setNotificationUri(getContext().getContentResolver(), getUri()); 

       } 
       return c; 
      } 




     }; 


    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     BarChart chart = (BarChart) view.findViewById(R.id.chart); 
     if (getDataSet(data) 
       != null) { 

      BarData data_commercial = new BarData(getXAxisValues(), getDataSet(data)); 
      chart.setData(data_commercial); 
      chart.setDescription("My Chart"); 
      chart.animateXY(2000, 2000); 
      chart.invalidate(); 
     } 

     else { 
      Log.e("err", "err"); 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 

    } 


    private ArrayList<IBarDataSet> getDataSet(Cursor c) { 
     ArrayList<IBarDataSet> dataSets = null; 
     ArrayList<BarEntry> valueSet1 = new ArrayList<>(); 
     List<DashboardModelCommercial>liststatus=new ArrayList<>(); 

     c=timeTrackerDAO.DashBoardCommercialStatus0(); 
     if (c.moveToFirst()) { 
      do { 
       DashboardModelCommercial dashboardModelCommercial=new DashboardModelCommercial(); 
       dashboardModelCommercial.setCount(c.getInt(c.getColumnIndex(DashboardModelCommercial.Commercial_Count))); 
       liststatus.add(dashboardModelCommercial); 
      } while (c.moveToNext()); 

     } 
     for(int i=0;i<liststatus.size();i++){ 
      valueSet1.add(new BarEntry(liststatus.get(i).getCount(),i));//Status 0 
     } 

     ArrayList<BarEntry> valueSet2 = new ArrayList<>(); 

     List<DashboardModelCommercial>liststatus1=new ArrayList<>(); 
     c=timeTrackerDAO.DashBoardCommercialStatus1(); 
     if (c.moveToFirst()) { 
      do { 
       DashboardModelCommercial dashboardModelCommercial=new DashboardModelCommercial(); 
       dashboardModelCommercial.setCount(c.getInt(c.getColumnIndex(DashboardModelCommercial.Commercial_Count))); 
       liststatus1.add(dashboardModelCommercial); 
      } while (c.moveToNext()); 

     } 
     for(int i=0;i<liststatus1.size();i++){ 
      valueSet2.add(new BarEntry(liststatus1.get(i).getCount(),i));//Status 0 
     } 

     ArrayList<BarEntry> valueSet3 = new ArrayList<>(); 
     List<DashboardModelCommercial>liststatus2=new ArrayList<>(); 
     c=timeTrackerDAO.DashBoardCommercialStatus2(); 
     if(c.moveToFirst()){ 
      do { 
       { 
        DashboardModelCommercial dashboardModelCommercial=new DashboardModelCommercial(); 
        dashboardModelCommercial.setCount(c.getInt(c.getColumnIndex(DashboardModelCommercial.Commercial_Count))); 
        liststatus2.add(dashboardModelCommercial); 
       } 
      }while (c.moveToNext()); 

     } 
     for (int i=0;i<liststatus2.size();i++){ 
      valueSet3.add(new BarEntry(liststatus2.get(i).getCount(),i)); 
     } 

     ArrayList<BarEntry>valueSet4=new ArrayList<>(); 
     List<DashboardModelCommercial>liststatus3=new ArrayList<>(); 
     c=timeTrackerDAO.DashBoardCommercialStatus3(); 
     if(c.moveToFirst()){ 
      do { 
       { 
        DashboardModelCommercial dashboardModelCommercial=new DashboardModelCommercial(); 
        dashboardModelCommercial.setCount(c.getInt(c.getColumnIndex(DashboardModelCommercial.Commercial_Count))); 
        liststatus3.add(dashboardModelCommercial); 
       } 
      }while (c.moveToNext()); 

     } 
     for (int i=0;i<liststatus3.size();i++){ 
      valueSet4.add(new BarEntry(liststatus3.get(i).getCount(),i)); 
     } 



     BarDataSet barDataSet1 = new BarDataSet(valueSet1, "Not Started"); 
     barDataSet1.setColor(Color.rgb(0, 155, 0)); 
     BarDataSet barDataSet2 = new BarDataSet(valueSet2, "In Progress"); 
     barDataSet2.setColor(Color.rgb(164, 228, 251)); 
     BarDataSet barDataSet3 = new BarDataSet(valueSet3, "Completed"); 
     barDataSet3.setColor(Color.rgb(242, 247, 158)); 
     BarDataSet barDataSet4 = new BarDataSet(valueSet4, " Not Completed"); 
     barDataSet4.setColor(Color.rgb(200, 220, 170)); 


     dataSets = new ArrayList<>(); 
     dataSets.add(barDataSet1); 
     dataSets.add(barDataSet2); 
     dataSets.add(barDataSet3); 
     dataSets.add(barDataSet4); 
     return dataSets; 
    } 
    private ArrayList<String> getXAxisValues() { 
     ArrayList<String> xAxis = new ArrayList<>(); 
     xAxis.add("Billable"); 
     xAxis.add("Non Billable"); 

     return xAxis; 



    } 
} 

私はどのようにわずか数時間のために壁に頭を叩いていた場合recitifyする間違いを犯していますどこの誰かがこの問題を解決する方法をhelpmeできるかわかりません!

答えて

0

バーエントリ数とXAxisラベル数は等しくなければなりません。 getXAxisValues()メソッドで2つのXAxisラベルのみを追加しています。 BarDataSetに2つ以上のバーが表示されている可能性があります。

バーエントリと等しいXAxisラベルを追加すると、BarDataSetになります。

+0

私は同期するたびにWebサービスからBardatasetを取得していますが、Xaxis lablesは静的なので、同期を行うたびにsqliteの値全体を削除して新鮮なデータを挿入してください。 –

+0

'BarData'後で 'BarData data = mChart.getData();のように追加してください。 data.addXValue( "label"); '動的値をグラフに追加する方法については、この[example](https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/DynamicalAddingActivity.java)の116行目を確認してください。もちろん、LineChartのためのものですが、BarChartに変換するのは難しくありません。 – Madhu

関連する問題