Android 如何从数据库中获取值以绘制条形图?
嗨,我是android新手,我正在开发一个应用程序,使用achartengine显示前10个旅游目的地。问题是我使用生成的随机值来绘制图形。我需要的是连接一个使用sqlite数据浏览器创建的数据库来绘制图形。我按照下面的教程绘制图形。但是我没有找到很多关于如何连接数据库来绘制条形图的教程。请张贴任何上述链接Android 如何从数据库中获取值以绘制条形图?,android,sqlite,bar-chart,achartengine,Android,Sqlite,Bar Chart,Achartengine,嗨,我是android新手,我正在开发一个应用程序,使用achartengine显示前10个旅游目的地。问题是我使用生成的随机值来绘制图形。我需要的是连接一个使用sqlite数据浏览器创建的数据库来绘制图形。我按照下面的教程绘制图形。但是我没有找到很多关于如何连接数据库来绘制条形图的教程。请张贴任何上述链接 package flu.solutions.travelsense; import java.util.ArrayList; import java.util.List; import
package flu.solutions.travelsense;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer.Orientation;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
public class ChartActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
XYMultipleSeriesRenderer renderer = getBarDemoRenderer();
setChartSettings(renderer);
Intent intent = ChartFactory.getBarChartIntent(this, getBarDemoDataset(), renderer, Type.DEFAULT);
startActivity(intent);
}
public Intent createIntent()
{
String[] titles = new String[] { "Top 10 Destinations", " " };
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 8, 6, 4, 6, 7, 7, 9, 5, 7, 8, 8 });
values.add(new double[] {});
int[] colors = new int[] { Color.RED, Color.BLACK};
XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
renderer.setOrientation(Orientation.HORIZONTAL);
setChartSettings(renderer);
renderer.setXLabels(1);
renderer.setYLabels(10);
renderer.addXTextLabel(1, "Bangalore");
renderer.addXTextLabel(2, "Mysore");
renderer.addXTextLabel(3, "Chennai");
renderer.addXTextLabel(4, "Delhi");
renderer.addXTextLabel(5, "Kolkatta");
renderer.addXTextLabel(6, "Kashmir");
renderer.addXTextLabel(7, "Hyderabad");
renderer.addXTextLabel(8, "Mumbai");
renderer.addXTextLabel(9, "Kerala");
renderer.addXTextLabel(10, "Gujarat");
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++)
{
SimpleSeriesRenderer seriesRenderer = renderer.getSeriesRendererAt(i);
seriesRenderer.setDisplayChartValues(false);
}
return ChartFactory.getBarChartIntent(this, buildBarDataset(titles, values), renderer,Type.DEFAULT);
}
public XYMultipleSeriesRenderer getBarDemoRenderer() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setMargins(new int[] {20, 30, 15, 0});
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(Color.BLUE);
renderer.addSeriesRenderer(r);
r = new SimpleSeriesRenderer();
r.setColor(Color.GREEN);
renderer.addSeriesRenderer(r);
return renderer;
}
private XYMultipleSeriesDataset getBarDemoDataset() {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
final int nr = 10;
Random r = new Random();
int SERIES_NR = 2;
for (int i = 0; i < SERIES_NR; i++) {
CategorySeries series = new CategorySeries("Demo series " + (i + 1));
for (int k = 0; k < nr; k++) {
series.add(100 + r.nextInt() % 100);
}
dataset.addSeries(series.toXYSeries());
}
return dataset;
}
private void setChartSettings(XYMultipleSeriesRenderer renderer) {
renderer.setChartTitle("Chart demo");
renderer.setXTitle("x values");
renderer.setYTitle("y values");
renderer.setXAxisMin(0);
renderer.setXAxisMax(5);
renderer.setYAxisMin(0);
renderer.setYAxisMax(250);
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_chart, menu);
return true;
}
}
package flu.solutions.travelsense;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
导入org.achartengine.ChartFactory;
导入org.achartengine.chart.BarChart.Type;
导入org.achartengine.model.CategorySeries;
导入org.achartengine.model.xymultiplesseriesdataset;
导入org.achartengine.renderer.SimpleSeriesRenderer;
导入org.achartengine.renderer.XYMultipleSeriesRenderer;
导入org.achartengine.renderer.xymultipreseriesrenderer.Orientation;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.view.Menu;
公共类活动扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
XYMultipleReseriesRenderer renderer=getBarDemoRenderer();
setChartSettings(渲染器);
Intent Intent=ChartFactory.getBarChartIntent(这是getBarDemoDataset(),呈现程序,类型.DEFAULT);
星触觉(意向);
}
公共意图createIntent()
{
字符串[]标题=新字符串[]{“前10个目的地”,“”};
列表值=新的ArrayList();
添加(新的双[{8,6,4,6,7,7,9,5,7,8,8});
add(新的double[]{});
int[]colors=newint[]{Color.RED,Color.BLACK};
XYMultipleReseriesRenderer渲染器=构建渲染器(颜色);
渲染器.setOrientation(方向.水平);
setChartSettings(渲染器);
setXLabels(1);
1.setYLabels(10);
addxtlabel(1,“班加罗尔”);
addxtLabel(2,“myStore”);
addxtlabel(3,“钦奈”);
addxtlabel(4,“德里”);
addxtlabel(5,“加尔各答”);
addxtlabel(6,“克什米尔”);
addxtlabel(7,“海得拉巴”);
addxtlabel(8,“孟买”);
addXTextLabel(9,“喀拉拉邦”);
addxtlabel(10,“古吉拉特邦”);
int length=renderer.getSeriesRenderCount();
for(int i=0;i
你能告诉我我做错了什么吗。首先告诉我你的数据库在哪里 1> 它是本地的应用程序吗 2> 是否在服务器中(有多种方式访问ex:您可以发送http请求以从服务器获取数据) 3> 如果数据库位于手机的另一个应用程序中,您可以使用内容提供商访问数据 试试这个代码
public class DataBaseHelper extends SQLiteOpenHelper {
private Context mycontext;
//private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/";
private static String DB_NAME = "(datbasename).sqlite";//the extension may be .sqlite or .db
public SQLiteDatabase myDataBase;
/*private String DB_PATH = "/data/data/"
+ mycontext.getApplicationContext().getPackageName()
+ "/databases/";*/
public DataBaseHelper(Context context) throws IOException {
super(context,DB_NAME,null,1);
this.mycontext=context;
boolean dbexist = checkdatabase();
if (dbexist) {
//System.out.println("Database exists");
opendatabase();
} else {
System.out.println("Database doesn't exist");
createdatabase();
}
}
public void createdatabase() throws IOException {
boolean dbexist = checkdatabase();
if(dbexist) {
//System.out.println(" Database exists.");
} else {
this.getReadableDatabase();
try {
copydatabase();
} catch(IOException e) {
throw new Error("Error copying database");
}
}
}
private boolean checkdatabase() {
//SQLiteDatabase checkdb = null;
boolean checkdb = false;
try {
String myPath = DB_PATH + DB_NAME;
File dbfile = new File(myPath);
//checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
checkdb = dbfile.exists();
} catch(SQLiteException e) {
System.out.println("Database doesn't exist");
}
return checkdb;
}
private void copydatabase() throws IOException {
//Open your local db as the input stream
InputStream myinput = mycontext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outfilename = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myoutput = new FileOutputStream("/data/data/(packagename)/databases /(datbasename).sqlite");
// transfer byte to inputfile to outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myinput.read(buffer))>0) {
myoutput.write(buffer,0,length);
}
//Close the streams
myoutput.flush();
myoutput.close();
myinput.close();
}
public void opendatabase() throws SQLException {
//Open the database
String mypath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);
}
public synchronized void close() {
if(myDataBase != null) {
myDataBase.close();
}
super.close();
}
}
要从asset folder..读取数据库,只需加载通过数据库查询循环使用的double数组。到目前为止你尝试了什么?不,我不知道如何将数据库连接到我的应用程序。这是一个全新的问题,类似的问题的答案过于冗长,需要大量未提供的信息才能在这里得到充分处理。这里有一些关于数据库的教程:和。给他们一次机会,看看你是否能把你需要的东西拼凑起来。然后再回来查看更具体的问题。谢谢,如果有任何问题,我会尝试并返回…:)我已使用sqlite databrowser创建了一个数据库,并将该数据库复制到资产文件夹中。@AbhijitString outfilename=DB_PATH+DB_NAME;显示未使用outfilename。@Abhijit