移动终端设计实验 实验5:数据存储实验
来源:互联网 发布:ubuntu 游戏 编辑:程序博客网 时间:2024/04/27 02:00
实验5:数据存储实验
一、 实验目的
本次实验的目的是掌握Android的数据存储:SharedPrefenrence、文件存储以及SQLite存储。重点掌握SQLite数据库的创建或打开、创建表、插入数据、删除数据、查询数据、修改数据等操作。
二、 实验环境
Windows7 Eclipse MARS.2 AVD虚拟机
三、实验内容及结果
题目1
设计一个虚拟模拟器配置界面(可选择其中部分选项)。要求:(1)Activity启动后,能够自动读取配置文件,并将配置信息显示在界面中;
(2)当退出Activity时,将设置的配置信息存入文件中。
代码实现:
Activity_main.xml
<LinearLayoutxmlns: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:orientation="vertical"
>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:rowCount="3"
android:columnCount="2"
>
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="0"
android:text="AVD Name:"/>
<EditText
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="1"
android:hint="Please Input Your Name"
>
</EditText>
<TextView
android:id="@+id/DreamText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="0"
android:text="Dream:"/>
<EditText
android:id="@+id/Dream"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="1"
android:hint="Please Input Your Dream"/>
<TextView
android:id="@+id/SkinText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="2"
android:layout_column="0"
android:text="Skin:"/>
<Spinner
android:id="@+id/Skin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="2"
android:layout_column="1"
></Spinner>
</GridLayout>
<TextView
android:id="@+id/HobbyText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hobby:"/>
<CheckBox
android:id="@+id/basketball"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="basketball"/>
<CheckBox
android:id="@+id/chess"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="chess"/>
<CheckBox
android:id="@+id/shopping"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="shopping"/>
<TextView
android:id="@+id/SexText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sex:"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="male"/>
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="female"/>
</RadioGroup>
</LinearLayout>
MainActivity.java
package com.example.psharedpreference;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.
SharedPreferences.Editor;
import android.os.Bundle;
importandroid.view.Menu;
importandroid.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
publicclass MainActivityextends Activity {
EditText name,dream;
CheckBox basketball,chess,shopping;
SharedPreferences sp;
Editor editor;
String inputname,inputdream;
Boolean selectbasket,selectchess,selectshop;
Spinner spi;
String colors[]={"Red","Blue","Green"};
@Override
protectedvoid onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name=(EditText)findViewById(R.id.name);
dream=(EditText)findViewById(R.id.Dream);
basketball=(CheckBox)findViewById(R.id.basketball);
chess=(CheckBox)findViewById(R.id.chess);
shopping=(CheckBox)findViewById(R.id.shopping);
spi=(Spinner)findViewById(R.id.Skin);
ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,android.R.layout.
simple_list_item_1,colors);
spi.setAdapter(adapter);
adapter.setDropDownViewResource
(android.R.layout.select_dialog_singlechoice);
sp=getSharedPreferences
("myAVD",Activity.MODE_PRIVATE);
editor=sp.edit();
name.setText(sp.getString("name",""));
dream.setText(sp.getString("dream",""));
basketball.setChecked(sp.getBoolean("basketball",false));
chess.setChecked(sp.getBoolean("chess",false));
shopping.setChecked(sp.getBoolean("shopping",false));
}
@Override
protectedvoid onStop() {
// TODO Auto-generated method stub
inputname=name.getText().toString();
inputdream=dream.getText().toString();
selectbasket=basketball.isChecked();
selectchess=chess.isChecked();
selectshop=shopping.isChecked();
editor.putString("name",inputname);
editor.putString("dream",inputdream);
editor.putBoolean("basketball",selectbasket);
editor.putBoolean("chess",selectchess);
editor.putBoolean("shopping",selectshop);
editor.commit();
super.onStop();
}
}
题目2
设计一个通讯录程序,实现SQLite数据库的增、删、改、查功能。具体要求如下:
(1) 建立一个friends.db数据库,包含一个friend数据表,主要包含name、phone和email字段;
(2) 设计一个录入界面,将录入的朋友信息保存到表friend中;
(3) 设计一个删除界面,能够根据name字段删除朋友信息;
(4) 设计一个修改界面,能够修改指定人的phone或email信息;
(5) 设计一个查询界面,根据name字段进行查询,并将查询结果显示在ListView中。
备注:可以通过SQLite数据库的相关方法和语句实现;也可借助SQLiteOpenHelper辅助类实现。
代码实现:
MainActivity.java
package com.example.psqliteopenhelper;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
Button insert,query,modify,delete;
ListView listview;
DBService dbservice;
Builder alertDialog;
View addview;
EditText name,phone,email;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
insert=(Button)findViewById(R.id.insert);
query=(Button)findViewById(R.id.query);
modify=(Button)findViewById(R.id.modify);
delete=(Button)findViewById(R.id.delete);
listview=(ListView)findViewById(R.id.list);
LayoutInflater layoutInflater=LayoutInflater.from(this);
addview=layoutInflater.inflate(R.layout.add,null);
name=(EditText)addview.findViewById(R.id.name);
phone=(EditText)addview.findViewById(R.id.phone);
email=(EditText)addview.findViewById(R.id.email);
dbservice=new DBService(this);
insert.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Toast.makeText(MainActivity.this, "kkkkkkkkk", 1).show();
alertDialog=new AlertDialog.Builder(MainActivity.this);
alertDialog.setIcon(R.drawable.ic_launcher);
alertDialog.setTitle("请添加您的盆友");
//alertDialog.setMessage("lalallallalalqal");
alertDialog.setView(addview);
alertDialog.setPositiveButton("submit",new DialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String inputName=name.getText().toString();
intinputPhone=Integer.parseInt(phone.getText().toString());
String inputEmail=email.getText().toString();
dbservice.insert(inputName,inputPhone, inputEmail);
Toast.makeText(MainActivity.this,"成功插入数据", 1).show();
((ViewGroup)addview.getParent()).removeView(addview);
}
});
alertDialog.setNegativeButton("cancel",new DialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
alertDialog.create();
alertDialog.show();
}
});
query.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Cursor cursor=dbservice.query();
String []from={"_id","name","phone","email"};
int []to={R.id._idd,R.id.showname,R.id.showphone,R.id.showemail};
SimpleCursorAdapter adapter=newSimpleCursorAdapter(MainActivity.this, R.layout.list_show,cursor, from,to);
listview.setAdapter(adapter);
}
});
modify.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setClass(MainActivity.this,ModifyActivity.class);
startActivity(intent);
}
});
delete.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setClass(MainActivity.this,DeleteActivity.class);
startActivity(intent);
}
});
}
}
DBHelper.java
package com.example.psqliteopenhelper;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper{
public DBHelper(Contextcontext, String name, CursorFactoryfactory, intversion) {
super(context,name, factory,version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql="Create table friend(_id integer primary key autoincrement"+
",name varchar(20),phone integer,email varchar(20))";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
DBService.java
package com.example.psqliteopenhelper;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DBService {
DBHelper helper;
public DBService(Contextcontext) {
// TODO Auto-generated constructor stub
helper=new DBHelper(context,"friends.db", null, 1);
}
public void insert(String name,intphone,String email) {
// TODO Auto-generated method stub
SQLiteDatabase db=helper.getWritableDatabase();
String sql="insert into friend(name,phone,email)values('"+name+"',"+phone+",'"+email+"')";
db.execSQL(sql);
}
public Cursor query(Stringname) {
SQLiteDatabase db=helper.getReadableDatabase();
String sql="select * from friend where name=?";
String []selectionArgs={name};
Cursor cursor=db.rawQuery(sql,selectionArgs);
returncursor;
// TODO Auto-generated method stub
}
public Cursor query(){
SQLiteDatabase db=helper.getReadableDatabase();
String sql="select * from friend";
Cursor cursor=db.rawQuery(sql,null);
returncursor;
}
public void modify(String name,Stringnewnum,inti) {
// TODO Auto-generated method stub
SQLiteDatabase db=helper.getReadableDatabase();
String sql=null;
if(i==1){
sql="update friend set name='"+newnum+"'"+"where name='"+name+"'";
}
else if(i==2){
sql="update friend set email='"+newnum+"'"+"where name='"+name+"'";
}
else if(i==3){
intnumber=Integer.parseInt(newnum);
sql="update friend set phone="+number+" where name='"+name+"'";
}
db.execSQL(sql);
}
public void delete(String name) {
// TODO Auto-generated method stub
SQLiteDatabase db=helper.getReadableDatabase();
String sql="delete from friend where name='"+name+"'";
db.execSQL(sql);
}
}
DeleteActivity.java
package com.example.psqliteopenhelper;
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.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class DeleteActivity extends Activity {
Button delete,goback;
EditText name;
String inputName;
DBService dbservice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_delete);
delete=(Button)findViewById(R.id.delete2);
goback=(Button)findViewById(R.id.deletegoback);
name=(EditText)findViewById(R.id.deletename);
dbservice=new DBService(this);
delete.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
inputName=name.getText().toString();
dbservice.delete(inputName);
Toast.makeText(DeleteActivity.this,"删除成功!", 1).show();
}
});
goback.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setClass(DeleteActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
ModifyActivity.java
package com.example.psqliteopenhelper;
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.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class ModifyActivity extends Activity {
DBService db;
Button submit,goback;
EditText name,newnum;
Spinner spinner;
String item[]={"name","phone","email"};
String inputName,tiaojian,newnumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_modify);
submit=(Button)findViewById(R.id.submit);
goback=(Button)findViewById(R.id.goback);
name=(EditText)findViewById(R.id.modifyname);
newnum=(EditText)findViewById(R.id.newnum);
db=new DBService(this);
spinner=(Spinner)findViewById(R.id.spinner);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,item);
spinner.setAdapter(adapter);
adapter.setDropDownViewResource
(android.R.layout.select_dialog_singlechoice);
spinner.setOnItemSelectedListener
(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?>
parent, View view, int position, long id) {
// TODO Auto-generated method stub
tiaojian=parent.getItemAtPosition(position)
.toString();///从Spinner上获得数据
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
submit.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
inputName=name.getText().toString();
newnumber=newnum.getText().toString();
if(tiaojian.equals("name")){
db.modify(inputName,newnumber,1);
Toast.makeText(ModifyActivity.this,
"修改完成name", 1).show();
}
else if(tiaojian.equals("phone")){
db.modify(inputName,newnumber,3);
Toast.makeText(ModifyActivity.this,
"修改完成phone", 1).show();
}
else if(tiaojian.equals("email")){
db.modify(inputName,newnumber,2);
Toast.makeText(ModifyActivity.this,
"修改完成email", 1).show();
}
}
});
goback.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setClass(
ModifyActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
Activity_main.xml
<RelativeLayoutxmlns: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.psqliteopenhelper.MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="欢迎来到SQLiteOpenHelper界面"/>
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:layout_below="@id/textView"
></ListView>
<Button
android:id="@+id/insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/list"
android:text="插入数据"
/>
<Button
android:id="@+id/query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/list"
android:layout_toRightOf="@id/insert"
android:text="查询数据"
/>
<Button
android:id="@+id/modify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/insert"
android:text="修改数据"
/>
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/query"
android:layout_toRightOf="@id/modify"
android:text="删除数据"
/>
</RelativeLayout>
Add.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android
="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="姓名:"
/>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要添加的姓名"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="电话:"
/>
<EditText
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要添加的电话"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="邮箱:"
/>
<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要添加的邮箱"
/>
</LinearLayout>
List_show.xml
<?xmlversion="1.0"encoding="utf-8"?>
<GridLayoutxmlns:android
="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount="1"
android:columnCount="4"
>
<TextView
android:id="@+id/_idd"
android:layout_width="10dp"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="0"
/>
<TextView
android:id="@+id/showname"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="1"
android:text="name"
></TextView>
<TextView
android:id="@+id/showphone"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="2"
android:text="phone"
/>
<TextView
android:id="@+id/showemail"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="3"
android:text="email"
/>
</GridLayout>
Activity_delete.xml
<RelativeLayoutxmlns: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.psqliteopenhelper.DeleteActivity">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="输入要删除盆友姓名:"/>
<EditText
android:id="@+id/deletename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/text1"
android:hint="姓名"
/>
<Button
android:id="@+id/delete2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text1"
android:text="删除"/>
<Button
android:id="@+id/deletegoback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/delete2"
android:layout_alignBottom="@id/delete2"
android:text="返回"
/>
</RelativeLayout>
Activity_modify.xml
<LinearLayoutxmlns: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:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入要修改的盆友姓名:"/>
<EditText
android:id="@+id/modifyname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="姓名"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择修改字段:"/>
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></Spinner>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置新值:"/>
<EditText
android:id="@+id/newnum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入设置值"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改"
></Button>
<Button
android:id="@+id/goback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"
></Button>
</LinearLayout>
</LinearLayout>
四、实验过程分析与讨论
此次实验主要应用SharedPreference和SQLite数据库来对有关数据进行存储,但是有关数据库处理的实验比较繁琐,但是通过做此次的实验,我对前面学过的包括按钮、编辑框和下拉列表在内的一些组件的应用进行了复习,并借助于SQLiteOpenHelper类和DBService类更好地理解了自己封装增删改查的操作。特别注意的是,要注重字符串sql的书写,否则会因为书写出现错误而导致程序无法运行。
五、指导教师意见
指导教师签字:
年 月 日
- 移动终端设计实验 实验5:数据存储实验
- 移动终端设计实验 实验6:多媒体处理实验
- Android移动终端设计实验一+基本组件应用实验
- Android移动终端设计实验二+事件监听实验
- Android移动终端设计实验三+Intent与Activity实验
- 移动终端 实验4:Service组件应用
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验。。
- 实验
- 凸包问题——圈水池
- IOS10 应用安装无网络访问,提示是否允许使用网络
- ORA-12526: TNS: 监听程序: 所有适用例程都处于受限模式
- Rxjava 和Retrofit资料的总结
- 计算广告系列篇(1)------定义
- 移动终端设计实验 实验5:数据存储实验
- 第十四周-项目二 二叉树排序树中查找的路径
- 公众号后台接口确认(让微信后台确认我们的后台是可用的)
- Map的遍历两种方法
- Xcode相关路径汇总
- sts 稳定版本
- 一行代码打开相册/相机
- 相似度度量2:皮尔森相关系数和斯皮尔曼相关性
- 关于ShareCompat的意义