2016-11-25 48 views
0

我是AChartEngine的新手。我試圖從遠程數據庫中檢索JSON數據並將其插入到AchartEngine條形圖中。我可以成功獲取數據。但是,我很難將其插入圖表中。該圖表沒有獲取我的數據。當我硬編碼或放置一個隨機數時,它顯示在圖表上,但是當我嘗試從數據庫中包含數據時,它會顯示一個空白頁。我發佈我的代碼。任何幫助,將不勝感激。我試圖在「X」軸上顯示日期,並在「Y」軸上顯示數量。AChartEngine不顯示來自遠程數據庫的圖形

public class BarGraphActivity extends AppCompatActivity { 

private GraphicalView mChart; 
private TimeSeries transactionSeries; 
private XYMultipleSeriesDataset dataset; 
private XYSeriesRenderer transactionRenderer; 
private XYMultipleSeriesRenderer multiRenderer; 

//JSON node name 
private static final String TAG_TYPE = "type"; 
private static final String TAG_AMOUNT = "amount"; 
private static final String TAG_CATEGORY = "category"; 
private static final String TAG_DESC = "desc"; 
private static final String TAG_DATE = "date"; 
private static final String TAG_SUCCESS = "success"; 
static final String FETCH_URL = "my_url"; 


String amount = null; 
String desc = null; 
String type = null; 
String date = null; 
String category = null; 
ProgressDialog pDialog; 

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

    //showTransaction(); 
    //settingup bar chart 


    //start plotting chart 
    new ChartTask().execute(); 
} 

public void setupChart(){ 

    //creating an Timeseries for Transactions 
    transactionSeries = new TimeSeries("Transactions"); 

    //creating a dataset to hold each series 
    dataset = new XYMultipleSeriesDataset(); 
    //adding transactionseries to the dataset 
    dataset.addSeries(transactionSeries); 

    //Creating a XYMultipleSeriesRenderer to customize transaction series 
    transactionRenderer = new XYSeriesRenderer(); 
    transactionRenderer.setColor(Color.GREEN); 
    //transactionRenderer.setPointStyle(PointStyle.CIRCLE); 
    transactionRenderer.setFillPoints(true); 
    transactionRenderer.setLineWidth(4); 
    transactionRenderer.setDisplayChartValues(false); 

    // Creating a XYMultipleSeriesRenderer to customize the whole chart 
    multiRenderer = new XYMultipleSeriesRenderer(); 

    multiRenderer.setChartTitle("Transaction Trends"); 
    multiRenderer.setXTitle("Date"); 
    multiRenderer.setYTitle("Amount"); 
    //multiRenderer.setZoomButtonsVisible(true); 

    multiRenderer.setXAxisMin(0); 
    multiRenderer.setXAxisMax(10); 

    multiRenderer.setYAxisMin(0); 
    multiRenderer.setYAxisMax(10); 

    multiRenderer.setBarSpacing(2); 

    // Adding transactionRenderer to multipleRenderer 
    // Note: The order of adding dataseries to dataset and renderers to multipleRenderer 
    // should be same 
    multiRenderer.addSeriesRenderer(transactionRenderer); 

    // Getting a reference to LinearLayout of the bar graph activity Layout 
    LinearLayout chartContainer = (LinearLayout) findViewById(R.id.chart_container); 

    mChart = (GraphicalView) ChartFactory.getBarChartView(getBaseContext(), dataset, multiRenderer, BarChart.Type.DEFAULT); 

    // Adding the Line Chart to the LinearLayout 
    chartContainer.addView(mChart); 
} 

private class ChartTask extends AsyncTask<String, String, String> { 

    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(BarGraphActivity.this); 
     pDialog.setMessage("Loading data. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 
    @Override 
    protected String doInBackground(String... String) { 
     //int i = 0; 
     //String[] amount = new String[]; 
     try { 
      URL url = new URL(FETCH_URL); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setRequestMethod("GET"); 
      urlConnection.connect(); 

      int responsecode = urlConnection.getResponseCode(); 

      if(responsecode == HttpURLConnection.HTTP_OK){ 
       BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
       StringBuilder sb = new StringBuilder(); 
       String line; 
       while ((line = br.readLine()) != null){ 
        sb.append(line); 
       } 
       br.close(); 
       return sb.toString(); 
      } 

     } catch (ProtocolException e) { 
      e.printStackTrace(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     pDialog.dismiss(); 


    try { 
     //get JSONObject from JSONArray of String 
     JSONArray result = new JSONArray(s); 
     JSONObject jsonObject = null; 
     String[] values = new String[2]; 
     //loop through the array and break the JSONObject into String 
     for(int i = 0; i<result.length(); i++) { 

      jsonObject = result.getJSONObject(i); 
      amount = jsonObject.getString(TAG_AMOUNT); 
      desc = jsonObject.getString(TAG_DESC); 
      type = jsonObject.getString(TAG_TYPE); 
      //getting date as string from database 
      date = jsonObject.getString(TAG_DATE); 
      //System.out.println(date); 
      //write it in the db in a different format like Wednesday, July 12, 2016 12:00 PM 
      SimpleDateFormat readFormat = new SimpleDateFormat("EEEE, MMMM dd, yyyy hh:mm a"); 
      //SimpleDateFormat writeFormat = new SimpleDateFormat("MMMM dd, yyyy"); 

      //check it date string for null or empty string or else it will give Unparseable date: "" (at offset 0) error 
      if(!date.equalsIgnoreCase("")) { 
       try { 
        Date dt = readFormat.parse(date); //parse the date string in the read format 
        //String dtStr = writeFormat.format(dt); 

        //dt = writeFormat.parse(dtStr); 
        //System.out.println(dt); 
        Log.d("Date: ", date); 
        double amt = Double.valueOf(amount.replace(",", "")); 
        //System.out.println(amt); 
        Log.d("Amount: ", String.valueOf(amt)); 

        setupChart(); 
        transactionSeries.add(dt.getTime(),amt); 
        mChart.repaint(); 
       } catch (ParseException e) { 
        e.printStackTrace(); 
       } 
      } 
      else { 
       return; 
      } 
     } 

    } 
    catch (JSONException e){ 
     e.printStackTrace(); 
    } //catch (ParseException e) { 
     // e.printStackTrace(); 
    // } 

    } 

    // Plotting generated data in the graph 
    /**@Override 
    protected void onProgressUpdate(Object... values) { 
     transactionSeries.add((Double) values[0], (Double) values[1]); 
     mChart.repaint(); 
    }**/ 
} 

這裏是如何retrived

d /日期當數據看起來::週三,2015年7月29日上午01時35分
d /金額:: 221.06
d /日期:: 週三,2015年11月25日下午3時27
d /金額:: 275.7

回答

0

這裏的方法「setupChart()」,在通過asynctask「new ChartTask()。execute()」從webservice獲取值之前調用。所以,沒有獲得價值來繪製圖表,或者可以說繪製後的價值。

解決方案:請致電的AsyncTask onpostexecute方法 「()setupChart」。

+0

我做到了這一點,但仍然沒有顯示圖表。我可以檢索數據,但圖表仍然是空的。 – Shirin

相關問題