diff --git a/students/net1814080903214/app/src/main/AndroidManifest.xml b/students/net1814080903214/app/src/main/AndroidManifest.xml index 5c965afde..bab1a6345 100644 --- a/students/net1814080903214/app/src/main/AndroidManifest.xml +++ b/students/net1814080903214/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="edu.hzuapp.androidlabs.net1814080903141"> - + + + + + + - - + + + \ No newline at end of file diff --git a/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/Records.java b/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/Records.java new file mode 100644 index 000000000..95285cb7d --- /dev/null +++ b/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/Records.java @@ -0,0 +1,146 @@ +package edu.hzuapp.androidlabs.net1814080903141; + +import android.content.ContentProvider; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.database.sqlite.SQLiteQueryBuilder; +import android.net.Uri; +import android.text.TextUtils; +import java.util.HashMap; + +public class ContentProviderOfRecords extends ContentProvider { + + static final String PROVIDER_NAME = "edu.hzuapps.androidlabs.ContentProviderOfRecords"; + static final String URL = "content://" + PROVIDER_NAME + "/records"; + static final Uri CONTENT_URI = Uri.parse(URL); + static final String _ID = "_id"; + static final String SCORE = "score"; + static final String BEST = "best"; + static final int RECORDS = 1; + static final int RECORD_ID = 2; + static final UriMatcher uriMatcher; + static { + uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + uriMatcher.addURI(PROVIDER_NAME, "records", RECORDS); + uriMatcher.addURI(PROVIDER_NAME, "records/#", RECORD_ID); + } + private SQLiteDatabase db; + static final String DATABASE_NAME = "Game"; + static final String TABLE_RECORDS = "records"; + static final int DATABASE_VERSION = 1; + static final String CREATE_DB_TABLE = + " CREATE TABLE " + TABLE_RECORDS + + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + + " score TEXT NOT NULL, " + + " best TEXT NOT NULL);"; + private static class DatabaseHelper extends SQLiteOpenHelper { + DatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL(CREATE_DB_TABLE); + } + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("DROP TABLE IF EXISTS " + TABLE_RECORDS); + onCreate(db); + } + } + private static HashMap RECORDS_PROJECTION_MAP; + public ContentProviderOfRecords() { + } + @Override + public String getType(Uri uri) {switch (uriMatcher.match(uri)){ + case RECORDS: + return "vnd.android.cursor.dir/vnd.example.students"; + case RECORD_ID: + return "vnd.android.cursor.item/vnd.example.students"; + default: + throw new IllegalArgumentException("Unsupported URI: " + uri); + } + } + @Override + public Uri insert(Uri uri, ContentValues values) { + long rowID = db.insert(TABLE_RECORDS, "", values); + if (rowID > 0) { + Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID); + getContext().getContentResolver().notifyChange(_uri, null); + return _uri; + } + throw new SQLException("无法插入数据 " + uri); + } + @Override + public boolean onCreate() { + Context context = getContext(); + DatabaseHelper dbHelper = new DatabaseHelper(context); + db = dbHelper.getWritableDatabase(); + return (db == null) ? false : true; + } + @Override + public Cursor query(Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); + qb.setTables(TABLE_RECORDS); + switch (uriMatcher.match(uri)) { + case RECORDS: + qb.setProjectionMap(RECORDS_PROJECTION_MAP); + break; + case RECORD_ID: + qb.appendWhere(_ID + "=" + uri.getPathSegments().get(1)); + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + if (sortOrder == null || sortOrder == "") { + sortOrder = SCORE; + } + Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder); + c.setNotificationUri(getContext().getContentResolver(), uri); + return c; + } + @Override + public int update(Uri uri, ContentValues values, String selection, + String[] selectionArgs) { + int count = 0; + switch (uriMatcher.match(uri)) { + case RECORDS: + count = db.update(TABLE_RECORDS, values, selection, selectionArgs); + break; + + case RECORD_ID: + count = db.update(TABLE_RECORDS, values, _ID + " = " + uri.getPathSegments().get(1) + + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs); + break; + + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + getContext().getContentResolver().notifyChange(uri, null); + return count; + } + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + int count = 0; + switch (uriMatcher.match(uri)) { + case RECORDS: + count = db.delete(TABLE_RECORDS, selection, selectionArgs); + break; + case RECORD_ID: + String id = uri.getPathSegments().get(1); + count = db.delete(TABLE_RECORDS, _ID + " = " + id + + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs); + break; + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + getContext().getContentResolver().notifyChange(uri, null); + return count; + } +} \ No newline at end of file diff --git a/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/ResetActivity.java b/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/ResetActivity.java index d85b2027b..e249b6fc4 100644 --- a/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/ResetActivity.java +++ b/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/ResetActivity.java @@ -1,41 +1,61 @@ -import androidx.appcompat.app.AppCompatActivity; - -import androidx.appcompat.app.AppCompatActivity; +package edu.hzuapp.androidlabs.net1814080903141; -import android.content.Intent; +import android.content.ContentValues; +import android.database.Cursor; +import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; -public class HistoryScoreActivity extends AppCompatActivity { - +public class RecordActivity extends AppCompatActivity { + private Button btnclear; + private Button btncheck; + private StringBuilder sb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_history_score); - - Button returnToGame = (Button)findViewById(R.id.returnToGame); - returnToGame.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(); - intent.setClass(HistoryScoreActivity.this, GameActivity.class); - startActivity(intent); - } - } - ); - - Button returnToMain = (Button)findViewById(R.id.returnToMain); - returnToMain.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(); - intent.setClass(HistoryScoreActivity.this, Net1814080903106Activity.class); - startActivity(intent); - } - } - ); - + setContentView(R.layout.activity_record); + + btncheck = findViewById(R.id.btncheak); + btnclear=findViewById(R.id.btnclear); + + final RecordActivity thisActivity = this; + + + btncheck.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + thisActivity.showRecord(); + } + }); + btnclear.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + thisActivity.clearRecord(); + } + }); + } + private void showRecord() { + sb =new StringBuilder(); + Cursor cursor=getContentResolver().query(ContentProviderOfRecords.CONTENT_URI,null,null,null,null); + if (cursor.moveToFirst()){ + do { + int gscore=cursor.getInt(cursor.getColumnIndex(ContentProviderOfRecords.SCORE)); + int gbest=cursor.getInt(cursor.getColumnIndex(ContentProviderOfRecords.BEST)); + sb.append("Score:"+gscore+" "+"Best:"+gbest+"\n"); + ((TextView) findViewById(R.id.trecord)).setText(sb); + }while ((cursor.moveToNext())); + } + cursor.close(); + } + private void clearRecord(){ + getContentResolver().delete(ContentProviderOfRecords.CONTENT_URI,null,null); + Toast.makeText(getBaseContext(), // + "删除成功! \n" + sb.toString(), Toast.LENGTH_LONG).show(); + ((TextView) findViewById(R.id.trecord)).setText(""); } - } \ No newline at end of file diff --git a/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/StartActivity.java b/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/StartActivity.java index 288f2598e..baa7cc347 100644 --- a/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/StartActivity.java +++ b/students/net1814080903214/app/src/main/java/edu/hzuapps/androidlabs/StartActivity.java @@ -1,28 +1,45 @@ -import androidx.appcompat.app.AppCompatActivity; +package edu.hzuapp.androidlabs.net1814080903141; -import android.content.Intent; +import android.content.ContentValues; +import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; public class GameActivity extends AppCompatActivity { - + private Button btnsave; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game); + btnsave=findViewById(R.id.btnsave); + final GameActivity thisActivity=this; + btnsave.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + thisActivity.saveRecord(); + } + }); + } + private void saveRecord() { + String score = ((EditText) findViewById(R.id.tscore)).getText().toString(); + String best = ((EditText) findViewById(R.id.tbest)).getText().toString(); - Button toHistoryScore = (Button)findViewById(R.id.toHistoryScore); - toHistoryScore.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(); - intent.setClass(GameActivity.this, HistoryScoreActivity.class); - startActivity(intent); - } - } - ); - + ContentValues record = new ContentValues(); + record.put(ContentProviderOfRecords.SCORE,score); + record.put(ContentProviderOfRecords.BEST, best); + Uri uri = getContentResolver() + .insert(ContentProviderOfRecords.CONTENT_URI, record); + Toast.makeText(getBaseContext(), + "保存成功! \n" + uri.toString(), Toast.LENGTH_LONG).show(); + this.showRecordInfo("", ""); + } + private void showRecordInfo(String score, String best) { + ((EditText) findViewById(R.id.tscore)).setText(score); + ((EditText) findViewById(R.id.tbest)).setText(best); } } \ No newline at end of file