Galera, estou com alguns erros… e estou com uma certa dificuldade em fazer um projeto com banco de dados no android…
segue meu codigo e meu erro:
Classe principal:
package br.com;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
public class MainActivity extends Activity implements OnClickListener{
Button enviar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
enviar = (Button) findViewById(R.id.botao);
enviar.setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
String[] from = { BookDbHelper.C_ID, BookDbHelper.C_TITULO, BookDbHelper.C_AUTOR }; // mapeia o retorno do cursor
int[] to = {R.id.tid, R.id.ttitulo, R.id.tautor }; // lista onde serao exibidos
Cursor livros = managedQuery(BookProvider.CONTENT_URI, null, null, null, null); // retorna todos os registros cadastrados
CursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.activity_main1, livros, from, to);
ListView list = (ListView) findViewById(R.id.lslViewList);
list.setAdapter(adapter);
}
@Override
public void onClick(View v) {
Intent intent = new Intent (this, SalvarActivity.class);
startActivity(intent);
}
}
package br.com;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class BookDbHelper extends SQLiteOpenHelper{
static final String DB_NAME = "books.db";
static final int DB_VERSION = 1;
static final String TABLE = "livros";
static final String C_ID = "_id";
static final String C_TITULO = "titulo";
static final String C_AUTOR = "autor";
public BookDbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
String sql = "CREATE TABLE " + TABLE + "(" +
C_ID + "integer primary key autoincrement, " +
C_TITULO + "text, "+
C_AUTOR + "text)";
db.execSQL(sql);
} catch (Exception e) {
Log.e("onCreate", e.getMessage());
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.execSQL("drop table if exists " + TABLE);
this.onCreate(db);
} catch (Exception e) {
Log.e("onUpgrade", e.getMessage());
}
}
}
package br.com;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class BookProvider extends ContentProvider{
public static final String AUTHORITY = "br.com.treinaweb.livros";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
public static final String ID_PATH = "id/*";
public static final String TITULO_PATH = "titulo/*";
public static final String AUTOR_PATH = "autor/*";
public static final int BOOKS = 1;
public static final int BY_ID = 2;
public static final int BY_TITULO = 3;
public static final int BY_AUTOR = 4;
private BookDbHelper dbHelper;
static final UriMatcher mather = new UriMatcher(UriMatcher.NO_MATCH);
static {
mather.addURI(AUTHORITY, null, BOOKS);
mather.addURI(AUTHORITY, ID_PATH, BY_ID);
mather.addURI(AUTHORITY, TITULO_PATH, BY_TITULO);
mather.addURI(AUTHORITY, AUTOR_PATH, BY_AUTOR);
mather.addURI(AUTHORITY, "#", BOOKS);
}
@Override // EXCLUI O REGISTRO
public int delete(Uri uri, String selection, String[] selectionArgs) {
int match = mather.match(uri);
if (match == 1){
SQLiteDatabase db = dbHelper.getWritableDatabase();
return db.delete(BookDbHelper.TABLE, selection, selectionArgs);
} else {
return 0;
}
}
@Override // RETORNA O TIPO DA URI INFORMADA
public String getType(Uri uri) {
int match = mather.match(uri);
if (match == 1){
return "vnd.android.cursor.dir/vnd.treinaweb.livros";
} else {
return "vnd.android.cursor.item/vnd.treinaweb.livros";
}
}
@Override // INSERE UM NOVO REGISTRO
public Uri insert(Uri uri, ContentValues values) {
int match = mather.match(uri);
long newID = 0;
if (match != 1){ // verifica se a uri esta correta
throw new IllegalArgumentException("Wrong Uri " + uri.toString());
}
if (values != null){
SQLiteDatabase db = dbHelper.getWritableDatabase();
newID = db.insert(BookDbHelper.TABLE, null, values);
return Uri.withAppendedPath(uri, String.valueOf(newID));
}
return null;
}
@Override // CHAMADO QUANDO O PROVEDOR ESTA SENDO INICIADO
public boolean onCreate() {
dbHelper = new BookDbHelper(getContext());
if (dbHelper == null){
return false;
} else {
return false;
}
}
@Override // RECEBE UM PEDIDO DO CLIENTE E RETORNA O OBJETO DO TIPO CURSOR
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbHelper.getWritableDatabase(); // abre conexao
Cursor result = null;
String order = null;
if (sortOrder != null){
order = sortOrder;
}
int match = mather.match(uri);
//try {
switch (match) {
case BOOKS:
result = db.query(BookDbHelper.TABLE, projection, selection, selectionArgs, null, null, order);
break;
case BY_ID:
result = db.query(BookDbHelper.TABLE, projection, BookDbHelper.C_ID + "=?", new String[]{uri.getLastPathSegment()}, null, null, order);
break;
case BY_TITULO:
result = db.query(BookDbHelper.TABLE, projection, BookDbHelper.C_TITULO + "=?", new String[]{uri.getLastPathSegment()}, null, null, order);
break;
case BY_AUTOR:
result = db.query(BookDbHelper.TABLE, projection, BookDbHelper.C_AUTOR + "=?", new String[]{uri.getLastPathSegment()}, null, null, order);
break;
}
/*} catch (Exception e) {
Log.i("Error provider", e.getMessage());
} finally {
db.close();
}
*/
return result;
}
@Override // ATUALIZA O REGISTRO
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
int match = mather.match(uri);
int rows = 0;
if (match != 1){ // verifica se a uri esta correta
throw new IllegalArgumentException("Wrong Uri " + uri.toString());
}
if (values != null){
SQLiteDatabase db = dbHelper.getWritableDatabase();
rows = db.update(BookDbHelper.TABLE, values, selection, selectionArgs);
}
return rows;
}
}
package br.com;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class SalvarActivity extends Activity implements OnClickListener {
Button salvar, voltar;
EditText autor, titulo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inserir);
salvar = (Button) findViewById(R.id.bt_salvar);
voltar = (Button) findViewById(R.id.bt_voltar);
salvar.setOnClickListener(this);
voltar.setOnClickListener(this);
autor = (EditText) findViewById(R.id.ed_autor);
titulo = (EditText) findViewById(R.id.ed_titulo);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_voltar:
finish();
break;
case R.id.bt_salvar:
ContentValues values = new ContentValues();
values.put(BookDbHelper.C_TITULO, titulo.getText().toString());
values.put(BookDbHelper.C_AUTOR, autor.getText().toString());
ContentResolver provedor = getContentResolver();
provedor.insert(BookProvider.CONTENT_URI, values);
//Intent intent = new Intent(this, MainActivity.class);
//startActivity(intent);
break;
}
}
}
Logo quando eu executo o projeto já aparece este erro:
07-23 14:47:03.372: E/AndroidRuntime(316): Uncaught handler: thread main exiting due to uncaught exception
07-23 14:47:03.382: E/AndroidRuntime(316): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com/br.com.MainActivity}: android.database.sqlite.SQLiteException: no such table: livros: , while compiling: SELECT * FROM livros
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.os.Handler.dispatchMessage(Handler.java:99)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.os.Looper.loop(Looper.java:123)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-23 14:47:03.382: E/AndroidRuntime(316): at java.lang.reflect.Method.invokeNative(Native Method)
07-23 14:47:03.382: E/AndroidRuntime(316): at java.lang.reflect.Method.invoke(Method.java:521)
07-23 14:47:03.382: E/AndroidRuntime(316): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-23 14:47:03.382: E/AndroidRuntime(316): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-23 14:47:03.382: E/AndroidRuntime(316): at dalvik.system.NativeStart.main(Native Method)
07-23 14:47:03.382: E/AndroidRuntime(316): Caused by: android.database.sqlite.SQLiteException: no such table: livros: , while compiling: SELECT * FROM livros
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1221)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1108)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1066)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1143)
07-23 14:47:03.382: E/AndroidRuntime(316): at br.com.BookProvider.query(BookProvider.java:104)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.content.ContentProvider$Transport.query(ContentProvider.java:130)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.content.ContentResolver.query(ContentResolver.java:202)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.Activity.managedQuery(Activity.java:1495)
07-23 14:47:03.382: E/AndroidRuntime(316): at br.com.MainActivity.onStart(MainActivity.java:32)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.Activity.performStart(Activity.java:3723)
07-23 14:47:03.382: E/AndroidRuntime(316): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
Alguem sabe como resolver isso!?