很抱歉,项目工程找不到,等找到了,加一个 Github 链接。

1.系统需求分析

1.1 系统功能及框图

框图


功能

(1)用户注册。该功能通过填写用户名、密码、确认密码、邮箱号、随机得到的验证码来得到一个属于自己的登录账号和密码。
(2)登录。输入自己的用户名和密码,跳转到通过年月日来测试两个人的星座匹配度。
(3)密码找回。通过注册时使用的邮箱进行密码找回。
(4)通过生日进行星座匹配。
(5)通过星座选择直接进行星座匹配。
(6)通过双方的星座得到星座匹配度。

1.2 系统需求

(1)技术

本系统采用 Android 基本框架。开发工具:Eclipse 软件,Android 开发工具 SDK、ADT 等,一部基于 Android 系统的手机。开发语言:java。操作系统:Windows 10。这些开发工具功能强大并且易得,使得开发此应用程序变得简单方便。

(2)实用性

在当下社会,“星座”是一个很热门的词。双方星座是否匹配也是情侣之间关心的问题之一。并且现在多数手机搭载的是 Android 系统。因此,此应用程序具有社会实用性。

1.3 该项目涉及到的技术点

(1)使用 spinner 实现下拉列表,通过 ArrayAdapter 来插入数据,用于用户去选择星座。
(2)使用 SharedPrefenrences 来记住用户名和密码。使得用户在以后使用此应用程序时可以直接登录,而不需要输入用户和密码。
(3)使用了数据库辅助类 SQLiteOpenHelper 类来进行数据库的操作。数据库中储存了用户名的 ID 号、用户名、密码和邮箱。在用户注册账号时向数据库中增加记录。当用户忘记了密码时可输入邮箱,通过查找数据库找到对应的用户名和密码。
(4)使用 MediaPlayer 来播放音乐。当用户点击登录并且成功登录后,系统会播放一首浪漫的音乐。
(5)通过 Toast 来提示用户什么地方填错了或者注册成功了等等。提高了应用程序的交互性。
(6)在验证码上,通过使用数学的 Random 函数来得到一个验证码。通过字符串 equals 方法来验证填写的密码与确认密码是否一致以及验证码的正确性。
(7)使用 Timer 来实现自动跳转。当用户注册成功后,3s 后会自动跳转到登录界面。
(8)使用 Intent 来进行 Activity 之间的传值以及页面之间的跳转。当用户点击“开始匹配”后,系统会将此页面得到的两个星座传到 Result 这个 Activity 中,从而得出双方的星座匹配度。

2.数据存储设计

2.1 SharedPrefenrence

SharedPreferences 是 Android 平台上一个轻量级的存储类,用来保存应用的一些常用配置。
可以利用 SharedPrefenrence 实现对用户名和密码的存储。使得用户可以在以后的使用过程中直接点击登录按钮进入星座匹配界面,而不需要输入用户名和密码。
具体实现的方法为:首先,创建 SharedPreferences 对象,然后调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象。之后向 SharedPreferences.Editor 对象中添加数据。最后调用 commit 方法将添加的数据提交。
主要代码:

//1.创建SharedPreferences对象和SharedPreferences.Editor对象
SharedPreferences mySP;
SharedPreferences.Editor editor;
String   TABLE_NAME="mytable";
mySP=getSharedPreferences(TABLE_NAME, Activity.MODE_PRIVATE);
editor=mySP.edit();
//2.向SharedPreferences.Editor对象中添加数据
editor.putString("user",user.getText().toString());
editor.putString("password",passwd.getText().toString());
//3.调用commit方法将添加的数据提交
editor.commit();
//4.打开应用程序时填入已经记住的用户名和密码
user.setText(mySP.getString("user",""));
passwd.setText(mySP.getString("password", ""));

2.2 SQLiteOpenHelper 类

通过定义一个辅助类来继承 SQLiteOpenHelper 类,实现对数据库的创建、数据表的创建、数据表的增删改查。
首先定义一个类 DBHelper 继承 SQLiteOpenHelper,在类中重写 onCreate 与 onUpgrade 方法。在数据库首次执行的时候会调用 onCreate 方法来创建数据表。
然后定义一个类 DBService,创建 DBHelper 对象。在 DBService 类里写入数据表的增删改查方法。从而通过调用这些方法实现对数据库的操作。
主要代码:

public class DBHelper extends SQLiteOpenHelper{
    private final static String DATABASE_NAME="table.db";
    private final static int DATABASE_VERSION=1;

    public DBHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE people("
                    +"id INTEGER PRIMARY KEY AUTOINCREMENT, "
                    +"user VARCHAR(20),"
                    +"password VARCHAR(20),"
                    +"email VARCHAR(20))" ;
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}
public class DBService {
    private DBHelper helper;
    public DBService(Context context) {
        this.helper=new DBHelper(context, "table.db", null, 1);
    }
    public void insert(String user,String password,String email){
        String sql = "INSERT INTO people(user,password,email)" +
                "VALUES('"+user+"','"+password+"','"+email+"')";
        SQLiteDatabase db=helper.getWritableDatabase();
        db.execSQL(sql);
    }
    public void delete(String user){
        String sql="delete from people where user='"+user+"'";
        SQLiteDatabase db=helper.getWritableDatabase();
        db.execSQL(sql);
    }
    public Cursor query_byuser(String user){
        SQLiteDatabase db=helper.getReadableDatabase();
        String sql="select * from people where user=?";
        Cursor cursor=db.rawQuery(sql, new String[]{user});
        return cursor;
    }
    public Cursor query_byemail(String email){
        SQLiteDatabase db=helper.getReadableDatabase();
        String sql="select * from people where email=?";
        Cursor cursor=db.rawQuery(sql, new String[]{email});
        return cursor;
    }

}

2.3 数据表结构

数据表有四个属性,分别为 ID 号、用户名、密码、邮箱。ID 号为整形变量并且自动递增,用户名、密码、邮箱均为字符型变量。

3.具体编码及截图

3.1 主界面

主界面有三个 TextView 控件,分别显示“星座匹配”、“用户名”和“密码”。有两个 EditView 控件,分别用来输入用户名和密码。有三个按钮,分别用来实现登录、找回密码和注册账号。
点击“登录”按钮时,系统首先会查找 table.db 数据库的 people 表来判断此用户名是否存在。如果存在此用户名,进而判断密码是否一致。如果用户名和密码一致,则通过 Intent 跳转到星座匹配的页面。如果不一致,通过 Toast 来告诉用户用户名不存在或者密码不正确。并且点击“登录”按钮时会使用 MediaPlayer 来播放一首浪漫的音乐。
如果用户忘记密码时,可以点击“忘记密码”来找回密码。如果用户还没有账号,可以通过点击注册账号来注册自己的账号。
主要代码:

//控件的布局:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/background"
    tools:context="com.example.homework.MainActivity" >

    <TextView
        android:id="@+id/textView_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="180dp"
        android:text="用户名:"
        android:textSize="25sp"/>

     <TextView
        android:id="@+id/textView_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_user"
        android:layout_alignTop="@+id/textView_user"
        android:layout_marginTop="35dp"
        android:text="密码:"
        android:textSize="25sp" />

    <EditText
        android:id="@+id/editText_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_user"
        android:layout_alignParentRight="true"
        android:hint="请输入用户名"
        android:ems="10" />

    <EditText
        android:id="@+id/editText_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_password"
        android:layout_alignParentRight="true"
        android:layout_alignLeft="@+id/editText_user"
        android:ems="10"
        android:hint="请输入密码"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/button_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_password"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView_password"
        android:layout_marginTop="18dp"
        android:background="@drawable/button"
        android:text="登录"
        android:textSize="25sp" />

    <Button
        android:id="@+id/button_forgetpassword"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button_login"
        android:layout_below="@+id/button_login"
        android:background="@android:color/transparent"
        android:text="忘记密码?"
        android:textColor="@color/gray"/>

    <Button
        android:id="@+id/button_register"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button_login"
        android:layout_alignTop="@+id/button_forgetpassword"
        android:background="@android:color/transparent"
        android:text="注册账号"
        android:textColor="@color/gray"/>

    <TextView
        android:id="@+id/textView_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_user"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/editText_user"
        android:layout_marginTop="60dp"
        android:gravity="center"
        android:text="星座匹配"
        android:textSize="50sp"
        android:typeface="monospace"
        android:textColor="@color/pink"/>


</RelativeLayout>

MainActivity.java
public class MainActivity extends Activity {

    EditText user;
    EditText passwd;
    Button   login;
    Button   forget_password;
    Button   register;
    DBService dbService;
    String p_name,p_password;
    SharedPreferences mySP;
    SharedPreferences.Editor editor;
    String   TABLE_NAME="mytable";

    private MediaPlayer mediaPlayer;

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

        user=(EditText) findViewById(R.id.editText_user);
        passwd=(EditText) findViewById(R.id.editText_password);
        login=(Button) findViewById(R.id.button_login);
        forget_password=(Button) findViewById(R.id.button_forgetpassword);
        register=(Button) findViewById(R.id.button_register);
        dbService=new DBService(this);

        mySP=getSharedPreferences(TABLE_NAME, Activity.MODE_PRIVATE);
         editor=mySP.edit();
         user.setText(mySP.getString("user",""));
         passwd.setText(mySP.getString("password", ""));


        login.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                editor.putString("user",user.getText().toString());
                editor.putString("password",passwd.getText().toString());
                editor.commit();
                p_name=user.getText().toString();
                p_password=passwd.getText().toString();
                Cursor cursor=dbService.query_byuser(p_name);
                int flag1=0,flag2=0;
                while(cursor.moveToNext())
                {
                    String name=cursor.getString(cursor.getColumnIndex("user"));
                    if(name.equals(p_name))
                    {
                        flag1=1;
                        String password=cursor.getString(cursor.getColumnIndex("password"));
                        if(p_password.equals(password))
                        {
                            flag2=1;
                            Intent intent =new Intent();
                            intent.setClass(MainActivity.this,Star.class);
                            startActivity(intent);
                            //mediaPlayer= MediaPlayer.create(MainActivity.this,R.raw.testsong);
                            //mediaPlayer.start();
                            mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.xinzuo);
                            mediaPlayer.start();
                        }
                        else
                        {
                            flag2=0;
                        }
                    }
                    else
                    {
                        flag1=0;
                    }
                }
                if(flag1==0)
                {
                    Toast.makeText(getApplicationContext(), "没有此用户名!",Toast.LENGTH_SHORT).show();
                }
                else if(flag2==0)
                {
                    Toast.makeText(getApplicationContext(), "密码不正确!",Toast.LENGTH_SHORT).show();
                }

            }
        });

        forget_password.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(MainActivity.this, FindPasswd.class);
                startActivity(intent);
            }
        });

        register.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(MainActivity.this, Register.class);
                startActivity(intent);
            }
        });


    }
}

真机模拟结果

3.2 各功能模块

(1)使用 SQLite 数据库来创建数据库、创建数据表。实现对数据表的查找、增加。

DBHelper.java
public class DBHelper extends SQLiteOpenHelper{
    private final static String DATABASE_NAME="table.db";
    private final static int DATABASE_VERSION=1;

    public DBHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE people("
                    +"id INTEGER PRIMARY KEY AUTOINCREMENT, "
                    +"user VARCHAR(20),"
                    +"password VARCHAR(20),"
                    +"email VARCHAR(20))" ;
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}
DBService.java
public class DBService {
    private DBHelper helper;
    public DBService(Context context) {
        this.helper=new DBHelper(context, "table.db", null, 1);
    }
     //增
    public void insert(String user,String password,String email){
        String sql = "INSERT INTO people(user,password,email)" +
                "VALUES('"+user+"','"+password+"','"+email+"')";
        SQLiteDatabase db=helper.getWritableDatabase();
        db.execSQL(sql);
    }
     //删
    public void delete(String user){
        String sql="delete from people where user='"+user+"'";
        SQLiteDatabase db=helper.getWritableDatabase();
        db.execSQL(sql);
    }
     //通过用户名查找
    public Cursor query_byuser(String user){
        SQLiteDatabase db=helper.getReadableDatabase();
        String sql="select * from people where user=?";
        Cursor cursor=db.rawQuery(sql, new String[]{user});
        return cursor;
    }
     //通过邮箱查找
    public Cursor query_byemail(String email){
        SQLiteDatabase db=helper.getReadableDatabase();
        String sql="select * from people where email=?";
        Cursor cursor=db.rawQuery(sql, new String[]{email});
        return cursor;
    }

}

(2)注册账号
此功能用于用户账号的注册。布局中使用了 TextView、EditView、Button 控件。
用户需要依次在 EditView 控件中填写用户名、密码、确认密码、邮箱以及验证码。
点击“注册”按钮后,程序会依次进行如下检测:用户名是否为空、密码与确认密码填写是否一致、验证码是否填写正确。如果不正确,系统将通过 Toast 提示。
信息填写正确后,通过 SQLite 数据库,将会将此用户加入 table.db 数据库的 people 表中。
主要代码:

//1.布局文件参考附件的activity_register.xml

//2.利用随机函数产生验证码,利用setText方法使“获取”按钮上的文字变为验证码
public void onClick(View v) {
    // TODO Auto-generated method stub
num=String.valueOf((int)(Math.random()*10000));
    send_identifying_code.setText(num);
}

//3.点击“注册”后,依次检测:用户名是否为空、密码与确认密码是否一致、验证码是否正确。
//检测用户名是否为空
if((user.getText().toString().equals("")))
{
    Toast.makeText(getApplicationContext(), "未填入用户名!",Toast.LENGTH_SHORT).show();
}
//确认两次密码是否一致
if(!(confirm_password.getText().toString().equals(password.getText().toString())))
{
    Toast.makeText(getApplicationContext(), "两次密码不一样!",Toast.LENGTH_SHORT).show();
}
else if(email.getText().toString().equals(""))
{
    Toast.makeText(getApplicationContext(), "邮箱为空!",Toast.LENGTH_SHORT).show();
}
//核实验证码是否正确
else if(!(identifying_code.getText().toString().equals(num)))
{
    Toast.makeText(getApplicationContext(), "验证码不正确!",Toast.LENGTH_SHORT).show();
}

//4.将用户加入table.db数据库的people表中,并且显示注册成功。使用Timer类使得注册界面3秒后返回登录界面
else
{
    p_user=user.getText().toString();
    p_password=password.getText().toString();
p_email=email.getText().toString();
    dbService.insert(p_user, p_password, p_email);
    Toast.makeText(getApplicationContext(), "注册成功!正在跳转回登录界面。。。",Toast.LENGTH_SHORT).show();
    final Intent intent=new Intent();
    intent.setClass(Register.this, MainActivity.class);
    Timer timer=new Timer();
    TimerTask task=new TimerTask(){
        public void run()
        {
            startActivity(intent);
        }
    };
    timer.schedule(task, 1000*3);
}

真机模拟结果

(3)密码找回
密码找回功能使用户可以通过邮箱来找回密码。在布局文件里使用了 TextView 控件显示“邮箱”,EditView 控件用于用户输入邮箱,Button 按钮用于“找回密码”。
当用户输入自己的邮箱后,点击按钮“找回密码”,程序会去数据库中查找此邮箱。如果没有找到此邮箱,将会提示“此邮箱不存在”。如果找到了此邮箱,将会显示此用户的用户名和密码。
主要代码:

//1.布局文件参考附件activity_find_password.xml文件
//2.在数据库里查找此邮箱
find.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        String myemail=email.getText().toString();
        Cursor cursor=dbService.query_byemail(myemail);
        int flag=0;
        while(cursor.moveToNext())
        {
            String p_email=cursor.getString(cursor.getColumnIndex("email"));
            if(p_email.equals(myemail))
            {
                flag=1;
                String s1="查找成功!"+"\n"+"用户名:"+cursor.getString(cursor.getColumnIndex("user"));
                String s2=s1+"\n"+"密码:"+cursor.getString(cursor.getColumnIndex("password"));
                text.setText(s2);
             }
            else
            {
                  flag=0;
            }
        }
        if(flag==0)
        {
            text.setText("未找到此邮箱!");
        }
    }
});

真机模拟结果

(4)根据生日来查找星座。
此功能可以在用户分别输入自己的生日和对方的生日后,找到对应的星座。在布局文件里,使用 TextView 控件分别显示年、月、日。使用 EditView 控件用于用户输入生日的年、月、日。三个个 Button 控件分别为:“开始匹配”、“返回”、“不知道生日?”。
当用户点击“开始匹配”按钮后,系统会首先检测填入的年月日是否合法,例如,月份是否是 1 月-12 月之间的月份。以及检测是否有 EditView 控件中未填入数据。如果填入的数据不合法,将会通过 Toast 来通知用户。如果数据合法,将会使用 Intent 跳转到星座匹配度的界面显示双方的星座匹配度。并且通过 Intent 来传值到 Result 这个 Activity。
当用户点击“返回”按钮时,将会使用 Intent 跳转到登录界面。
考虑到用户可能不知道对方的生日,因此加入了“不知道生日?”按钮。点击此按钮后,系统将使用 Intent 跳转到通过星座直接匹配的界面。
主要代码:

//1.布局文件参考附件activity_star.xml文件
//2.点击“开始匹配”按钮后,检测数据是否合法,若合法将跳转到Result(Activity)并且传值。
int [] a={120,219,321,420,521,622,723,823,923,1024,1123,1222};
int [] b={218,320,419,520,621,722,822,922,1023,1122,1221,119};
String [] s={"水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座"};
star.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
        if(year1.getText().toString().equals("")||year2.getText().toString().equals("")
            ||month1.getText().toString().equals("")||month2.getText().toString().equals("")
            ||day1.getText().toString().equals("")||day2.getText().toString().equals(""))
        {
            Toast.makeText(getApplicationContext(), "信息不完整!",Toast.LENGTH_SHORT).show();
        }
        else
        {
            s1=month1.getText().toString()+day1.getText().toString();
            s2=month2.getText().toString()+day2.getText().toString();
            s3=findstar(Integer.parseInt(s1));
            s4=findstar(Integer.parseInt(s2));
            Intent intent=new Intent();
            intent.putExtra("one",s3);
            intent.putExtra("two",s4);
            intent.setClass(Star.this, Result.class);
            startActivity(intent);
        }
    }
});


//此方法可以通过输入的年月日找到对应的星座
public String findstar(int n)
{
    for(int i=0;i<12;i++)
    {
        if(n>=a[i]&&n<=b[i])
         {
            return s[i];
        }
        if(n>=a[11])
        {
            return s[11];
        }
        if(n<=b[11])
        {
            return s[11];
        }
    }
    return null;
}

//3.点击“返回”按钮时,使用Intent跳转到登录界面。
back.setOnClickListener(new View.OnClickListener() {
    @Override
public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent=new Intent();
        intent.setClass(Star.this, MainActivity.class);
        startActivity(intent);
    }
});

//4.点击“不知道生日?”按钮后,跳转到通过星座直接匹配的界面
star2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent=new Intent();
        intent.setClass(Star.this,Star2.class);
        startActivity(intent);
    }
});

真机模拟结果


(5)直接根据星座进行匹配。
此功能可以使用户直接选择星座来进行星座匹配。布局界面使用了 TextView 控件、Spinner 控件和 Button 控件。Spinner 控件用于选择双方的星座。两个 Button 控件分别为:
“开始匹配”、“返回”。
当用户点击“开始匹配”时,系统将使用 Intent 跳转到 Result 这个 Activity。并且使用 Intent 将双方的星座传值到 Result 中。
当用户点击“返回”时,系统将通过 Intent 返回根据生日来匹配星座的界面。
主要代码:

//1.布局文件参考附件activity_star2.xml文件
//2.使用ArrayAdapter为spinner控件添加数据
String []str={"白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","射手座","摩羯座","水瓶座","双鱼座"};
ArrayAdapter<String> adapter1=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
spinner1.setAdapter(adapter1);
spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub
    s1=parent.getItemAtPosition(position).toString();
    }
@Override
    public void onNothingSelected(AdapterView<?> parent) {
        // TODO Auto-generated method stub
    }

});
ArrayAdapter<String> adapter2=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
spinner2.setAdapter(adapter2);
spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub
s2=parent.getItemAtPosition(position).toString();
    }
@Override
    public void onNothingSelected(AdapterView<?> parent) {
        // TODO Auto-generated method stub
    }
});

3.//点击“开始匹配”,页面跳转并且传值到Result(Activity)
bt1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
         // TODO Auto-generated method stub
        Intent intent=new Intent();
        intent.putExtra("one",s1);
        intent.putExtra("two",s2);
        intent.setClass(Star2.this,Result.class);
        startActivity(intent);
    }
});
bt2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent=new Intent();
        intent.setClass(Star2.this, Star.class);
        startActivity(intent);
    }
});

真机模拟结果

(6)星座匹配。
此功能用于显示星座匹配的结果。
根据 Intent 来传值,得到双方的星座。通过查找输出双方之间的星座匹配度
主要代码:

//1.布局文件参考附件activity_result.xml文件
//2.Intent获取传过来的值
Intent intent=getIntent();
s1=intent.getStringExtra("one");
s2=intent.getStringExtra("two");
myConstellation.setText(s1);
hisContellation.setText(s2);

//3.界面显示结果
for(int i=0;i<72;i++)
{
    if((s1.equals(data[i].myConstellation)&&s2.equals(data[i].hisConstellation))
        ||(s1.equals(data[i].hisConstellation)&&s2.equals(data[i].myConstellation)))
    {
        theAnswer.setText(data[i].details);break;
    }
}

真机模拟结果


4 总结

本次安卓课程学习已经结束。在这次学习中,我们学会了使用 Android 控件来进行页面布局,使用 java 代码来对 Button 按钮的点击事件进行监听,使用 Intent 来启动组件、页面跳转和传递对象,使用 Boardcast 来进行广播,用 MediaPlayer 来播放音乐,用 Service 来后台播放音乐,使用 SharePrefence 和 SQLite 数据库进行数据储存……让我们感觉到无比的充实。并且知道了应用程序究竟是怎么被开发出来的。
这次大作业我们做的是星座匹配度。在开发过程中,我们基本上用到了所有学过的知识。这些知识帮助我们更加顺利的完成了此软件的开发。但是在开发的过程中,也遇到了很多困难。例如,程序失去响应,页面跳转不成功,注册用户时没有将新用户的数据插入数据库等等。于是我们借助互联网工具,参考网上成功的案例,在其中寻找错误产生的原因。经过不懈的努力,终于将一个个问题逐个击破。当各个功能逐个实现时,我们发自内心的开心,让我们知道了学习的意义,获得了学习知识带来的成就感。也让我明白了做一件事不可能是一帆风顺的,没有困难就没有进步,勇敢和坚持将会带领我们走向成功的驿站。简单的把每一步做好,就能铸就未来巨大的成功。
在这次大作业中,也让我懂得了合作的重要性。我们一起完成一个应用,起初,无边的范围让我们这群菜鸟无从下嘴。经过我们的商讨,最终确立了实现的页面要求。之后我们制定了合理的开发计划,一小步一小步的走,一行一行慢慢的写代码。当遇到问题时,我们一起寻找产生的原因以及解决的方法。看着一个个小小功能的实现与完善,我们都很欣慰。在那一行行代码间,流露出来的不只是大家对它付出的汗水,还有那份执着的心。
相信队友,这也是我们在此次大作业中的一点感悟。这个应用程序是需要团队合作来共同完成的。我们不能一个人什么都做完,这样另一个人体会不到团队价值,这不利于应用开发工作的成功完成。我们要让每个人都有事做,并且要做好。
此次大作业的成功完成,也让我们对学习计算机有了更大的信心。在以后的工作和学习过程中,我们会用更加积极的态度去对待每一件事情,用心去完成每一件事情。做一个迎难而上的人,不断完善自己,突破自己。

附件

activity_main.xml

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/background"
    tools:context="com.example.homework.MainActivity" >

    <TextView
        android:id="@+id/textView_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="180dp"
        android:text="用户名:"
        android:textSize="25sp"/>

     <TextView
        android:id="@+id/textView_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_user"
        android:layout_alignTop="@+id/textView_user"
        android:layout_marginTop="35dp"
        android:text="密码:"
        android:textSize="25sp" />

    <EditText
        android:id="@+id/editText_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_user"
        android:layout_alignParentRight="true"
        android:hint="请输入用户名"
        android:ems="10" />

    <EditText
        android:id="@+id/editText_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_password"
        android:layout_alignParentRight="true"
        android:layout_alignLeft="@+id/editText_user"
        android:ems="10"
        android:hint="请输入密码"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/button_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_password"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView_password"
        android:layout_marginTop="18dp"
        android:background="@drawable/button"
        android:text="登录"
        android:textSize="25sp" />

    <Button
        android:id="@+id/button_forgetpassword"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button_login"
        android:layout_below="@+id/button_login"
        android:background="@android:color/transparent"
        android:text="忘记密码?"
        android:textColor="@color/gray"/>

    <Button
        android:id="@+id/button_register"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button_login"
        android:layout_alignTop="@+id/button_forgetpassword"
        android:background="@android:color/transparent"
        android:text="注册账号"
        android:textColor="@color/gray"/>

    <TextView
        android:id="@+id/textView_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_user"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/editText_user"
        android:layout_marginTop="60dp"
        android:gravity="center"
        android:text="星座匹配"
        android:textSize="50sp"
        android:typeface="monospace"
        android:textColor="@color/pink"/>


</RelativeLayout>

MainActivity.java

MainActivity.java
package com.example.homework;

import com.example.homework.R.color;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    EditText user;
    EditText passwd;
    Button   login;
    Button   forget_password;
    Button   register;
    DBService dbService;
    String p_name,p_password;
    SharedPreferences mySP;
    SharedPreferences.Editor editor;
    String   TABLE_NAME="mytable";

    private MediaPlayer mediaPlayer;

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

        user=(EditText) findViewById(R.id.editText_user);
        passwd=(EditText) findViewById(R.id.editText_password);
        login=(Button) findViewById(R.id.button_login);
        forget_password=(Button) findViewById(R.id.button_forgetpassword);
        register=(Button) findViewById(R.id.button_register);
        dbService=new DBService(this);

        mySP=getSharedPreferences(TABLE_NAME, Activity.MODE_PRIVATE);
        editor=mySP.edit();
        user.setText(mySP.getString("user",""));
        passwd.setText(mySP.getString("password", ""));


        login.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                editor.putString("user",user.getText().toString());
                editor.putString("password",passwd.getText().toString());
                editor.commit();
                p_name=user.getText().toString();
                p_password=passwd.getText().toString();
                Cursor cursor=dbService.query_byuser(p_name);
                int flag1=0,flag2=0;
                while(cursor.moveToNext())
                {
                    String name=cursor.getString(cursor.getColumnIndex("user"));
                    if(name.equals(p_name))
                    {
                        flag1=1;
                        String password=cursor.getString(cursor.getColumnIndex("password"));
                        if(p_password.equals(password))
                        {
                            flag2=1;
                            Intent intent =new Intent();
                            intent.setClass(MainActivity.this,Star.class);
                            startActivity(intent);
                            //mediaPlayer= MediaPlayer.create(MainActivity.this,R.raw.testsong);
                            //mediaPlayer.start();
                            //mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.xinzuo);
                            //mediaPlayer.start();
                        }
                        else
                        {
                            flag2=0;
                        }
                    }
                    else
                    {
                        flag1=0;
                    }
                }
                if(flag1==0)
                {
                    Toast.makeText(getApplicationContext(), "没有此用户名!",Toast.LENGTH_SHORT).show();
                }
                else if(flag2==0)
                {
                    Toast.makeText(getApplicationContext(), "密码不正确!",Toast.LENGTH_SHORT).show();
                }

            }
        });

        forget_password.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(MainActivity.this, FindPasswd.class);
                startActivity(intent);
            }
        });

        register.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(MainActivity.this, Register.class);
                startActivity(intent);
            }
        });


    }
}

DBHelper.java

//SQLite数据库
DBHelper.java
package com.example.homework;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.widget.Toast;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper{
    private final static String DATABASE_NAME="table.db";
    private final static int DATABASE_VERSION=1;

    public DBHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE people("
                    +"id INTEGER PRIMARY KEY AUTOINCREMENT, "
                    +"user VARCHAR(20),"
                    +"password VARCHAR(20),"
                    +"email VARCHAR(20))" ;
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

DBService.java

DBService.java
package com.example.homework;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;

public class DBService {
    private DBHelper helper;
    public DBService(Context context) {
        this.helper=new DBHelper(context, "table.db", null, 1);
    }
    public void insert(String user,String password,String email){
        String sql = "INSERT INTO people(user,password,email)" +
                "VALUES('"+user+"','"+password+"','"+email+"')";
        SQLiteDatabase db=helper.getWritableDatabase();
        db.execSQL(sql);
    }
    public void delete(String user){
        String sql="delete from people where user='"+user+"'";
        SQLiteDatabase db=helper.getWritableDatabase();
        db.execSQL(sql);
    }
    public Cursor query_byuser(String user){
        SQLiteDatabase db=helper.getReadableDatabase();
        String sql="select * from people where user=?";
        Cursor cursor=db.rawQuery(sql, new String[]{user});
        return cursor;
    }
    public Cursor query_byemail(String email){
        SQLiteDatabase db=helper.getReadableDatabase();
        String sql="select * from people where email=?";
        Cursor cursor=db.rawQuery(sql, new String[]{email});
        return cursor;
    }

}

activity_register.xml

//注册账号,点击“注册账号”按钮实现用户注册。
activity_register.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/background"
    tools:context="com.example.homework.Register" >

    <TextView
        android:id="@+id/register_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="100dp"
        android:text="用户名:"
        android:textSize="25sp"/>


    <TextView
        android:id="@+id/register_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/register_user"
        android:layout_below="@+id/register_user"
        android:layout_marginTop="15dp"
        android:text="密码:"
        android:textSize="25sp"/>


    <TextView
        android:id="@+id/register_confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/register_password"
        android:layout_marginTop="15dp"
        android:layout_alignLeft="@+id/register_user"
        android:text="确认密码:"
        android:textSize="25sp"/>

    <TextView
        android:id="@+id/register_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"
        android:text="星座匹配"
        android:textSize="50sp"
        android:textColor="@color/pink"/>

    <EditText
        android:id="@+id/editText_register_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/register_password"
        android:layout_toRightOf="@+id/register_confirm"
        android:hint="请输入用户名"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText_register_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/register_password"
        android:layout_alignLeft="@+id/editText_register_user"
        android:ems="10"
        android:inputType="textPassword"
        android:hint="请输入密码"/>

    <EditText
        android:id="@+id/editText_confirm_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/register_confirm"
        android:layout_alignLeft="@+id/editText_register_password"
        android:ems="10"
        android:inputType="textPassword"
        android:hint="请再次输入密码"/>

    <TextView
        android:id="@+id/register_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/register_confirm"
        android:layout_below="@+id/register_confirm"
        android:layout_marginTop="15dp"
        android:text="邮箱:"
        android:textSize="25sp"/>

    <EditText
        android:id="@+id/editText_register_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/register_email"
        android:layout_alignLeft="@+id/editText_confirm_password"
        android:ems="10"
        android:inputType="textEmailAddress"
        android:hint="请输入邮箱"/>

    <TextView
        android:id="@+id/text_findpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText_register_email"
        android:layout_alignRight="@+id/editText_register_email"
        android:layout_below="@+id/editText_register_email"
        android:text="*此邮箱将用于密码找回"
        android:textColor="@color/gray"
        android:gravity="right"/>

    <TextView
        android:id="@+id/register_identifying_code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/register_email"
        android:layout_below="@+id/text_findpassword"
        android:layout_marginTop="35dp"
        android:text="验证码:"
        android:textSize="25sp"/>

    <EditText
        android:id="@+id/editText_register_identifying_code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/register_identifying_code"
        android:layout_alignRight="@+id/register_title"
        android:layout_toRightOf="@+id/register_confirm"
        android:ems="10" />

    <Button
        android:id="@+id/button_register_send_identifying_code"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/editText_register_identifying_code"
        android:layout_alignRight="@+id/text_findpassword"
        android:layout_alignTop="@+id/register_identifying_code"
        android:background="@drawable/button"
        android:text="获取" />

    <Button
        android:id="@+id/button_register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/register_identifying_code"
        android:layout_below="@+id/register_identifying_code"
        android:layout_marginTop="20dp"
        android:text="注册"
        android:textSize="35sp"
        android:background="@drawable/button"/>

</RelativeLayout>

Register.java

Register.java
package com.example.homework;

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Register extends Activity {

    EditText user;
    EditText password;
    EditText confirm_password;
    EditText email;
    EditText identifying_code;
    Button   send_identifying_code;
    Button   register;
    private String num;
    String  p_user,p_password,p_email;
    DBService dbService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        user=(EditText) findViewById(R.id.editText_register_user);
        password=(EditText) findViewById(R.id.editText_register_password);
        confirm_password=(EditText) findViewById(R.id.editText_confirm_password);
        email=(EditText) findViewById(R.id.editText_register_email);
        identifying_code=(EditText) findViewById(R.id.editText_register_identifying_code);
        send_identifying_code=(Button) findViewById(R.id.button_register_send_identifying_code);
        register=(Button) findViewById(R.id.button_register);
        dbService=new DBService(this);
        send_identifying_code.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                num=String.valueOf((int)(Math.random()*10000));
                send_identifying_code.setText(num);
            }
        });
        register.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if((user.getText().toString().equals("")))
                {
                    Toast.makeText(getApplicationContext(), "未填入用户名!",Toast.LENGTH_SHORT).show();
                }
                //确认两次密码是否一致
                if(!(confirm_password.getText().toString().equals(password.getText().toString())))
                {
                    Toast.makeText(getApplicationContext(), "两次密码不一样!",Toast.LENGTH_SHORT).show();
                }
                else if(email.getText().toString().equals(""))
                {
                    Toast.makeText(getApplicationContext(), "邮箱为空!",Toast.LENGTH_SHORT).show();
                }
                //核实验证码是否正确
                else if(!(identifying_code.getText().toString().equals(num)))
                {
                    Toast.makeText(getApplicationContext(), "验证码不正确!",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    p_user=user.getText().toString();
                    p_password=password.getText().toString();
                    p_email=email.getText().toString();
                    dbService.insert(p_user, p_password, p_email);
                    Toast.makeText(getApplicationContext(), "注册成功!正在跳转回登录界面。。。",Toast.LENGTH_SHORT).show();
                    final Intent intent=new Intent();
                    intent.setClass(Register.this, MainActivity.class);
                    Timer timer=new Timer();
                    TimerTask task=new TimerTask(){
                        public void run()
                        {
                            startActivity(intent);
                        }
                    };
                    timer.schedule(task, 1000*3);
                }
            }
        });
    }

}

activity_find_password.xml

//密码找回
activity_find_password.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.homework.FindPassword"
    android:background="@drawable/background">

    <TextView
        android:id="@+id/find_password_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="10dp"
        android:text="邮箱:"
        android:textSize="25sp"/>

    <EditText
        android:id="@+id/editText_find_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/find_password_email"
        android:layout_alignBottom="@+id/find_password_email"
        android:layout_alignParentRight="true"
        android:ems="10"
        android:hint="请输入邮箱">
    </EditText>

    <Button
        android:id="@+id/find_database"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/find_password_email"
        android:layout_below="@+id/find_password_email"
        android:layout_marginTop="16dp"
        android:background="@drawable/button"
        android:text="找回密码" />

    <TextView
        android:id="@+id/show_answer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/find_database"
        android:layout_below="@+id/find_database"
        android:layout_marginTop="64dp"
        android:text=""
        android:textSize="30sp"/>

</RelativeLayout>

FindPassword.java

FindPassword.java
package com.example.homework;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class FindPasswd extends Activity {

    EditText email;
    Button   find;
    TextView text;
    DBService dbService;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_find_passwd);
        email=(EditText) findViewById(R.id.editText_find_email);
        find=(Button) findViewById(R.id.find_database);
        text=(TextView) findViewById(R.id.show_answer);
        dbService=new DBService(this);

        find.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String myemail=email.getText().toString();
                Cursor cursor=dbService.query_byemail(myemail);
                int flag=0;
                while(cursor.moveToNext())
                {
                    String p_email=cursor.getString(cursor.getColumnIndex("email"));
                    if(p_email.equals(myemail))
                    {
                        flag=1;
                        String s1="查找成功!"+"\n"+"用户名:"+cursor.getString(cursor.getColumnIndex("user"));
                        String s2=s1+"\n"+"密码:"+cursor.getString(cursor.getColumnIndex("password"));
                        text.setText(s2);
                    }
                    else
                    {
                        flag=0;
                    }
                }
                if(flag==0)
                {
                    text.setText("未找到此邮箱!");
                }
            }
        });
    }
}

activity_star.xml

//根据生日进行星座匹配
activity_star.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:gravity="right"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.homework.Star" >

    <Button
        android:id="@+id/button_match_bystar"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="@android:color/transparent"
        android:text="不知道生日?"
        android:textColor="@color/purple"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/textView_according_star"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button_match_bystar"
        android:layout_below="@+id/button_match_bystar"
        android:gravity="right"
        android:text="*根据星座匹配"
        android:textColor="@color/gray"/>

    <TextView
        android:id="@+id/textView_mybirthday"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView_according_star"
        android:layout_marginLeft="38dp"
        android:layout_marginTop="64dp"
        android:text="你的生日:"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/textView_year1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_mybirthday"
        android:layout_below="@+id/textView_mybirthday"
        android:layout_marginTop="20dp"
        android:text="年:"
        android:textSize="20sp"/>

    <EditText
        android:id="@+id/editText_year1"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_year1"
        android:layout_toRightOf="@+id/textView_year1"
        android:ems="10"
        android:background="@color/white"/>

    <TextView
        android:id="@+id/textView_month1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/editText_year1"
        android:layout_alignBottom="@+id/editText_year1"
        android:layout_toRightOf="@+id/editText_year1"
        android:text="月:"
        android:textSize="20sp"/>

    <EditText
        android:id="@+id/editText_month1"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/editText_year1"
        android:layout_toRightOf="@+id/textView_month1"
        android:ems="10"
        android:background="@color/white">

    </EditText>

    <TextView
        android:id="@+id/textView_day1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_month1"
        android:layout_toRightOf="@+id/editText_month1"
        android:text="日:"
        android:textSize="20sp"/>

    <EditText
        android:id="@+id/editText_day1"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_day1"
        android:layout_toRightOf="@+id/textView_day1"
        android:ems="10"
        android:background="@color/white"/>

    <TextView
        android:id="@+id/textView_hisbirthsay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_year1"
        android:layout_below="@+id/textView_month1"
        android:layout_marginTop="23dp"
        android:text="他(她)的生日:"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/textView_year2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView_hisbirthsay"
        android:layout_marginTop="22dp"
        android:layout_toLeftOf="@+id/editText_year1"
        android:text="年:"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/editText_year2"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_year2"
        android:layout_toRightOf="@+id/textView_year2"
        android:ems="10"
        android:background="@color/white"/>

    <TextView
        android:id="@+id/textView_month2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/editText_year2"
        android:layout_alignBottom="@+id/editText_year2"
        android:layout_toRightOf="@+id/editText_year2"
        android:text="月:"
        android:textSize="20sp"/>

    <EditText
        android:id="@+id/editText_month2"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/editText_year2"
        android:layout_toRightOf="@+id/textView_month2"
        android:ems="10"
        android:background="@color/white">

    </EditText>

    <TextView
        android:id="@+id/textView_day2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_month2"
        android:layout_toRightOf="@+id/editText_month2"
        android:text="日:"
        android:textSize="20sp"/>

    <EditText
        android:id="@+id/editText_day2"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView_day2"
        android:layout_toRightOf="@+id/textView_day2"
        android:ems="10"
        android:background="@color/white"/>

    <Button
        android:id="@+id/button_star"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView_year2"
        android:layout_below="@+id/textView_month2"
        android:layout_marginTop="28dp"
        android:text="开始匹配"
        android:background="@drawable/button"/>

    <Button
        android:id="@+id/button_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button_star"
        android:layout_alignRight="@+id/editText_day2"
        android:text="返回"
        android:background="@drawable/button"/>

</RelativeLayout>

Star.java

Star.java
package com.example.homework;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Star extends Activity {

    Button star2;
    Button star;
    Button back;
    EditText month1;
    EditText month2;
    EditText day1;
    EditText day2;
    EditText year1;
    EditText year2;
    String s1,s2,s3,s4;
    int [] a={120,219,321,420,521,622,723,823,923,1024,1123,1222};
    int [] b={218,320,419,520,621,722,822,922,1023,1122,1221,119};
    String [] s={"水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_star);

        star2=(Button) findViewById(R.id.button_match_bystar);
        star=(Button) findViewById(R.id.button_star);
        back=(Button) findViewById(R.id.button_back);
        month1=(EditText) findViewById(R.id.editText_month1);
        month2=(EditText) findViewById(R.id.editText_month2);
        day1=(EditText) findViewById(R.id.editText_day1);
        day2=(EditText) findViewById(R.id.editText_day2);
        year1=(EditText) findViewById(R.id.editText_year1);
        year2=(EditText) findViewById(R.id.editText_year2);

        star2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(Star.this,Star2.class);
                startActivity(intent);
            }
        });

        star.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                // TODO Auto-generated method stub
                if(year1.getText().toString().equals("")||year2.getText().toString().equals("")
                        ||month1.getText().toString().equals("")||month2.getText().toString().equals("")
                        ||day1.getText().toString().equals("")||day2.getText().toString().equals(""))
                {
                    Toast.makeText(getApplicationContext(), "信息不完整!",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    s1=month1.getText().toString()+day1.getText().toString();
                    s2=month2.getText().toString()+day2.getText().toString();
                    s3=findstar(Integer.parseInt(s1));
                    s4=findstar(Integer.parseInt(s2));
                    Intent intent=new Intent();
                    intent.putExtra("one",s3);
                    intent.putExtra("two",s4);
                    intent.setClass(Star.this, Result.class);
                    startActivity(intent);
                }

            }
        });

        back.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(Star.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }
    public String findstar(int n)
    {
        for(int i=0;i<12;i++)
        {
            if(n>=a[i]&&n<=b[i])
            {
                return s[i];
            }
            if(n>=a[11])
            {
                return s[11];
            }
            if(n<=b[11])
            {
                return s[11];
            }
        }
        return null;
    }
}

activity_star2.xml

//根据星座直接匹配
activity_star2.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.homework.Star2"
    android:background="@drawable/background">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="38dp"
        android:layout_marginTop="120dp"
        android:text="请选择你的星座:"
        android:textSize="20sp" />

    <Spinner
        android:id="@+id/list1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView2"
        android:layout_alignLeft="@+id/textView2"
        android:layout_marginTop="5dp" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/list1"
        android:layout_alignLeft="@+id/textView2"
        android:text="请选择你心仪人的星座:"
        android:textSize="20sp"
        android:layout_marginTop="20dp"/>

    <Spinner
        android:id="@+id/list2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_alignLeft="@+id/textView2"
        android:layout_marginTop="5dp"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/list2"
        android:layout_marginTop="20dp"
        android:text="开始匹配"
        android:background="@drawable/button"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignRight="@+id/textView1"
        android:text="返回"
        android:background="@drawable/button"/>

</RelativeLayout>

Star2.java

Star2.java
package com.example.homework;

import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;

public class Star2 extends Activity {

    private Spinner spinner1,spinner2;
    Button bt1,bt2;
    String []str={"白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","射手座","摩羯座","水瓶座","双鱼座"};
    String s1,s2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_star2);
        spinner1 = (Spinner) findViewById(R.id.list1);
        spinner2 = (Spinner) findViewById(R.id.list2);
        bt1 = (Button) findViewById(R.id.button1);
        bt2 = (Button) findViewById(R.id.button2);
        ArrayAdapter<String> adapter1=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
        spinner1.setAdapter(adapter1);

        spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub
                s1=parent.getItemAtPosition(position).toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }

        });

        ArrayAdapter<String> adapter2=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
        spinner2.setAdapter(adapter2);

        spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub
                s2=parent.getItemAtPosition(position).toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }
        });

        bt1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.putExtra("one",s1);
                intent.putExtra("two",s2);
                intent.setClass(Star2.this,Result.class);
                startActivity(intent);
            }
        });
        bt2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setClass(Star2.this, Star.class);
                startActivity(intent);
            }
        });
    }
}

activity_result.xml

//星座匹配
activity_result.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.homework.Result" >

    <Button
        android:id="@+id/button_myConstellation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="97dp"
        android:background="@drawable/button2"
        android:text=""
        android:textSize="28sp" />

    <Button
        android:id="@+id/button_hisConstellation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button_myConstellation"
        android:layout_alignBottom="@+id/button_myConstellation"
        android:layout_alignParentRight="true"
        android:layout_marginRight="24dp"
        android:background="@drawable/button2"
        android:text=""
        android:textSize="28sp" />

    <TextView
        android:id="@+id/textView_answer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button_myConstellation"
        android:layout_below="@+id/button_myConstellation"
        android:layout_marginTop="83dp"
        android:textSize="25sp" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button_hisConstellation"
        android:layout_alignBottom="@+id/button_hisConstellation"
        android:layout_centerHorizontal="true"
        android:text="VS"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#FF0000"
        android:textSize="25sp" />

    <View
        android:layout_width="wrap_content"
        android:layout_height="3dp"
        android:layout_alignBottom="@+id/button_myConstellation"
        android:layout_marginBottom="25dp"
        android:layout_toLeftOf="@+id/textView1"
        android:layout_toRightOf="@+id/button_myConstellation"
        android:background="#FF0000" />

    <View
        android:id="@+id/view1"
        android:layout_width="wrap_content"
        android:layout_height="3dp"
        android:layout_alignBottom="@+id/button_myConstellation"
        android:layout_marginBottom="25dp"
        android:layout_toLeftOf="@+id/button_hisConstellation"
        android:layout_toRightOf="@+id/textView1"
        android:background="#FF0000" />


</RelativeLayout>

Constellation.java

Constellation.java
package com.example.homework;

public class Constellation {
    String myConstellation;
    String hisConstellation;
    String details;

    public void Constellation()
    {

    }
    public void Set(String myConstellation, String hisConstellation, String details) {
        // TODO Auto-generated method stub
        this.myConstellation=myConstellation;
        this.hisConstellation=hisConstellation;
        this.details=details;
    }
}

Result.java

Result.java
package com.example.homework;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;

public class Result extends Activity {

    String s1,s2;
    Button myConstellation;
    Button hisContellation;
    TextView theAnswer;
    Constellation [] data=new Constellation[80];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);

        myConstellation=(Button) findViewById(R.id.button_myConstellation);
        hisContellation=(Button) findViewById(R.id.button_hisConstellation);
        theAnswer=(TextView) findViewById(R.id.textView_answer);

        Intent intent=getIntent();
        s1=intent.getStringExtra("one");
        s2=intent.getStringExtra("two");

        myConstellation.setText(s1);
        hisContellation.setText(s2);
        //theAnswer.setText("配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4");

        for(int i=0;i<80;i++)
        {
            data[i]=new Constellation();
        }

        data[0].Set("白羊座", "白羊座", "配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对");
        data[1].Set("白羊座", "金牛座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[2].Set("白羊座", "双子座", "配对指数:90\n配对比重:44.50\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[3].Set("白羊座", "巨蟹座", "配对指数:50\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");
        data[4].Set("白羊座", "狮子座", "配对指数:100\n配对比重:48.52\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生一对");
        data[5].Set("白羊座", "处女座", "配对指数:40\n配对比重:40.60\n两情相悦指数:3\n天长地久指数:1\n结果评述:前途不容乐观的一对");
        data[6].Set("白羊座", "天秤座", "配对指数:60\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:2\n结果评述:相互吸引又互相排斥一对");
        data[7].Set("白羊座", "天蝎座", "配对指数:40\n配对比重:60.40\n两情相悦指数:2\n天长地久指数:2\n结果评述:前途不容乐观的一对");
        data[8].Set("白羊座", "射手座", "配对指数:100\n配对比重:52.48\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生一对");
        data[9].Set("白羊座", "摩羯座", "配对指数:50\n配对比重:42.58\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");
        data[10].Set("白羊座", "水瓶座", "配对指数:90\n配对比重:56.44\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[11].Set("白羊座", "双鱼座", "配对指数:70\n配对比重:46.54\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");

        data[12].Set("金牛座", "金牛座", "配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对");
        data[13].Set("金牛座", "双子座", "配对指数:90\n配对比重:44.50\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[14].Set("金牛座", "巨蟹座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[15].Set("金牛座", "狮子座", "配对指数:50\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");
        data[16].Set("金牛座", "处女座", "配对指数:100\n配对比重:48.52\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[17].Set("金牛座", "天秤座", "配对指数:40\n配对比重:40.60\n两情相悦指数:3\n天长地久指数:1\n结果评述:前途不容乐观的一对");
        data[18].Set("金牛座", "天蝎座", "配对指数:60\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:2\n结果评述:相互又相互吸引的一对");
        data[19].Set("金牛座", "射手座", "配对指数:40\n配对比重:60.40\n两情相悦指数:2\n天长地久指数:2\n结果评述:前途不容乐观的一对");
        data[20].Set("金牛座", "摩羯座", "配对指数:100\n配对比重:52.48\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[21].Set("金牛座", "水瓶座", "配对指数:50\n配对比重:42.58\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");
        data[22].Set("金牛座", "双鱼座", "配对指数:80\n配对比重:56.44\n两情相悦指数:4\n天长地久指数:4\n结果评述:非常理想的一对");

        data[23].Set("双子座", "双子座", "配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对");
        data[24].Set("双子座", "巨蟹座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[25].Set("双子座", "狮子座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[26].Set("双子座", "处女座", "配对指数:50\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力的一对");
        data[27].Set("双子座", "天秤座", "配对指数:100\n配对比重:48.52\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[28].Set("双子座", "天蝎座", "配对指数:40\n配对比重:40.60\n两情相悦指数:3\n天长地久指数:1\n结果评述:前途不容乐观的一对");
        data[29].Set("双子座", "射手座", "配对指数:60\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:2\n结果评述:互相吸引有互相排斥的一对");
        data[30].Set("双子座", "摩羯座", "配对指数:40\n配对比重:60.40\n两情相悦指数:2\n天长地久指数:2\n结果评述:前途不容乐观的一对");
        data[31].Set("双子座", "水瓶座", "配对指数:100\n配对比重:52.48\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[32].Set("双子座", "双鱼座", "配对指数:50\n配对比重:42.58\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");

        data[33].Set("巨蟹座", "巨蟹座", "配对指数:80\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对");
        data[34].Set("巨蟹座", "狮子座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[35].Set("巨蟹座", "处女座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[36].Set("巨蟹座", "天秤座", "配对指数:60\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:2\n结果评述:互相吸引又互相排斥的一对");
        data[37].Set("巨蟹座", "天蝎座", "配对指数:100\n配对比重:48.52\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[38].Set("巨蟹座", "射手座", "配对指数:40\n配对比重:40.60\n两情相悦指数:3\n天长地久指数:1\n结果评述:前途不容乐观的一对");
        data[39].Set("巨蟹座", "水瓶座", "配对指数:40\n配对比重:60.40\n两情相悦指数:2\n天长地久指数:2\n结果评述:前途不容乐观的一对");
        data[40].Set("巨蟹座", "摩羯座", "配对指数:60\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:2\n结果评述:互相吸引有互相排斥的一对");
        data[41].Set("巨蟹座", "双鱼座", "配对指数:100\n配对比重:52.48\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");

        data[42].Set("狮子座", "狮子座", "配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对 ");
        data[43].Set("狮子座", "处女座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[44].Set("狮子座", "天秤座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[45].Set("狮子座", "天蝎座", "配对指数:50\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");
        data[46].Set("狮子座", "射手座", "配对指数:100\n配对比重:48.52\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[47].Set("狮子座", "摩羯座", "配对指数:40\n配对比重:40.60\n两情相悦指数:3\n天长地久指数:1\n结果评述:前途不容乐观的一对");
        data[48].Set("狮子座", "水瓶座", "配对指数:60\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:2\n结果评述:互相吸引有互相排斥的一对");
        data[49].Set("狮子座", "双鱼座", "配对指数:40\n配对比重:60.40\n两情相悦指数:2\n天长地久指数:2\n结果评述:前途不容乐观的一对");

        data[50].Set("处女座", "处女座", "配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对");
        data[51].Set("处女座", "天秤座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[52].Set("处女座", "天蝎座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[53].Set("处女座", "射手座", "配对指数:50\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");
        data[54].Set("处女座", "摩羯座", "配对指数:100\n配对比重:48.52\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[55].Set("处女座", "水瓶座", "配对指数:40\n配对比重:40.60\n两情相悦指数:2\n天长地久指数:1\n结果评述:前途不容乐观的一对");
        data[56].Set("处女座", "双鱼座", "配对指数:60\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:2\n结果评述:互相吸引又互相排斥的一对");

        data[57].Set("天秤座", "天秤座", "配对指数:80\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:2\n结果评述:互相吸引又互相排斥的一对");
        data[58].Set("天秤座", "天蝎座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[59].Set("天秤座", "射手座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[60].Set("天秤座", "摩羯座", "配对指数:50\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:努力维持的一对");
        data[61].Set("天秤座", "水瓶座", "配对指数:100\n配对比重:48.52\n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");
        data[62].Set("天秤座", "双鱼座", "配对指数:40\n配对比重:40.60\n两情相悦指数:3\n天长地久指数:1\n结果评述:前途不容乐观的一对");

        data[63].Set("天蝎座", "天蝎座", "配对指数:80\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:2\n结果评述:互相吸引又互相排斥的一对");
        data[64].Set("天蝎座", "射手座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[65].Set("天蝎座", "摩羯座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[66].Set("天蝎座", "水瓶座", "配对指数:50\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");
        data[67].Set("天蝎座", "双鱼座", "配对指数:100\n配对比重:48.52n两情相悦指数:5\n天长地久指数:5\n结果评述:天生的一对");

        data[68].Set("射手座", "射手座", "配对指数:80\n配对比重:50.50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对");
        data[69].Set("射手座", "摩羯座", "配对指数:70\n配对比重:54.46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对");
        data[70].Set("射手座", "水瓶座", "配对指数:90\n配对比重:44.56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对");
        data[71].Set("射手座", "双鱼座", "配对指数:90\n配对比重:58.42\n两情相悦指数:3\n天长地久指数:2\n结果评述:需要努力维持的一对");

        data[72].Set("摩羯座","摩羯座","配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:还蛮不错的一对");
        data[73].Set("摩羯座","水瓶座","配对指数:70\n配对比重:54:46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对 ");
        data[74].Set("摩羯座","双鱼座","配对指数:90\n配对比重:44:56\n两情相悦指数:5\n天长地久指数:4\n结果评述:非常理想的一对 ");

        data[75].Set("水瓶座","水瓶座","配对指数:80\n配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对");
        data[76].Set("水瓶座","双鱼座","配对指数:70\n配对比重:54:46\n两情相悦指数:4\n天长地久指数:3\n结果评述:还蛮不错的一对 ");

        data[77].Set("双鱼座","双鱼座","配对指数:80\n 配对比重:50:50\n两情相悦指数:4\n天长地久指数:4\n结果评述:相当理想的一对 ");

        for(int i=0;i<72;i++)
        {
            if((s1.equals(data[i].myConstellation)&&s2.equals(data[i].hisConstellation))
                    ||(s1.equals(data[i].hisConstellation)&&s2.equals(data[i].myConstellation)))
            {
                theAnswer.setText(data[i].details);break;
            }
        }

    }


}

button.xml

//按钮的shape
button.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient android:startColor="#c0000000"  android:endColor="#c0000000" android:angle="90" />
    <solid android:color="#00ffffff" />
    <stroke android:width="1dp" android:color="#ff000000" />
    <corners android:radius="10dp" />
    <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />
</shape>
button2.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient android:startColor="#c0000000"  android:endColor="#c0000000" android:angle="90" />
    <solid android:color="#00ffffff" />
    <stroke android:width="3dp" android:color="#FFFF0000" />
    <corners android:radius="10dp" />
    <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />
</shape>
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="pink">#FF82AB</color>
    <color name="gray">#8B7765</color>
    <color name="blue">#B0E0E6</color>
    <color name="purple">#68228B</color>
    <color name="white">#FFFFFF</color>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.homework"
    android:versionCode="1"
    android:versionName="5.2.1" >
 <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="21" />
<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >```````````````
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Register"
            android:label="@string/title_activity_register" >
        </activity>
        <activity
            android:name=".Star"
            android:label="@string/title_activity_star" >
        </activity>
        <activity
            android:name=".FindPasswd"
            android:label="@string/title_activity_find_passwd" >
        </activity>
        <activity
            android:name=".Star2"
            android:label="@string/title_activity_star2" >
        </activity>
        <activity
            android:name=".Result"
            android:label="@string/title_activity_result" >
        </activity>`
    </application>
    <application>
        <uses-library android:name="android.test.runner" />
    </application>

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.example.adtest" >
    </instrumentation>

</manifest>
0
Posted in Android

第 1 章 Android 概述

  1. Android 系统内核基于什么操作系统?
    答:Android 是一个完整的移动操作系统,利用 Linux 作为系统内核。
    实现了存储管理、设备管理、文件管理、进程管理、安全管理等操作系统的基本功能。

  2. Google 发布的基于 Linux 平台的开放源代码移动操作系统平台名称是什么?
    答:Android。

  3. Android 运行的虚拟机名称是什么?虚拟机内运行的字节码文件后缀名是什么?
    答:Android 运行的虚拟机不是 Java 虚拟机,而是经过改造的 Dalvik 虚拟机,
    在虚拟机内运行的并不是 Java 编译后的字节码,而是后缀名为 dex 内部格式文件。

  4. Android 采用什么软件架构?整个系统包括哪几个层次?
    答:Android 采用堆栈式软件架构,整个系统从底层操作系统到顶层核心应用在内分为 5 个层次:
    Linux 内核、Android 运行环境(Android Runtime)、库集合(Libraries)、应用框架(Application Framework)、应用(Application)。

  5. 请列举 Android 的四大常用组件,并简述其特点。
    答:Activity:为应用程序提供一个活动窗口;
    Service:为应用程序提供后台运行服务;
    BroadcastReceiver:为应用程序提供广播消息处理机制;
    ContentProvider:android 中提供多应用程序数据共享。

第 2 章 Android 开发环境与开发工具

  1. Android 开发组件主要包括哪三部分?
    答:Android SDK、Android SDK Tools 和 Android SDK Platform-tools。

  2. Android 提供的专门用于 Eclipse IDE 开发环境可以让 Android SDK 集成到 Eclipse 环境中的插件名称?答:ADT 或 Android Development Tools。

  3. 请根据下图中 Android 工程目录结构,回答以下问题:
    (1)应用项目名称? HelloWorld
    (2)简述 src、gen、res 中 drawable、layout、values 各个文件夹的功能。
    src 文件夹存放项目的源代码;gen 文件夹下面有个 R.java 文件,R.java 是在建立项目时自动生成的,这个文件是只读模式的,不能更改。通过 R.java 我们可以很快地查找我们需要的资源;res 文件夹是资源目录,包含项目中的资源文件并将编译进应用程序;drawable 下存放图片文件;layout 下存放所有布局文件;values 下存放数组、颜色等资源。
    (3)Android 应用项目配置清单文件名称是什么?有什么作用
    答:AndroidManifest.xml 项目的总配置文件,记录应用中所使用的 Activity、Service 等组件以及访问权限的设置等信息。

  4. 搭建基于 Eclipse 的 Android 应用开发环境需要哪些软件及步骤?
    答:
    (1)安装 JDK(Java Development Kit);
    (2)安装 Eclipse;
    (3)安装 Android SDK;
    (4)在 Eclipse 中安装 ADT(或 Android Development Tools)插件。

第 3 章 Android GUI 开发

  1. 什么是 Activity?主要功能是什么?
    答:Activity 是一个独立的可以与用户交互的 Android 应用组件
    功能:作为应用程序框架动态加载各种用户界面视图,实现底层消息传递等,它是一个功能强大的界面管理者,负责调度各种界面视图,实现 Android 应用与用户之间的交互。

  2. 列举四种常用的事件监听处理方法。
    答:基于事件监听内部类实现事件监听处理;基于事件监听内部匿名类实现事件监听处理;Activity 本身作为事件监听器;直接绑定到标签;

  3. 简述利用 ArrayAdapter 适配器为 Spinner 或 AutoCompleteTextView 等组件提供显示内容的操作步骤。
    答:(1)通过 findViewByID 方法建立对象
    (2)提供数据:数据源可以是数组、XML 文件、List集合;
    (3)提供布局;
    (4)建立适配器 ArrayAdapter
    (5)关联适配器

  4. 列举至少四种常用的布局管理器
    答:LinearLayout、RelativeLayout、GridLayout、TableLayout、AbsoluteLayout、FrameLayout 等。

第 4 章 Activity 组件

  1. 什么是 Activity?主要功能是什么?
    答:Activity 是一个独立的可以与用户交互的 Android 应用组件
    功能:作为应用程序框架动态加载各种用户界面视图,实现底层消息传递等,它是一个功能强大的界面管理者,负责调度各种界面视图,实现 Android 应用与用户之间的交互。

  2. Activity 生命周期包括哪些方法?
    答:从 Activity 创建到停止,需经历 OnCreate()、onStart()、OnPause()、onStop()、onDestroy()等。

  3. 启动一个 Android 系统提供的“浏览网页”Activity 的源代码。
    答:
    写法 1:
    Uri uri = Uri.parse(“http://www.baidu.com”);
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    写法 2:
    Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(“http://www.baidu.com”));
    startActivity(intent);
    写法 3:
    intent=new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    uri=Uri.parse(“http://www.baidu.com”);
    intent.setData(uri);
    startActivity(intent);

  4. 启动同一应用程序中的其他 Activity 的方法。
    答:Intent intent=new Intent();
    Intent.setClass(MainActivity.this,otherActivity.class);
    startActivity(intent);

  5. 使用 Intent 和 Bundle 在 Activity 间传递数据的过程。
    答:“宿主 Activity“端的流程
    1)首先创建一个 Intent 和 Bundle 对象,其中 Bundle 用于存储传递的数据;
    2)然后使用 Bundle 的 putXXX 方法输入要传递的数据;
    3)将要传递的数据压入 Intent 中 intent.putExtras(Bundle 对象);
    4)启动“随从 Activity“。
    “随从 Activity“端的流程
    1)接收“宿主 Activity“的 Intent;
    2)传递获得传入的 Bundle 对象;
    3)使用 Bundle 的 get 方法获取要传递的数据。

第 5 章 Android Service 组件

  1. 什么是 Android 的服务?其类名是什么?
    答:(1)Service 是运行在应用后台的一种组件,并没有自己的用户界面,不需要与用户直接交互。
    (2)Service

  2. Service 有哪两种基本用途?
    答:(1)执行长时间运行的耗时操作,如网络下载、音乐播放、文件系统监视等。
    (2)组件间的交互,将某些功能以 Service 组件形式进行封装,提供给其他应用组件调用,其他组件可以与 Service 组件不在同一个进程中

  3. Android 服务有哪两种启动模式?这两种启动模式各自对应的启动方法名称是什么?
    答:Service 启动模式有:
    (1)启动模式,startService()方法
    (2)绑定模式,bindService()方法

  4. 从组件生命周期的角度来看,Activity 或 Service 组件启动时第一个执行的回调方法是什么?
    答:onCreate()

  5. 启动方式和绑定方式下 Service 的生命周期分别执行什么方法?
    答:启动方式:startService-onCreate-onStartCommand-stopService-onDestroy
    绑定方式:bindSerrvice-onCreate-onBind-unBindService-onDestroy

  6. 在调试有关 Service 程序时发现尽管 Java 代码没有错误,但 Servie 组件仍然没有启动,相关的程序片断如下,请你分析该 Service 组件没有启动的原因,并修改 AndroidManifest.xml 文档使 Service 能被启动。
    Main 类中包含启动 Service 的代码(注意:这段代码没有错误):

public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.startService(new Intent(this, CountService.class));
}}

AndroidManifest.xml 文档片断(注意:下面代码存在错误):

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
<activity
            android:name=".main"
            android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

答:
(1)CountService 类未在 AndroidManifest.xml 中注册。
(2)在</activity>节点下加入:

<service android:name=".CountService"></service>

第 6 章 Android 程序间的通信

  1. 什么是 Android 的意图?其对应的类名是什么?
    答:(1)在 Android 中意图表示一个应用组件通知另一个组件去做什么事的意图。本质上来说,意图是 Android 中的一种事件处理机制。在 Android 中, Intent 是用于同一应用或不同应用的组件之间通信的消息对象,可以认为它是一种数据结构,包含对要执行的动作及相关数据的描述,一个组件发出意图(Intent),Android 根据意图(Intent)描述,找到能完成意图动作的组件,同时将意图中携带的数据交给能完成意图对象。
    (2)Android 中意图对应的类名是 Intent。(注意:类名严格区分大小写)

  2. 按创建 Intent 对象时是否明确指定接收组件名称,Intent 可分为哪两种类型?
    答:
    按创建 Intent 对象时是否明确指定接收组件名称,Intent 可分为 Intents 可以分成两种:
    显式意图(Explicit Intent ):Intent 中指定目标组件名称(component name 字段有值)。
    隐式意图(Implicit Intent):Intent 中并不指定目标组件名称 (component name 为空)。

  3. 请简要说明 Intent 中 6 个主要属性名称及功能。
    答:
    Component name:接收并处理 Intent 的组件名称
    Action:用来表示一个要执行的动作( action )名称的字符串
    Data:动作处理数据的 URI 和 MIME 类型
    Category:一个包含何种组件有资格处理 Intent 对象的信息的字符串
    Extras:用于为意图附加信息,附加的信息由键值对构成。
    Flags:Flags 可以为意图设置某种标志,可以用作意图发送者签名。设置了 Flags 的意图启动一个 Activity 后,这个 Activity 可以根据意图中的 Flags 值判断意图来自哪里。

  4. 什么是意图过滤器?其对应的类名是什么?它在 AndroidManifest,xml 文档中的元素名称是什么?
    答:
    (1)意图过滤器( intent filters )是通过将 Intent 对象内容、结构与具有接受意图潜能的组件进行比对,从而找到能处理意图的组件。
    (2)类名:lntentFilter (注意:类名严格区分大小写)
    (3)intent-filter

  5. 如果一个组件没有设置任何 intent filter,它能否接收显式意图?能否接接收隐式意图?那么,设置有 intent filter 的组件能否接收显式意图?。
    答:
    (1)如果一个组件没有任何 intent filters,它就只能接收显式意图;
    (2)不能;
    (3)带有 intent filters 的组件能同时接收显式和隐式意图。

  6. 程序填空:请根据程序注释提示,在空白下划线处补充完成程序代码。

   Button secondbtnservice = (Button)findViewById(R.id.service2);
   secondbtnservice.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
   // 创建一个名为 intent 意图对象
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   // 为该意图对象的 Action 属性字段设置名为 ACTION_VIEW 系统 Action
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   // 将该意图对象的 Data 属性字段设置为 http://www.people.com.cn
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   // 以启动模式发送该意图
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   }
   });

答:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.people.com.cn"));
startActivity(intent);
  1. 请认真阅读下面 AndroidManifest.xml 文档片断,指出是否有错,如果有错应如何修改?
   <application
           android:icon="@drawable/ic_launcher"
           android:label="@string/app_name" >
   <activity
               android:name=".Activity_comm_1"
               android:label="@string/app_name" >
   <intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
   </activity>
   <activity android:name=".Activity_comm_2">
   <intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
   </activity>
   </application>

答:包含如下意图过滤器节点是应用启动主类,一个应用中不允许同时包含两个启动主类,应删除其中一个应用组件的标志启动主类的意图过滤器节点:

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
  1. 程序填空:请根据程序注释提示,在空白下划线处补充完成程序代码。
   Button secondbtnservice = (Button)findViewById(R.id.service2);
   secondbtnservice.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
   // 创建一个名为 intent 意图对象
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   // 为该意图对象的 Action 属性字段设置名为 ACTION_VIEW 系统 Action
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   // 将该意图对象的 Data 属性字段设置为 http://www.people.com.cn
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   // 以启动模式发送该意图
   **\*\*\*\***\*\***\*\*\*\***\_**\*\*\*\***\*\***\*\*\*\***;
   }
   });

答:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.people.com.cn"));
startActivity(intent);
  1. Android 的 Broadcast 本质上是什么机制?发送广播消息有哪几种方法?
    答:Broadcast ( 广播 ) 是一种在 Android 中广泛运用在应用程序之间异步传输信息的机制。发送广播的方法有:sendBroadcast()、sendOrderedBroadcast()和 sendStickyBroadcast( )

  2. 广播消息的处理流程有哪 3 个环节?
    答:广播消息的处理流程包括以下 3 个环节:
    (1)消息发送
    (2)BroadcastReceiver 注册
    (3)消息处理

  3. BroadcastReceiver 对象的主要功能是什么?
    答:BroadcastReceiver 用于接收并处理广播消息,不管是系统消息还是自定义消息都可以通过 BroadcastReceiver 处理。

  4. BroadcastReceiver 作为应用级组件必须经过注册才能处理广播消息,注册有哪两种方式?
    答:
    (1)静态注册:在 AndroidManifest.xml 中用 标签声明,并在节点辖域中用 标签设置过滤器;
    (2)动态注册:在代码中定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调用 Context.registerReceiver(BroadcastReceiver, intentFilter) 方法,撤消注册时,调用 Context.unregisterReceiver(BroadcastReceiver ) 方法。动态注册的 Context 对象被销毁时, BroadcastReceiver 也随之自动注销。

第 7 章 Android 数据存储

  1. 为了保存永久性的应用数据,Android 主要提供了哪几种数据存储方式?
    答:
    (1)Shared Preferences
    以 key-value 对方式保存私有的基本类型数据。
    (2)文件存储
    包括两种方式:在内部存储空间保存私有数据和在外部存储卡上保存公共数据。
    (3)SQLite Databases
    在私有的数据库中存储结构化数据。
    (4)Network Connection
    将数据保存在网络服务器上。
    (5)Android 还提供将私有数据开放给其他应用的途径:Content Provider。
  2. SharedPreferences 以 key-value 对的形式存储信息,请问 key 和 value 的各是什么数据类型?
    答:key 是独一无二的 String 类型名称,value 取值可以是 boolean、float、int、long 和 String 这些基本数据类型的数据。
  3. SharedPreferences 保存在哪里?能否在开发环境所在的文件系统中直接查看?
    答:SharedPreferences 保存在 Android 操作系统内部的文件系统中,位置为:data\data\应用程序报名\share-refs 目录下。不能直接查看内容,需通过 File Explorer 导出查看。 4.描述 SharedPreferences 保存数据的步骤。
    答:(1)根据 Context 的 getSharedPreferences()方法获取 SharedPreferences 对象;
    (2)利用 edit()方法获取 Editor 对象;
    (3)通过 Editor 对象存储 key-value 键值对数据
    (4)通过 commit()方法提交数据

  4. 简述 SQLiteDatabase 类功能及常用方法。
    答:SQLiteDatabase 类代表一个数据库对象,它有创建、删除、添加、更新、查询及事务处理等常用的数据库操作方法。
    SQLiteDatabase 对象提供了直接执行 SQL 语句的方法:execSQL(),可以将 SQL 语句作为该方法的字符串参数,调用该方法可以直接执行各种 SQL 语句,完成对数据库的各种操作。
    此外,SQLiteDatabase 对各种常用的数据库操作,还提供专门方法,取代直接调用 execSQL() 方法执行 SQL 语句。常用的方法有:openDatabase()、create()、insert()、query()、replace()、delete()、deleteDatabase() 等,这些方法依据参数类型和个数不同,提供了不同的重载方法。

  5. 简述 SQLite Cursor 功能和常用方法。
    答:SQLiteCursor 代表查询结果的记录集。SQLiteDatabase 的各种 query() 查询方法都会返回一个 Cursor 对象, Cursor 代表查询到的记录行集合, 它提供了浏览数据库查询结果机制,可以从查询结果中读取行或列数据。
    常用方法有: move()、moveToFirst()、moveToLast()、moveToNext()、moveToPrevious()、getColumnCount()、getColumnIndex()、getColumnName()、getCount()、getDouble()等。

  6. 根据下面程序中注释提示填写所需代码。
    //初始化私有的 SQLiteDatabase 类对象 mSQLiteDatabase 为 null
    (1)

  \***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***\_\_\_\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***;
   private static final String DATABASE_NAME = "Test.db";
   private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS "
   - TABLE_NAME + " (" + \_ID + " INTEGER PRIMARY KEY,"
   - NAME + " TEXT," + AGE + " INTEGER)";
     try {
     //按 Activity.MODE_PRIVATE 模式打开或创建 DATABASE_NAME 指定的数据库,
     //并保存到 SQLiteDatabase 类对象 mSQLiteDatabase 中
     (2)\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***\_\_\_\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***;
     //调用 mSQLiteDatabase 对象的 exeSQL()方法执行 CREATE_TABLE 指定的 SQL 语句
     (3)\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***\_\_\_\***\*\*\*\*\***\*\*\*\*\***\*\*\*\*\***;
     } catch (Exception ex) {
     ShowDialog("数据库操作异常:" + ex.getMessage());
     }
 答:
   (1)private SQLiteDatabase mSQLiteDatabase = null;
   (2)mSQLiteDatabase = openOrCreateDatabase(DATABASE_NAME, Activity.MODE_PRIVATE, null);
   (3)mSQLiteDatabase.execSQL(CREATE_TABLE);
  1. 根据你的理解,Content Provider 和 Content Resolver 两者间是什么关系?
    答:
    (1)应用程序可以通过客户端 ContentResolver 对象访问一个 Content Provider 中数据, ContentResolver 有与 Content Provider 对象中对应名称的方法(Method),调用这些方法完成基本的 “CRUD” (Create, Retrieve, Update, and Delete) 操作。
    (2)ContentResolver 对象在客户应用进程中,而 ContentProvider 对象是在数据提供者的应用中,两者配合处理进程间通讯。
    (3)ContentProvider 实际上还负责将内部数据转换成对外的表格形式,ContentProvider 可以为多个不同的 ContentResolver 提供服务。

第 8 章 Android 资源与国际化

  1. Android 中使用的资源包括哪些?
    答:在 Android 应用程序中经常使用的资源有字符串、菜单、图像、声音、视频、颜色、布局文件、样式和主题等。

  2. res/values 目录下的 strings.xml 文件中有一个标签:张三,请写出在代码中和布局中设置 TextView 对象 tv 的 Text 属性的代码。
    答:代码中:tv.setText(getResources().getString(R.string.username));
    布局中:android:text=”@string/username”

  3. 使用系统提供的颜色资源在代码中和布局中分别设置 TextView 的背景色。
    答:在布局中:android:background=”@android:color/black”
    在代码中:tv.setBackgroundColor(getResources().getColor(android.R.color.black));

简答题

  1. ListView 使用的基本步骤:
    (1)得到 ListView 类型的对象;
    (2)生成适配器对象。并设置数据;
    (3)把适配器对象设置为 ListView 的适配器;
    (4)设置监听器监听事件的发生。

  2. 简述用 SQLiteDatabase 进行数据库操作的步骤?
    (1)获取 SQLiteDatabase 对象,它代表了与数据库的连接。
    (2)调用 SQLiteDatabase 的方法来执行 SQL 语句。
    (3)操作 SQL 语句的执行结果。
    (4)关闭 SQLiteDatabase,回收资源。

  3. 简述 Android 系统中运行 service 的两种方式:
    (1)通过 Context 的 startService():访问者与 Service 之间没有关联,即使访问者退出,Service 也仍然运行。
    (2)通过 Context 的 bindService():访问者与 Service 绑定在一起,访问者一旦退出,Service 也就终止了。

选择题

  1. android 中下列属于 Intent 的作用的是(c)
    A、实现应用程序间的数据共享
    B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
    C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
    D、处理一个应用程序整体性的工作

  2. 在 android 中使用 SQLiteOpenHelper 这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(b)
    A、setWriteableDatabase()
    B、getReadableDatabase()
    C、getDatabase()
    D、getAbleDatabase()

  3. android 关于 service 生命周期的 onCreate()和 onStart()说法正确的是(d)
    A、当第一次启动的时候先后调用 onStart()和 onCreate()方法
    B、当第一次启动的时候只会调用 onCreate()方法
    C、如果 service 已经启动,将先后调用 onCreate()和 onStart()方法
    D、如果 service 已经启动,只会执行 onStart()方法,不在执行 onCreate()方法

  4. Android 项目工程下面的 assets 目录的作用是什么 b
    A、放置应用到的图片资源。
    B、主要放置多媒体等数据文件
    C、放置字符串,颜色,数组等常量数据
    D、放置一些与 UI 相应的布局文件,都是 xml 文件

  5. 关于 res/raw 目录说法正确的是(a)
    A、 这里的文件是原封不动的存储到设备上不会转换为二进制的格式
    B、 这里的文件是原封不动的存储到设备上会转换为二进制的格式
    C、 这里的文件最终以二进制的格式存储到指定的包中
    这里的文件最终不会以二进制的格式存储到指定的包中

  6. 下列哪项不是 Android 四大组件 ( C )
    A.Seivice B. Activity C. Handler D. Content Provider

  7. Android 是如何组织 Activity 的 ( B )
    A.以堆的方式组织 Activity B. 以栈的方式组织 Activity
    C. 以树形方式组织 Activity D. 以链式方式组织 Activity

  8. 设置 xml 布局文件中的字体大小一般用什么单位 ( c )
    A.dp B. px C. sp D. pt

  9. 关于 BroadcastReceiver 的说法不正确的是 ( B )
    A.是用来接收广播 Intent 的
    B.一个广播 Intent 只能被一个订阅了此广播的 BroadcastReceiver 所接收
    C.对有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者
    D.接收者声明的优先级别在的 android:priority 属性中声明,数值越大 优先级别越高

  10. 在手机开发中常用的数据库是( A )
    A,sqlLite B,Oracle C,Sql Server D,Db2

  11. 使用 MediaPlayer 播放保存在 sdcard 上的 mp3 文件时(A )
    A,需要使用 MediaPlayer.create 方法创建 MediaPlayer
    B,直接 newMediaPlayer 即可
    C,需要调用 setDataSource 方法设置文件源
    D,直接调用 start 方法,无需设置文件源

  12. 能够自动完成输入内容的组件是(D)
    A,TextView B,EditText C,ImageView
    D,AutoCompleteTextView

  13. 关于 android 中播放视频的说法不对的是(A)
    A,可以使用 SurfaceView 组件播视频
    B,可以使用 VideoView 组件播视频
    C,VideoView 组件可以控制播放的位置和大小
    D,VideoView 播放视频的格式可以是 3gp

  14. 关于适配器的说法正确的有( B )
    A.它主要是用来存储数据
    B.它主要用来把数据绑定到组件上
    C.它主要用来解析数据
    D.它主要用来存储 xml 数据

  15. 在 android 中,ArrayAdapter 类是用于( A )
    A.用于把数据绑定到组件上
    B.它能把数据显示到 Activity 上
    C.它能把数据传递给广播
    D.它能把数据传递给服务

  16. 以下可以实现进程间数据通信的是( )
    A、Intent
    B、AIDL
    C、Broadcast
    D、Content Provider

0
Posted in Android