Leer la base de datos de Android. pregunta por valor y guarda por primera vez. si se inserta un valor, mostrarlo en la siguiente actividad

Esta pregunta es un poco similar a mi pregunta de preferencias compartidas, solo que involucra la base de datos de Android. Quiero almacenar el salario de una persona en la base de datos por primera vez que inicia la aplicación. la segunda vez que lo inicie, el salario que almacenó se verá en la siguiente actividad como vista de texto.

Sé aproximadamente cómo omitir la indicación del salario, pero no estoy seguro acerca de la base de datos. mi pregunta es, ¿cómo leo de la base de datos que el salario no es nulo y lo muestro en la siguiente actividad? Sé que de alguna manera implica una declaración if else como >> (si el salario/la base de datos no es nulo, comience la intención de la siguiente actividad como vista de texto) pero no estoy seguro de cómo codificarlos.

(SavingsGuiderMenuActivity contiene un enlace a SavingsGuiderAppActivity que solicita el salario (objetivo) y luego se mostrará en la actividad SavingsGuiderInserActivity. Significa que el usuario solo puede acceder a SavingsGuiderAppActivity una vez y la próxima vez que lo inicie, desde SavingsGuiderMenuActivity irá directamente a SavingsGuiderInsertActivity )

A continuación se muestran mis códigos SavingsGuiderMenuActivity:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu);

    Bundle bundle = getIntent().getExtras();
    String name= bundle.getString("name");

TextView resultView = (TextView)findViewById(R.id.view_Name);

    resultView.setText("Welcome " + name);

    ListView menuList = (ListView) findViewById(R.id.ListView_Menu);
    String[] items = { getResources().getString(R.string.start),
            getResources().getString(R.string.about),
            getResources().getString(R.string.help) };
    ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.menu_item, items);
    menuList.setAdapter(adapt);
    menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View itemClicked, int position, long id) {
            // Note: if the list was built "by hand" the id could be used.
            // As-is, though, each item has the same id
            TextView textView = (TextView) itemClicked;
            String strText = textView.getText().toString();
            if (strText.equalsIgnoreCase(getResources().getString(R.string.start))) {
                if(!dataExists())
                {
                    startActivity(new Intent(SavingsGuiderMenuActivity.this, SavingsGuiderAppActivity.class));
                }
                 else
                 {
                    Intent intent = new Intent(SavingsGuiderMenuActivity.this, SavingsGuiderInsertActivity.class);
                    Bundle extras = new Bundle();
                    extras.putDouble("target",double_target);
                    extras.putInt("interval",int_interval);
                    intent.putExtras(extras);
                    startActivity(intent);                 
                 }
               SavingsGuiderMenuActivity.this.finish();
           }                
            else if (strText.equalsIgnoreCase(getResources().getString(R.string.help))) {
                // Launch the Help Activity
                startActivity(new Intent(SavingsGuiderMenuActivity.this, SavingsGuiderHelpActivity.class));
            } 

            else if (strText.equalsIgnoreCase(getResources().getString(R.string.about))) {
                // Launch the Settings Activity
                startActivity(new Intent(SavingsGuiderMenuActivity.this, SavingsGuiderAboutActivity.class));
            } 
        }//onitem click
    });   
            }//bundle

public boolean dataExists()
{

    DBAdapter dbAdaptor = new DBAdapter(getApplicationContext());       
    Cursor cursor = null;

        dbAdaptor.open();       
        cursor = dbAdaptor.getAllSavings();

            if(cursor.moveToFirst())
            {
                double_target = cursor.getDouble(1);
                int_interval = cursor.getInt(2);
                return true;
            }
            else
            {
                return false;
            }

}

A continuación se muestran mis códigos SavingsGuiderAppActivity:

public class SavingsGuiderAppActivity extends SavingsActivity {
/** Called when the activity is first created. */

String tag = "Savings Guider";
EditText targetEdit, intervalEdit;
Button insertButton = null;


protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.layout.app);
    targetEdit=(EditText)findViewById(R.id.edit_target);
    intervalEdit=(EditText)findViewById(R.id.edit_interval);
    insertButton = (Button) findViewById(R.id.btn_submit);

    insertButton.setOnClickListener(new OnClickListener(){

        public void onClick(View v)
        {
            DBAdapter dbAdaptor = new DBAdapter(getApplicationContext());
            try{
                dbAdaptor.open();

                String target = targetEdit.getText().toString();                    
                String interval = intervalEdit.getText().toString();

                if(!target.equals("") && !interval.equals("")) {

                    try{

                    double target2 = Double.parseDouble(target);                    
                    int interval2 = Integer.parseInt(interval);
                    dbAdaptor.insertSavings(target2, interval2);
                    }
                    catch (NumberFormatException e) {
                        Context context = getApplicationContext();
                        CharSequence text = "Please enter valid value!";
                        int duration = Toast.LENGTH_SHORT;
                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
                    }
                }                   

                else {
                    Context context = getApplicationContext();
                    CharSequence text = "Please do not leave any field blank!";
                    int duration = Toast.LENGTH_SHORT;
                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
            }
            catch(Exception e){
                Log.d("Savings Guider: ",e.getMessage());
            }
            finally{
                if(dbAdaptor != null)
                    dbAdaptor.close();
            }
        }
    });
}
}

A continuación se encuentran mis códigos para SavingsGuiderInsertActivity. Siento que hay algo mal al mostrar los datos que he insertado en la base de datos desde la página SavingsGuiderAppActivity. Como si no debería usar Bundle Extras:

public class SavingsGuiderInsertActivity extends SavingsActivity {
/** Called when the activity is first created. */

String tag = "Savings Guider";
DecimalFormat df = new DecimalFormat("#.##");

protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.layout.insert);

    Bundle bundle = getIntent().getExtras();
    double target= bundle.getDouble("target");
    int interval= bundle.getInt("interval");

TextView targetView = (TextView)findViewById(R.id.view_target); TextView intervalView = (TextView)findViewById(R.id.view_interval);

    targetView.setText("$" + target);
    intervalView.setText("" + interval);

    double average = target/interval;

    TextView averageView = (TextView)findViewById(R.id.viewAverage);
    averageView.setText("You must save $" + df.format(average) + " everytime!");

}

preguntado el 28 de julio de 12 a las 01:07

1 Respuestas

Podrías hacerlo de esta manera.

  1. Cree una tabla de base de datos durante el primer lanzamiento, pero la tabla estará vacía.

  2. Compruebe si la mesa está vacía y no haga nada. De lo contrario, tome los datos de la base de datos y muéstrelos.

Puede administrar la base de datos de Android usando SQLiteOpenHelper.

Para verificar si la tabla está vacía, puede hacer algo como esto

  public boolean isSalaryTableNotEmpty() {
      String sql = "SELECT COUNT(*) FROM SALARY_TABLE";
      Cursor cursor = database.rawQuery(sql, null);
      if(!cursor.moveToFirst()) {
          return false;
      }
      int count = cursor.getInt(0);
      cursor.close();
      return count > 0;
  }

Respondido 28 Jul 12, 10:07

Pero, ¿cómo pruebo si el registro está insertado y paso a la siguiente intención y recupero el registro para mostrarlo en la página siguiente? Tampoco quiero que la aplicación solicite al usuario el salario. abeja

Actualicé mi respuesta. En el código, supongo que el base de datos se crea el objeto. - NcJie

Tengo errores después de escribirlos... Actualicé mi pregunta junto con los códigos originales. - abeja

Agregaste montones de código, pero en realidad no mencionas cuál es exactamente el problema al que te enfrentas. Y sí, mi fragmento de código dará un error porque debe crear el objeto de la base de datos por su cuenta. El fragmento asume que ya lo creaste. Para usar la base de datos, debe echar un vistazo a cómo usar SQLiteOpenHelper No voy a ayudarte a codificar la solución completa :) - NcJie

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.