Fórum Programa Android #402736
09/06/2011
0
Preparei um código JAVA para Android mas quando executo no emulador aparece
"
Sorry!
The application ProjectFinal2 (process com.example.project) has stoppes unexpectedly. Please try again.
"
Fiz com o Eclipse e nele, no Eclipe, não acusa nenhum erro de programação
Estou executando em um emulador Android 2.1-update1 - Plataform 21.1-update1 - API Level 7
Neste meu projeto fiz ele conversar com um banco de dados do proprio Android
vou postar minhas classes
DbAdapter.java
package com.example.project;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class DbAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_DESCRIPTION = "description";
public static final String KEY_VALUE = "value";
/*args file txt*/
String arquivo = "/dados.txt";
String diretorio;
File file = new File(arquivo);
FileOutputStream fos;
public static final String DB_CREATE = "create table expenses (" +
"_id integer primary key autoincrement, " +
"description text not null, " +
"value number(9,2) not null);";
private static final String DB_NAME = "data";
private static final String DB_TABLE = "expenses";
private static final int DB_VERSION = 2;
private SQLiteDatabase mDb;
private final Context mCtx;
public boolean Gravar(String desc) throws IOException{
/*generates file*/
boolean ex;
if(!this.file.exists()){
if(this.file.createNewFile()){
ex = true;
}else{
ex = false;
}
}else{
ex = true;
}
if(ex == true){
String texto = desc;
fos = new FileOutputStream(this.file);
this.diretorio = this.arquivo;
fos.write(texto.getBytes());
fos.flush();
fos.close();
return true;
}else{
return false;
}
}
public DbAdapter(Context ctx){
mCtx = ctx;
}
public DbAdapter open() throws SQLException, FileNotFoundException {
mDb = mCtx.openOrCreateDatabase(DB_NAME, DB_VERSION, null);
mDb.execSQL(DB_CREATE);
return this;
}
public void close(){
mDb.close();
}
public long createExpense(String desc, float value){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_DESCRIPTION, desc);
initialValues.put(KEY_VALUE, value);
try {
Gravar(desc);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mDb.insert(DB_TABLE, null, initialValues);
}
public boolean deleteExpense(long rowid){
return mDb.delete(DB_TABLE, KEY_ROWID + "=" + rowid, null) > 0;
}
public Cursor allExpense(){
return mDb.query(DB_TABLE, new String[] {KEY_ROWID, KEY_DESCRIPTION,
KEY_VALUE}, null, null, null, null, null);
}
public Cursor fetchExpenses(long rowid) throws SQLException{
Cursor result = mDb.query(true, DB_TABLE, new String[]{
KEY_ROWID, KEY_DESCRIPTION, KEY_VALUE}, KEY_ROWID + "=" + rowid,
null, null, null, null, null);
if(result.getCount() == 0 || !result.isFirst()){
throw new SQLException("No expense matching id:" + rowid);
}
return result;
}
public boolean updateExpense(long rowid, String description, float value){
ContentValues args = new ContentValues();
args.put(KEY_DESCRIPTION, description);
args.put(KEY_VALUE, value);
return mDb.update(DB_TABLE, args, KEY_ROWID + "=" + rowid, null) > 0;
}
}
ExpenseEdit.java
package com.example.project;
import java.io.FileNotFoundException;
import android.app.Activity;
import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class ExpenseEdit extends Activity {
private EditText descText;
private EditText valueText;
private Long rowId;
private DbAdapter dbAdapter;
@Override
protected void onCreate(Bundle icicle) {
// TODO Auto-generated method stub
super.onCreate(icicle);
dbAdapter = new DbAdapter(this);
try {
dbAdapter.open();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setContentView(R.layout.expense_edit);
descText = (EditText) findViewById(R.id.desc);
valueText = (EditText) findViewById(R.id.value);
Button confirmButton = (Button) findViewById(R.id.confirm);
rowId = icicle != null ? icicle.getLong(DbAdapter.KEY_ROWID) : null;
if(rowId == null){
Bundle extras = getIntent().getExtras();
rowId = extras != null ? extras.getLong(DbAdapter.KEY_ROWID) : null;
}
populateFields();
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
setResult(RESULT_OK);
finish();
}
});
}
private void populateFields() {
// TODO Auto-generated method stub
if(rowId != null){
Cursor expense = dbAdapter.fetchExpenses(rowId);
startManagingCursor(expense);
descText.setText(expense.getString(expense.getColumnIndex(
DbAdapter.KEY_DESCRIPTION)));
valueText.setText(expense.getString(expense.getColumnIndex(
DbAdapter.KEY_VALUE)));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
saveState();
}
private void saveState() {
// TODO Auto-generated method stub
String desc = descText.getText().toString();
float value = new Float(valueText.getText().toString());
if(rowId == null){
long id = dbAdapter.createExpense(desc, value);
if(id > 0){
rowId = id;
}
} else {
dbAdapter.updateExpense(rowId, desc, value);
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
populateFields();
}
}
ProjectFinal2Activity.java
package com.example.project;
import java.io.FileNotFoundException;
import com.example.project.DbAdapter;
import com.example.project.ExpenseEdit;
import com.example.project.R;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class ProjectFinal2Activity extends ListActivity {
private DbAdapter dbAdapter;
private Cursor expenseCursor;
private static final int ACTIVITY_CREATE = 0;
private static final int ACTIVITY_EDIT = 1;
public static final int INSERT_ID = Menu.FIRST;
public static final int DELETE_ID = Menu.FIRST + 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.expenses_list);
dbAdapter = new DbAdapter(this);
try {
dbAdapter.open();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fillData();
}
private void fillData() {
// TODO Auto-generated method stub
expenseCursor = dbAdapter.allExpense();
startManagingCursor(expenseCursor);
String[] from = new String[]{
DbAdapter.KEY_DESCRIPTION, DbAdapter.KEY_VALUE
};
int[] to = new int[]{
R.id.list_description, R.id.list_value
};
SimpleCursorAdapter expense = new SimpleCursorAdapter(this,
R.layout.expense_row, expenseCursor, from, to);
setListAdapter(expense);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item){
switch(item.getItemId()){
case INSERT_ID:
createExpense();
return true;
case DELETE_ID:
dbAdapter.deleteExpense(getListView().getSelectedItemId());
fillData();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
private void createExpense(){
Intent i = new Intent(this, ExpenseEdit.class);
startSubActivity(i, ACTIVITY_CREATE);
}
private void startSubActivity(Intent i, int activityCreate) {
// TODO Auto-generated method stub
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, ExpenseEdit.class);
i.putExtra(DbAdapter.KEY_ROWID, id);
startSubActivity(i, ACTIVITY_EDIT);
}
protected void onActivityResult(int requestCode, int resultCode, String data,
Bundle extras){
onActivityResult(requestCode, resultCode, data, extras);
fillData();
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, R.string.menu_insert, 0);
menu.add(0, DELETE_ID, R.string.menu_delete, 0);
return result;
}
}
R.java
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.example.project;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int confirm=0x7f050002;
public static final int desc=0x7f050000;
public static final int list_description=0x7f050003;
public static final int list_value=0x7f050004;
public static final int value=0x7f050001;
}
public static final class layout {
public static final int expense_edit=0x7f030000;
public static final int expense_row=0x7f030001;
public static final int expenses_list=0x7f030002;
public static final int main=0x7f030003;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int confirm=0x7f040007;
public static final int desc=0x7f040005;
public static final int hello=0x7f040000;
public static final int menu_delete=0x7f040004;
public static final int menu_insert=0x7f040003;
public static final int no_expenses=0x7f040002;
public static final int value=0x7f040006;
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.project"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ProjectFinal2Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ExpenseEdit">
</activity>
</application>
</manifest>
Mas como ja felei no meu emulador nao roda e no meu Eclipse nao acusa nenhum pau de programação
Se vcs poderem me ajudar ficarei muito grato
Vcs tem idéia do que pode estar acontecendo?
--
----
Bruno Marques Nogueira
11 9326-9673
Bruno Nogueira
Curtir tópico
+ 0Posts
09/06/2011
Davi Costa
Só compilar não quer dizer que vai funcionar 100%.
Achei que vc pudesse estar mascarando algum erro, mas mesmso seus try/catch acho que vi todos é bom vc conferir vc colocou uma chama para printStackTrace().
Tenta ver alguma linha de código que vc tenha certeza que a app passa antes de subir e tenta debugar, e vê se seu console está no log correto da app android. pode ser que o erro esteja sendo mostrado lá
Att Davi
Gostei + 0
09/06/2011
Bruno Nogueira
Eu vou ver onde possa ser o pau...
Mas "deveria" estar mostrando ou apresentando o erro... eu coloquei try/catch para isso...
Vou dau mais uma olhada...
Tenta ai e agente vai conversando..
Gostei + 0
09/06/2011
Bruno Nogueira
[2011-06-09 15:40:52 - ProjectFinal2] ------------------------------
[2011-06-09 15:40:52 - ProjectFinal2] Android Launch!
[2011-06-09 15:40:52 - ProjectFinal2] adb is running normally.
[2011-06-09 15:40:52 - ProjectFinal2] Performing com.example.project.ProjectFinal2Activity activity launch
[2011-06-09 15:40:52 - ProjectFinal2] Automatic Target Mode: launching new emulator with compatible AVD 'Andoird'
[2011-06-09 15:40:52 - ProjectFinal2] Launching a new emulator with Virtual Device 'Andoird'
[2011-06-09 15:40:52 - ProjectFinal2] New emulator found: emulator-5554
[2011-06-09 15:40:52 - ProjectFinal2] Waiting for HOME ('android.process.acore') to be launched...
[2011-06-09 15:41:18 - ProjectFinal2] HOME is up on device 'emulator-5554'
[2011-06-09 15:41:18 - ProjectFinal2] Uploading ProjectFinal2.apk onto device 'emulator-5554'
[2011-06-09 15:41:19 - ProjectFinal2] Installing ProjectFinal2.apk...
[2011-06-09 15:41:40 - ProjectFinal2] Success!
[2011-06-09 15:41:40 - ProjectFinal2] Starting activity com.example.project.ProjectFinal2Activity on device emulator-5554
"Teaoricamente" já era para estar pegando....
Gostei + 0
15/06/2011
Dyego Carmo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)