저는 AChartEngine을 처음 사용합니다. 원격 데이터베이스에서 JSON 데이터를 검색하고 AchartEngine Bar Chart에 연결하려고합니다. 데이터를 성공적으로 가져올 수 있습니다. 그러나 그래프에 연결하는 데 어려움이 있습니다. 차트에 내 데이터가 없습니다. 난 하드 코드 또는 임의의 숫자를 넣어, 차트에 표시하지만 데이터베이스에서 데이터를 포함하려고하면 빈 페이지를 보여줍니다. 나는 내 코드를 게시하고있다. 어떤 도움을 주시면 감사하겠습니다. "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();
}**/
}
이
D/날짜를 자궁강 때 데이터가 모습입니다 :: 2015년 7월 29일 (수요일) 오전 1시 35분
D/금액 : 221.06
D/날짜 : 2015년 11월 25일 (수요일) 오후 3시 27분
D/금액 : 275.7
나는 이것을했지만 여전히 차트가 보이지 않습니다. 데이터를 가져올 수는 있지만 차트는 여전히 비어 있습니다. – Shirin