每次更新数据库时从游标获取值

时间:2017-01-14 15:37:55

标签: java android

我有两项活动。一个是从edittext更新数据库中的值,在第二个活动中,我希望将数据库中的值放入textview。在第一次更新值时,一切顺利但第二次textview无法更新,我在Textview值“0”中看到。当我给出断点时,我看到我的光标不想第二次取值。任何建议我该怎么办?这是活动生命周期的问题还是什么?有我的代码。任何示例或建议对我都非常有帮助。

public class DzienPierwszy extends AppCompatActivity {
    Button button;
    OpenHelper1 mDb;
    TextView pp1,pp2,pp3,s1,s2,s3,p1,p2,p3,pn,sr,pt,nd;

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

        p1 = (TextView) findViewById(R.id.p1);
        p2 = (TextView) findViewById(R.id.p2);
        p3 = (TextView) findViewById(R.id.p3);
        s1 = (TextView) findViewById(R.id.s1);
        s2 = (TextView) findViewById(R.id.s2);
        s3 = (TextView) findViewById(R.id.s3);
        pp1 = (TextView) findViewById(R.id.pp1);
        pp2 = (TextView) findViewById(R.id.pp2);
        pp3 = (TextView) findViewById(R.id.pp3);
        pn = (TextView) findViewById(R.id.pn);
        sr = (TextView) findViewById(R.id.sr);
        pt = (TextView) findViewById(R.id.pt);
        nd = (TextView) findViewById(R.id.nd);



        Intent i = getIntent();
        final String product = i.getStringExtra("cwiczenie ");
        int lol1=0;

        mDb = new OpenHelper1(this);

        mDb.open();
        // fetch data about 1 row in database table
        Cursor test = mDb.fetchOneCwiczenie(product);

        mDb.close();

        if( test != null && test.moveToFirst() ){
            //get value from column
            lol1 = test.getInt(test.getColumnIndex("score"));
            test.close();
        }


        p1.setText(String.valueOf(Math.round(lol1*0.55)));
        p2.setText(String.valueOf(Math.round(lol1*0.79)));
        p3.setText(String.valueOf(Math.round(lol1*0.67)));
        s1.setText(String.valueOf(Math.round(lol1*0.67)));
        s2.setText(String.valueOf(Math.round(lol1*0.91)));
        s3.setText(String.valueOf(Math.round(lol1*0.79)));
        pp1.setText(String.valueOf(Math.round(lol1*0.79)));
        pp2.setText(String.valueOf(Math.round(lol1*1.03)));
        pp3.setText(String.valueOf(Math.round(lol1*0.91)));

    }

    public void open(View view) {
        Intent intent = new Intent(getApplicationContext(),TestActivity.class);
        startActivity(intent);
    }
}




public class OpenHelper1{



private static final String TAG = "TreningDbAdapter";
public DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private final ContentResolver resolver =null;

private final Context mCtx;

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "menadzerCwiczen1";
public static final String TABLE_CWICZENIA = "cwiczenia";
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_KIND = "kind";
public static final String KEY_URL = "url";
public static final String KEY_SCORE = "score";
public static final String KEY_SERIES = "series";

static final String PROVIDER_NAME = "com.example.jacek.gympartner.SQLite";
static final String URL = "content://" + PROVIDER_NAME + "/cwiczenia";
static final Uri CONTENT_URI = Uri.parse(URL);

private static HashMap<String, String> CWICZENIA_PROJECTION_MAP;

static final int CWICZENIA = 1;
static final int CWICZENIE_ID = 2;

static final UriMatcher uriMatcher;
static{
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(PROVIDER_NAME, "cwiczenie", CWICZENIA);
    uriMatcher.addURI(PROVIDER_NAME, "cwiczenia/#", CWICZENIE_ID);
}



private static final String DATABASE_CREATE =
        "CREATE TABLE if not exists " + TABLE_CWICZENIA + " (" +
                KEY_ID + " integer PRIMARY KEY autoincrement," +
                KEY_NAME + " TEXT," +
                KEY_KIND + " TEXT," +
                KEY_URL + " TEXT," +
                KEY_SCORE + " TEXT," +
                KEY_SERIES + " integer" +
                ");";
/*
@Override
public boolean onCreate() {

    Context context = getContext();
    DatabaseHelper dbHelper = new DatabaseHelper(context);



    mDb = dbHelper.getWritableDatabase();
    return (mDb == null)? false:true;
}

@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    return null;
}

@Nullable
@Override
public String getType(Uri uri) {
    return null;
}

@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
    return null;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    return 0;
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    return 0;
}
*/

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.w(TAG, DATABASE_CREATE);




        db.execSQL(DATABASE_CREATE);
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Pompki','Klatka piersiowa','https://www.youtube.com/watch?v=bwnidT3CB_Q',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Pompki na poręczach','Triceps','https://www.youtube.com/watch?v=Cufsu3IHhCo',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Odwrotne wiosłowanie','Plecy','https://www.youtube.com/watch?v=8qCn76yKhro',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Spięcia brzucha leżąc','Górna część mięśni brzucha','https://www.youtube.com/watch?v=VVcm4LdmIwM',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Unoszenie kolan','Dolna część mięśni brzucha','https://www.youtube.com/watch?v=Htx9Z8ZkiCg',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Skręty tułowia','Mięśnie skośne brzucha','https://www.youtube.com/watch?v=i7smKA3mgBU',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Przysiady','Uda','https://www.youtube.com/watch?v=NEduXlZ8zSk&t',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Wspięcia na palce','Mięśnie łydek','https://www.youtube.com/watch?v=Wri0VppFWCY',0,3)");
        db.execSQL("INSERT INTO "+TABLE_CWICZENIA+"("+KEY_NAME+","+KEY_KIND+","+KEY_URL+","+KEY_SCORE+","+KEY_SCORE+") VALUES('Podciąganie na drążku','Mięśnie łydek','https://www.youtube.com/watch?v=7hM1iriAxx8',0,3)");


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CWICZENIA);

        onCreate(db);
    }



}

public  OpenHelper1(Context ctx) {
    this.mCtx = ctx;
}

public OpenHelper1 open() throws SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}

public OpenHelper1 read() throws SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getReadableDatabase();
    return this;
}

public void close() {
    if (mDbHelper != null) {
        mDbHelper.close();
    }
}

public long createCwiczenie(String name,
                          String kind,
                          String url,
                          int score,
                          int series) {
    mDbHelper.getWritableDatabase();

    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_NAME, name);
    initialValues.put(KEY_KIND, kind);
    initialValues.put(KEY_URL, url);
    initialValues.put(KEY_SCORE, score);
    initialValues.put(KEY_SERIES, series);

    return mDb.insert(TABLE_CWICZENIA, null, initialValues);
}


public void deleteCwiczenie(String name) {
    mDb.execSQL("DELETE FROM " + TABLE_CWICZENIA + " WHERE " + KEY_NAME + "=\"" + name + "\";" );
}



public void updateScore1(Uri uri,String name, int wynik) {
    String str = "UPDATE "+TABLE_CWICZENIA+" SET "+KEY_SCORE+" = "+wynik+" WHERE "+KEY_NAME+" = '"+name+"'";
    mDb.execSQL(str);
}


public void updateScore(String name, int wynik) {
    String str = "UPDATE "+TABLE_CWICZENIA+" SET "+KEY_SCORE+" = "+wynik+" WHERE "+KEY_NAME+" = '"+name+"'";
    mDb.execSQL(str);
}
public boolean deleteAllCwiczenia() {

    int doneDelete = 0;
    doneDelete = mDb.delete(TABLE_CWICZENIA, null , null);
    Log.w(TAG, Integer.toString(doneDelete));
    return doneDelete > 0;

}

public Cursor fetchCwiczeniaByName(String inputText) throws SQLException {
    Log.w(TAG, inputText);
    Cursor mCursor = null;
    if (inputText == null  ||  inputText.length () == 0)  {
        mCursor = mDb.query(TABLE_CWICZENIA, new String[] {KEY_ID,
                        KEY_NAME, KEY_KIND, KEY_URL, KEY_SCORE, KEY_SERIES},
                null, null, null, null, null);

    }
    else {
        mCursor = mDb.query(true, TABLE_CWICZENIA, new String[] {KEY_ID,
                        KEY_NAME, KEY_KIND, KEY_URL, KEY_SCORE, KEY_SERIES},
                KEY_NAME + " like '%" + inputText + "%'", null,
                null, null, null, null);
    }
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

public Cursor fetchAllcwiczenia() {

    Cursor mCursor = mDb.query(TABLE_CWICZENIA, new String[] {KEY_ID,
                    KEY_NAME, KEY_KIND, KEY_URL, KEY_SCORE, KEY_SERIES},
            null, null, null, null, null);

    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

public Cursor fetchOneCwiczenie(String name) {

    String query = "SELECT * FROM " + TABLE_CWICZENIA + " WHERE name='"+name+"'";

    Cursor c = mDb.rawQuery(query,null);


    if(c != null) {
        c.moveToFirst();
    }
    return c;
}

public Cursor fetchOneCwiczenie1(Uri uri,String name) {
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    qb.setTables(TABLE_CWICZENIA);



    String query = "SELECT * FROM " + TABLE_CWICZENIA + " WHERE name='"+name+"'";

    Cursor c = mDb.rawQuery(query,null);


    if (c != null) {
       // c.setNotificationUri(getContext().getContentResolver(), ContactsContract.AUTHORITY_URI);
    }

    return c;
}




public void insertSomeCwiczenia() {
    createCwiczenie("Pompki","Klatka piersiowa","https://www.youtube.com/watch?v=bwnidT3CB_Q",20,3);
    createCwiczenie("Pompki na poręczach","Triceps","https://www.youtube.com/watch?v=Cufsu3IHhCo",0,3);
    createCwiczenie("Odwrotne wiosłowanie","Plecy","https://www.youtube.com/watch?v=8qCn76yKhro",0,3);
    createCwiczenie("Spięcia brzucha leżąc","Górna część mięśni brzucha","https://www.youtube.com/watch?v=VVcm4LdmIwM",0,3);
    createCwiczenie("Unoszenie kolan","Dolna część mięśni brzucha","https://www.youtube.com/watch?v=Htx9Z8ZkiCg",0,3);
    createCwiczenie("Skręty tułowia","Mięśnie skośne brzucha","https://www.youtube.com/watch?v=i7smKA3mgBU",0,3);
    createCwiczenie("Przysiady","Uda","https://www.youtube.com/watch?v=NEduXlZ8zSk&t",0,3);
    createCwiczenie("Wspięcia na palce","Mięśnie łydek","https://www.youtube.com/watch?v=Wri0VppFWCY",0,3);
    createCwiczenie("Podciąganie na drążku","Mięśnie łydek","https://www.youtube.com/watch?v=7hM1iriAxx8",0,3);
}


}

public class TestActivity extends AppCompatActivity {
TextView textView;
EditText editText;
Button button,button1;
OpenHelper1 mDb;


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

    textView = (TextView) findViewById(R.id.polecenie);
    editText = (EditText) findViewById(R.id.wartosc);
    button = (Button) findViewById(R.id.treningactivity);
    button1 = (Button) findViewById(R.id.zapisz);
    //button2 = (Button) findViewById(R.id.button);



    mDb = new OpenHelper1(this);



    Intent i = getIntent();
    // getting attached intent data
    final String product = i.getStringExtra("cwiczenie ");



    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int wynik = Integer.parseInt(editText.getText().toString());
            mDb.open();
            mDb.updateScore(product,wynik);


            mDb.close();


        }
    });

    /*
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mDb.open();
            Cursor t = mDb.fetchOneCwiczenie(product);
            int c = t.getInt(t.getColumnIndex("score"));
            String k = Integer.toString(c);
            textView1.setText(k);
            mDb.close();

        }
    });
    */

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(getApplicationContext().getApplicationContext(), DzienPierwszy.class);
            i.putExtra("cwiczenie ", product);

            startActivity(i);
        }
    });



}
}

1 个答案:

答案 0 :(得分:0)

您需要做的事情不止一些 -

  1. 在您的内容提供商中,您需要在将光标返回给客户端之前附加通知Uri(在本例中为您的活动)。代码看起来像这样(这里需要根据您的提供者更改授权URI) -
  2. Hour

    1. 每次数据更新时,都需要调用以下行 -
    2. if (c != null) { c.setNotificationUri(getContext().getContentResolver(),ContactsContract.AUTHORITY_URI); } return c;

      基本上是什么点1&amp; 2确实是它通知底层数据层当前存在具有活动游标的客户端,并且如果底层数据有变化则需要通知。如果你使用Android中的任何内置数据提供程序(如ContactsProvider / SmsProvider)来读取联系人/短信数据,那么第1点和第2点就会被照顾。

      ContactsProvider

      1. 在您的活动代码中,您需要执行类似的操作 getContext().getContentResolver().notifyChange(ContactsContract.AUTHORITY_URI, null, syncToNetwork);。如果你改为使用一个环绕光标的Cursor适配器,那么就可以了。看一下Cursor Adapter源代码 -
      2. CursorAdapter Sample