Android设计一个答题APP

MyDateBase.java

package chzu.csci.pwn;

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

public class MyDataBase extends SQLiteOpenHelper {

    private static final String DB_NAME="2017211808.db";
    private static final int DB_VERSION=1;

    MyDataBase(Context context){
        super(context,DB_NAME,null,DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(//第一次运行时新建一个USER表,并且插入初始数据
                "CREATE TABLE USER (_id INTEGER PRIMARY KEY AUTOINCREMENT,"
                        +"NAME TEXT,"
                        +"PASSWORD TEXT,"
                        +"SCORE INTEGER);"
        );
        db.execSQL(//第一次运行时新建一个TEST表,并且插入初始数据
                "CREATE TABLE TEST (_id INTEGER PRIMARY KEY AUTOINCREMENT,"
                        +"TITLE TEXT,"
                        +"QUESTION TEXT,"
                        +"OPTA TEXT,"
                        +"OPTB TEXT,"
                        +"OPTC TEXT,"
                        +"OPTD TEXT,"
                        +"REFANSWER TEXT,"
                        +"ANSWER TEXT,"
                        +"SCORE INTEGER);"
        );
        insertUser(db,"PWN","2017211808",0);
        insertTest(db,"试题1","下列哪一个不属于Activity的生命周期方法?",
                "onInit()","onStart()","onStop()","onPause()","A",50);
        insertTest(db,"试题2","下列关于线程的说法中,错误的是?","Android主线程中可以创建新的线程",
                "主线程中创建的线程可以操作UI组件","新线程可以和Handler共同使用","创建的Handler对象隶属于创建它的线程","B",50);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public void insertUser(SQLiteDatabase db,String name,String password,int score){
        ContentValues value=new ContentValues();
        value.put("NAME",name);
        value.put("PASSWORD",password);
        value.put("SCORE",score);
        db.insert("User",null,value);
    }

    public void insertTest(SQLiteDatabase db,String title,String question,String a,String b,String c,String d,String ref,int score){
        ContentValues value=new ContentValues();
        value.put("TITLE",title);
        value.put("QUESTION",question);
        value.put("OPTA",a);
        value.put("OPTB",b);
        value.put("OPTC",c);
        value.put("OPTD",d);
        value.put("REFANSWER",ref);
        value.put("SCORE",score);
        db.insert("Test",null,value);
    }

}

MainActivity

package chzu.csci.pwn;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    public Cursor cursor;

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


    public void login(View view) {
        SQLiteOpenHelper helper=new MyDataBase(this);
        SQLiteDatabase db=helper.getReadableDatabase();
        EditText name=(EditText)findViewById(R.id.name);
        EditText pwd=(EditText)findViewById(R.id.pwd);
        String nameInput=String.valueOf(name.getText());
        String pwdInput=String.valueOf(pwd.getText());
        cursor=db.query("USER",new String[]{"_id"},"NAME=? and PASSWORD=?",
                new String[]{nameInput,pwdInput},null,null,null);
        if(cursor.moveToFirst()){
            Intent intent=new Intent(MainActivity.this,TestActivity.class);
            intent.putExtra("NAME",nameInput);
            startActivity(intent);
        }else{
            Toast.makeText(this,"系统中无此用户",Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cursor.close();
    }
}

MusicService.java

package chzu.csci.pwn;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

import androidx.annotation.Nullable;

public class MusicService extends Service{

    private MediaPlayer mediaPlayer;

    //Service初始化时调用
    public void onCreate(){
        super.onCreate();
        mediaPlayer = MediaPlayer.create(this, R.raw.notice);//这里注意将音乐文件修改成自己的
    }

    public class MusicBinder extends Binder{
        MusicService getMusic(){
            return MusicService.this;
        }
    }

    private IBinder binder=new MusicBinder();

    @Override
    public IBinder onBind(Intent intent) {
        if(!mediaPlayer.isPlaying()){
            // 开始播放
            mediaPlayer.start();
            // 允许循环播放
            mediaPlayer.setLooping(true);
        }
        return binder;
    }

    public boolean onUnbind(Intent intent) {
        if(mediaPlayer.isPlaying()){
            mediaPlayer.stop();
        }
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //先停止 再释放
        if(mediaPlayer.isPlaying()){
            mediaPlayer.stop();
        }
        mediaPlayer.release();

    }
    public MusicService() {
    }
}

TestActivity.java

package chzu.csci.pwn;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class TestActivity extends AppCompatActivity {

    public static boolean running=true;
    public static int seconds=0;
    public static boolean wasRunning=false;
    private Cursor cursor;
    public String loginUser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        if(savedInstanceState!=null){
            seconds=savedInstanceState.getInt("seconds");
            running=savedInstanceState.getBoolean("running");
            wasRunning=savedInstanceState.getBoolean("wasRunning");
        }
        loginUser=getIntent().getStringExtra("NAME");
        runTimer();
        init();
        setlistClick();
    }

    private void init(){
        TextView welcome=(TextView)findViewById(R.id.welcome);
        welcome.setText("欢迎您,"+loginUser+"!");
        ListView listView=(ListView)findViewById(R.id.question);
        SQLiteOpenHelper helper=new MyDataBase(this);
        try{
            SQLiteDatabase db=helper.getReadableDatabase();
            cursor= db.query("TEST",new String[]{"_id","TITLE"},null,null,null,null,null);
            SimpleCursorAdapter listAdapter=new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,
                    cursor,new String[]{"TITLE"},new int[]{android.R.id.text1},0);
            listView.setAdapter(listAdapter);
        }catch (SQLException e){
            Toast.makeText(this,"DataBase unavalibale",Toast.LENGTH_SHORT).show();
        }
    }

    //设置列表点击监听器
    protected void setlistClick(){
        ListView listView=(ListView)findViewById(R.id.question);
        AdapterView.OnItemClickListener itemClickListener=new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent=new Intent(TestActivity.this,QuestionDetailActivity.class);
            intent.putExtra("ID",(int)id);
            startActivity(intent);
            }
        };
        listView.setOnItemClickListener(itemClickListener);
    }

    private void runTimer(){
        final TextView textView=findViewById(R.id.time);
        final Handler handler=new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                int hours=seconds/3600;
                int minutes=(seconds%3600)/60;
                int sec=seconds%60;
                String time=String.format("%d:%02d:%02d",hours,minutes,sec);
                textView.setText(time);
                if(running){
                    seconds++;
                }
                handler.postDelayed(this,1000);
            }
        });
    }

    @Override
    protected void onStop() {
        super.onStop();
        wasRunning=running;
        running=false;
    }

    @Override
    protected void onStart() {
        super.onStart();
        if(wasRunning){
            running=true;
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean("running",running);
        outState.putInt("seconds",seconds);
        outState.putBoolean("running",wasRunning);
    }

    public void submit(View view) {
        SQLiteOpenHelper helper=new MyDataBase(this);
        int sum=0;
        SQLiteDatabase db=helper.getWritableDatabase();
        cursor= db.query("TEST",new String[]{"_id","REFANSWER","ANSWER","SCORE"},null,
                null,null,null,null);
        while (cursor.moveToNext()){
            String ref=cursor.getString(1);
            String answer=cursor.getString(2);
            int score=cursor.getInt(3);
            if(ref.equals(answer)){
                sum+=score;
            }
        }
        ContentValues bankvalues=new ContentValues();
        bankvalues.put("SCORE",sum);
        db.update("USER",bankvalues,"NAME=?",new String[]{loginUser});
        Intent intent=new Intent(TestActivity.this,FinishActivity.class);
        intent.putExtra("NAME",loginUser);
        startActivity(intent);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cursor.close();
    }
}

QuestionDetailActivity.java

package chzu.csci.pwn;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class QuestionDetailActivity extends AppCompatActivity {

    private Cursor cursor;
    public Integer id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_question_detail);
        id=getIntent().getIntExtra("ID",0);
        init();
    }

    private void init(){
        SQLiteOpenHelper helper=new MyDataBase(this);
        RadioButton a=(RadioButton)findViewById(R.id.a);
        RadioButton b=(RadioButton)findViewById(R.id.b);
        RadioButton c=(RadioButton)findViewById(R.id.c);
        RadioButton d=(RadioButton)findViewById(R.id.d);
        TextView title=(TextView)findViewById(R.id.title);
        TextView question=(TextView)findViewById(R.id.question);
        try{
            SQLiteDatabase db=helper.getReadableDatabase();
            cursor= db.query("TEST",new String[]{"_id","TITLE","QUESTION","OPTA","OPTB","OPTC","OPTD","ANSWER"},"_id=?",
                    new String[]{Integer.toString(id)},null,null,null);
            if(cursor.moveToFirst()){
                title.setText(cursor.getString(1));
                question.setText(cursor.getString(2));
                a.setText(cursor.getString(3));
                b.setText(cursor.getString(4));
                c.setText(cursor.getString(5));
                d.setText(cursor.getString(6));
                String answer=cursor.getString(7)!=null?cursor.getString(7):"";
                if(answer.equals("A")){
                    a.setChecked(true);
                }else if(answer.equals("B")){
                    b.setChecked(true);
                }else if(answer.equals("C")){
                    c.setChecked(true);
                }else if(answer.equals("D")){
                    d.setChecked(true);
                }
            }
        }catch (SQLException e){
            Toast.makeText(this,"DataBase unavalibale",Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cursor.close();
    }

    public void submit(View view) {
        RadioGroup select=(RadioGroup)findViewById(R.id.select);
        int size=select.getChildCount();
        String key[]={"A","B","C","D"};
        for(int i=0;i<size;i++){
            RadioButton temp=(RadioButton) select.getChildAt(i);
            if(temp.isChecked()){
                SQLiteOpenHelper helper=new MyDataBase(this);
                SQLiteDatabase db=helper.getWritableDatabase();
                ContentValues bankvalues=new ContentValues();
                bankvalues.put("ANSWER",key[i]);
                db.update("TEST",bankvalues,"_id=?",new String[]{Integer.toString(id)});
                Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();
            }
        }
    }
}

FinishActivity.java

package chzu.csci.pwn;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.TextView;

public class FinishActivity extends AppCompatActivity {

    public String loginUser;
    private Cursor cursor;
    private MusicService musicService;
    private ServiceConnection connection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_finish);
        connection=new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                MusicService.MusicBinder binder=(MusicService.MusicBinder)service;
                musicService=binder.getMusic();
            }

            @Override
            public void onServiceDisconnected(ComponentName name) { }
        };
        loginUser=getIntent().getStringExtra("NAME");
        init();
    }

    public void init(){
        TextView stuNo=(TextView)findViewById(R.id.stuNo);
        TextView timeuse=(TextView)findViewById(R.id.timeuse);
        TextView score=(TextView)findViewById(R.id.score);
        SQLiteOpenHelper helper=new MyDataBase(this);
        SQLiteDatabase db=helper.getReadableDatabase();
        cursor= db.query("USER",new String[]{"_id","SCORE"},"NAME=?",
                new String[]{loginUser},null,null,null);
        if(cursor.moveToFirst()){
            stuNo.setText("姓名:"+loginUser);
            timeuse.setText("用时:"+String.valueOf(TestActivity.seconds)+"秒");
            int getScore=cursor.getInt(1);
            score.setText("得分:"+getScore);
            if(getScore==100){
                Intent intent = new Intent(this,MusicService.class);
                bindService(intent,connection,BIND_AUTO_CREATE);
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cursor.close();
        unbindService(connection);
    }

    public void anain(View view) {
        TestActivity.seconds=0;
        Intent intent=new Intent(this,MainActivity.class);
        startActivity(intent);
        unbindService(connection);
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="姓名"
                android:textSize="24sp" />

            <EditText
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:hint="请输入姓名"
                android:inputType="textPersonName" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="密码"
                android:textSize="24sp" />

            <EditText
                android:id="@+id/pwd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:hint="请输入密码"
                android:inputType="textPassword" />

        </LinearLayout>

        <Button
            android:id="@+id/button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="登录"
            android:onClick="login"
            android:textSize="24sp" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

activity_test.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".TestActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/welcome"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="欢迎"
            android:textSize="24sp" />

        <TextView
            android:id="@+id/time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="00:00:00"
            android:textSize="60sp" />

        <ListView
            android:id="@+id/question"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/commit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="submit"
            android:text="提交"
            android:textSize="24sp" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

activity_question_detail.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".QuestionDetailActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="题目"
            android:textSize="28sp" />

        <TextView
            android:id="@+id/question"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="122222222222222222222222222222222222222222222222"
            android:textSize="24sp" />

        <RadioGroup
            android:id="@+id/select"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <RadioButton
                android:id="@+id/a"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="RadioButton"
                android:checked="true"
                android:textSize="24sp" />

            <RadioButton
                android:id="@+id/b"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="RadioButton"
                android:textSize="24sp" />

            <RadioButton
                android:id="@+id/c"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="RadioButton"
                android:textSize="24sp" />

            <RadioButton
                android:id="@+id/d"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="RadioButton"
                android:textSize="24sp" />
        </RadioGroup>

        <Button
            android:id="@+id/submit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="提交"
            android:onClick="submit"
            android:textSize="24sp" />

    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

activity_finish.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FinishActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/stuNo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:textSize="24sp" />

        <TextView
            android:id="@+id/timeuse"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:textSize="24sp" />

        <TextView
            android:id="@+id/score"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:textSize="24sp" />

        <Button
            android:id="@+id/again"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="重做一次"
            android:onClick="anain"
            android:textSize="24sp" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="chzu.csci.pwn">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".FinishActivity"></activity>
        <activity android:name=".QuestionDetailActivity" />
        <activity android:name=".TestActivity" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
发布了5 篇原创文章 · 获赞 8 · 访问量 1312

猜你喜欢

转载自blog.csdn.net/pwn2017211808/article/details/103824627