Как отобразить имя - PullRequest
       5

Как отобразить имя

0 голосов
/ 24 мая 2018

Как я могу отобразить имя после пользователя, если он закончил ввод имени, потому что я пока не знаю, как это сделать и вставить данные в базу данных.

Я хочу отобразить имя и иметь возможностьдобавьте время и дату.

Как отобразить имя после пользователя, если оно введено, потому что я пока не знаю, как это сделать, и вставить данные в базу данных.

Я хочу отобразить имя и иметь возможность добавить время и дату.

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    private TabLayout tabLayout;
    private AppBarLayout appBarLayout;
    private ViewPager viewPager;
    private EditText edtName;

    Spinner spin1;
    Spinner spin2;
    Spinner spin3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DBHelper db = new DBHelper(); 


        tabLayout = findViewById(R.id.tablayout);
        appBarLayout = findViewById(R.id.bar);
        viewPager = findViewById(R.id.viewpager);

        edtName = findViewById(R.id.edtName);

        spin1 = findViewById(R.id.spinnerFrequency);
        spin2 = findViewById(R.id.SpinnerTime);
        spin3 = findViewById(R.id.SpinnerQty);

        Adapter adapter = new Adapter(getSupportFragmentManager());
        /*screen*/
        adapter.AddFragment(new Drugfragment(), "Drug");
        adapter.AddFragment(new Appointmentfragment(), "Appointment");

        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setupWithViewPager(viewPager);




        Account c = new Account();
        if(c==null) {

        }else{
           AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("LOG IN");
            LayoutInflater inflater = MainActivity.this.getLayoutInflater();
            builder.setView(inflater.inflate(R.layout.account,null));
                    builder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {

                                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                                    LayoutInflater inflater = MainActivity.this.getLayoutInflater();


                                    builder.setView(inflater.inflate(R.layout.accountname,null));
                                    builder.setPositiveButton("Yes",new DialogInterface.OnClickListener(){
                                        public void onClick(DialogInterface dialog, int id) {

                                        }
                                    });


                                    builder.show();
                                }
                            });



            builder.setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            System.exit(0);
                        }
                    });

            builder.show();

            db.insertRecord();

        }

    }

    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String text = parent.getItemAtPosition(position).toString();
        Toast.makeText(parent.getContext(), text, Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }


}

Это мой помощник по БД

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by User on 23/5/2018.
 */

public class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME="accountDB.db";
    private static final String DATABASE_TABLE="Account";
    private static final String COL1="AccountName";
    private static final String COL2="Time";

    public DBHelper(){
        super(context, DATABASE_NAME, null, 1);
    }

    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table Account(acctname text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        this.onCreate(db);
    }

    public void insertRecord(AccountInfo a){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contents = new ContentValues();

        contents.put("AccountName", a.getAcctName());
    }


}

1 Ответ

0 голосов
/ 24 мая 2018

Основной принцип извлечения и последующего использования данных, хранящихся в базе данных SQLite на устройстве Android, заключается в использовании / выполнении запроса до SELECT , доступного через Курсор , а затем переместите в пределах Курсора в соответствующую строку или строки и, наконец, извлеките данные из соответствующего столбца или столбцов.

Для вашей конкретной проблемыВы хотите найти последнюю вставленную строку, и, к счастью, SQLite имеет функцию, которая помогает, то есть last_insert_rowid()

Так что запрос будет SELECT * FROM Account WHERE rowid = last_insert_rowid()

Поскольку существуют различные проблемы скод, который вы предоставили.Ниже приведен пример, основанный на вашем коде, который будет: -

  1. Добавить новую учетную запись (хотя и очень простую с одним именем), а затем
  2. Извлеките имя последней учетной записи, которая была добавлена ​​(хотя, как вы знаете, это имя не очень полезно).

    • Обратите внимание, что это очень ограниченно, но показывает технику.
    • Примечание. Rowid - это специальный столбец, который по умолчанию предоставляется для каждой строки (таблица без ROWID не будет иметь rowid). rowid однозначно идентифицирует строку и представляет собой целое число вначале 1, затем, вероятно, 2, а затем, вероятно, 3 ....... НО на него никогда не следует полагать, что оно монотонно увеличивается.

Первый очень простой AccountInfo класс, а именно AccountInfo.java (который у вас уже есть: -

public class AccountInfo {

    private String mAccountName;

    public AccountInfo(String account_name) {
        this.mAccountName = account_name;
    }
    public String getAcctName() {
        return mAccountName;
    }
}

Второй DBHelper.java (примечаниекомментарии, также не то, насколько они похожи на ваш): -

public class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME="accountDB.db";
    private static final String DATABASE_TABLE="Account";
    private static final String COL1="AccountName"; //<<<< not used
    private static final String COL2="Time"; //<<<< not used

    public DBHelper(Context context){ //<<<< modifed to include the Context to be passed
        super(context, DATABASE_NAME, null, 1);
    }

    //<<<<<<<<<< This is superfluous and isn't used in this example >>>>>>>>>>
    //<<<<<<<<<< It could be deleted                                >>>>>>>>>>
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table Account(acctname text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        this.onCreate(db);
    }

    public void insertRecord(AccountInfo a){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contents = new ContentValues();
        //contents.put("AccountName", a.getAcctName()); //<<<< Will fail as incorrect column name
        contents.put("acctname",a.getAcctName()); //<<<< column name as per table definition
        db.insert(DATABASE_TABLE,null,contents); //<<<< ADDED to do the insert itself
    }

    //<<<<<<<<<< The Query that gets the name of the account last added >>>>>>>>>>
    public String getLastInsertedAccountName() {
        String rv = ""; //<<<< Just in case nothing is extracted set the return value to empty String
        String[] columns = new String[]{"acctname"}; //<<<< The columns to extract (only one)
        String whereclause = "rowid = last_insert_rowid()"; //<<<< The SQL WHERE clause (less the WHERE keyword)
        SQLiteDatabase db = this.getWritableDatabase();//<<<< Get the SQLite database
        // Use the SQLliteDatabase convenience query method that gets the data into a Cursor
        Cursor csr = db.query(
                DATABASE_TABLE, //<<<< The table to be queried (ie FROM )
                columns, //<<<< The columns to be returned just one (could use null to return all columns)
                whereclause, //<<<< The WHERE clause
                null, //<<<< selection args (none so null)
                null, //<<<< the column(s) to GROUP BY (none so null)
                null, //<<<< The having clause (none so null)
                null //<<<< The ORDER BY clause (none so null)
        );
        //<<<< Move to the first (only) row in the Cursor (if there is one)
        if (csr.moveToFirst()) {
            // Get the value, as a string, from the column name acctname
            rv = csr.getString(
                    csr.getColumnIndex(
                            "acctname"
                    )
            );
        }
        csr.close(); //<<<< Close the Cursor as done with it
        return rv; //<<<< Finally retruned that extracted value
    }
}

Код вызова в действии, MainActivity (очень просто): -

открытый классMainActivity расширяет AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DBHelper mDBHlpr = new DBHelper(this); //<<<< Get an instance of the DBHelper
    AccountInfo c = new AccountInfo("Fred"); //<<<< Create an Account to add
    mDBHlpr.insertRecord(c);
    //<<<<<<<<<< one line version of the two lines above (commented out) <<<<<<<<<<
    //mDBHlpr.insertRecord(new AccountInfo("Tom"));

    String account_just_inserted = mDBHlpr.getLastInsertedAccountName(); //<<<< get the name

    //<<<<<<<<<< Do something with the name i.e. write it out to the Log >>>>>>>>>>
    Log.d(
            "ACCOUNT INSERTED",
            "The Name of the account just inserted is :-" +
                    account_just_inserted
    );
}

}

  • Примечание при каждом запуске приложения будет добавляться новая строка с именем Фреда в качестве имени учетной записи.

Результат

при выполнении вышеуказанного выдает что-то похожее на: -

05-24 09:27:14.215 1287-1287/acnta.accountapp D/ACCOUNT INSERTED: The Name of the account just inserted is :-Fred
...