parniaznet
جمعه 15 اسفند 1393, 16:25 عصر
سلام
من تازه کار با دیتابیس رو دارم یاد میگیرم ، یک دیتابیس برای تمرین ساختم که در تصویر زیر میتونید ببینید :
http://up.vbiran.ir/uploads/32326142564931814565_Captureaaa.PNG
کلاس دیتابیسم و متدهام رو با این کد ها تعریف کردم :
package com.example.testesdatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class database extends SQLiteOpenHelper {
public final String path = "data/data/com.example.testesdatabase/databases/";
public final String Name = "database";
public SQLiteDatabase mydb;
private final Context mycontext;
public database(Context context) {
super(context, "database", null, 1);
mycontext = context;
}
@Override
public void onCreate(SQLiteDatabase arg0) {
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public void useable() {
boolean checkdb = checkdb();
if (checkdb) {
} else {
this.getReadableDatabase();
try {
copydatabase();
}
catch (IOException e) {
}
}
}
public void open() {
mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void close() {
mydb.close();
}
public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLException e) {
}
return db != null ? true : false;
}
public void copydatabase() throws IOException {
OutputStream myOutput = new FileOutputStream(path + Name);
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(Name);
while ((lenght = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
public String namayesh(int row , int field , String table){
android.database.Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table , null);
Cursor.moveToPosition(row);
String str = Cursor.getString(field);
return str;
}
public Integer shomaresh_field(String table,String field){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by "+field, null);
int i = Cursor.getCount();
return i ;
}
public String namayesh_fasl(String table , int row){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by dastebandi", null);
Cursor.moveToPosition(row);
String s = Cursor.getString(1);
return s ;
}
public Integer shomaresh_dastan (String table , String dastebandi){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" where dastebandi='"+dastebandi+"' group by name", null);
int s = Cursor.getCount();
return s;
}
}
در اکتیویتی اصلی یک دکمه قرار دادم که وقتی روش کلیک میشه بره به اکتیویتی دسته بندی ها و یک لیست ویو از دسته بندی ها رو به من نشون بده.
کد های اکتیویتی دسته بندی هام رو هم بدین صورت تعریف کردم :
package com.example.testesdatabase;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class Dastebandiha extends ListActivity{
private database db;
private String[] Name;
private String[] Teedad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dastebandiha);
db = new database(this);
refresher();
setListAdapter(new AA());
}
class AA extends ArrayAdapter<String>{
public AA(){
super(Dastebandiha.this,R.layout.raw_dastebandiha, Name);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater in = getLayoutInflater();
View row = in.inflate(R.layout.raw_dastebandiha, parent,false);
TextView name = (TextView) row.findViewById(R.id.name_season);
TextView teedad = (TextView) row.findViewById(R.id.teedad_dastan);
name.setText(Name [position]);
teedad.setText(Teedad [position]);
return (row);
}
}
private void refresher(){
db.open();
int save = db.shomaresh_field("testesajad", "dastebandi");
Name = new String[save];
Teedad = new String[save];
for (int i = 0; i <save; i++) {
Name[i] = db.namayesh_fasl("testesajad", i);
Teedad[i] = db.shomaresh_dastan("testesajad", Name[i].toString())+"";
}
db.close();
}
}
یک فایل xml هم ساختم که دوتا تکست ویو توش قرار دادم برای نحوه نمایش لیست ویو با اسم raw_dastebandiha
وقتی برنامه رو اجرا می کنم ، وقتی روی دکمه کلیک میکنم که بره به اکتیویتی بعدی ، فورس کلوز میده.
این کدهایی که من نوشتم کجاش مشکل داره که باعث این ارور میشه؟
ممنون میشم راهنمایی کنید
من تازه کار با دیتابیس رو دارم یاد میگیرم ، یک دیتابیس برای تمرین ساختم که در تصویر زیر میتونید ببینید :
http://up.vbiran.ir/uploads/32326142564931814565_Captureaaa.PNG
کلاس دیتابیسم و متدهام رو با این کد ها تعریف کردم :
package com.example.testesdatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class database extends SQLiteOpenHelper {
public final String path = "data/data/com.example.testesdatabase/databases/";
public final String Name = "database";
public SQLiteDatabase mydb;
private final Context mycontext;
public database(Context context) {
super(context, "database", null, 1);
mycontext = context;
}
@Override
public void onCreate(SQLiteDatabase arg0) {
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public void useable() {
boolean checkdb = checkdb();
if (checkdb) {
} else {
this.getReadableDatabase();
try {
copydatabase();
}
catch (IOException e) {
}
}
}
public void open() {
mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void close() {
mydb.close();
}
public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLException e) {
}
return db != null ? true : false;
}
public void copydatabase() throws IOException {
OutputStream myOutput = new FileOutputStream(path + Name);
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(Name);
while ((lenght = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
public String namayesh(int row , int field , String table){
android.database.Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table , null);
Cursor.moveToPosition(row);
String str = Cursor.getString(field);
return str;
}
public Integer shomaresh_field(String table,String field){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by "+field, null);
int i = Cursor.getCount();
return i ;
}
public String namayesh_fasl(String table , int row){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" group by dastebandi", null);
Cursor.moveToPosition(row);
String s = Cursor.getString(1);
return s ;
}
public Integer shomaresh_dastan (String table , String dastebandi){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table+" where dastebandi='"+dastebandi+"' group by name", null);
int s = Cursor.getCount();
return s;
}
}
در اکتیویتی اصلی یک دکمه قرار دادم که وقتی روش کلیک میشه بره به اکتیویتی دسته بندی ها و یک لیست ویو از دسته بندی ها رو به من نشون بده.
کد های اکتیویتی دسته بندی هام رو هم بدین صورت تعریف کردم :
package com.example.testesdatabase;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class Dastebandiha extends ListActivity{
private database db;
private String[] Name;
private String[] Teedad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dastebandiha);
db = new database(this);
refresher();
setListAdapter(new AA());
}
class AA extends ArrayAdapter<String>{
public AA(){
super(Dastebandiha.this,R.layout.raw_dastebandiha, Name);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater in = getLayoutInflater();
View row = in.inflate(R.layout.raw_dastebandiha, parent,false);
TextView name = (TextView) row.findViewById(R.id.name_season);
TextView teedad = (TextView) row.findViewById(R.id.teedad_dastan);
name.setText(Name [position]);
teedad.setText(Teedad [position]);
return (row);
}
}
private void refresher(){
db.open();
int save = db.shomaresh_field("testesajad", "dastebandi");
Name = new String[save];
Teedad = new String[save];
for (int i = 0; i <save; i++) {
Name[i] = db.namayesh_fasl("testesajad", i);
Teedad[i] = db.shomaresh_dastan("testesajad", Name[i].toString())+"";
}
db.close();
}
}
یک فایل xml هم ساختم که دوتا تکست ویو توش قرار دادم برای نحوه نمایش لیست ویو با اسم raw_dastebandiha
وقتی برنامه رو اجرا می کنم ، وقتی روی دکمه کلیک میکنم که بره به اکتیویتی بعدی ، فورس کلوز میده.
این کدهایی که من نوشتم کجاش مشکل داره که باعث این ارور میشه؟
ممنون میشم راهنمایی کنید