Programa Android

Java

09/06/2011

Ola,

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

Bruno Nogueira

Curtidas 0

Respostas

Davi Costa

Davi Costa

09/06/2011

Ele não dá nenhum exception nem em tempo de execução?
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
Bruno Nogueira

Bruno Nogueira

09/06/2011

Nao dá nenhum erro em tempo de execução...
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
Bruno Nogueira

Bruno Nogueira

09/06/2011

Eu já tinha olhada mas olhei novamente... pau no console android na aparece nada:

[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
Dyego Carmo

Dyego Carmo

09/06/2011

Cole o LOG do ADB2 que é o Log do proprio android , lá diz o prq o aplicativo parou.

GOSTEI 0
POSTAR