Android数据存储的五种方式2:https://developer.aliyun.com/article/1473560
使用MySQLiteOpenHelper进行增删改查
// 创建数据库(数据库名称为myDataDb) MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(getApplicationContext(), "myDataDb"); SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase(); // 增(SQLite的添加语句:INSERT INTO user (name, passwords)] VALUES ("张三", "123456")) ContentValues value = new ContentValues();//用于存储数据 value.put("name", "阿超");//向数据表中字段名为name的字段中添加"阿超" value.put("password", "123456");//向数据表中字段名为passwords的字段中添加"123456" // db数据库对象在前面已经创建,这里直接使用 db.insert("user",null, value);//在数据库的user数据表中添加字段名name为"阿超",字段名passwords为"123456"的数据 // 删(SQLite的删除语句:DELETE FROM user WHERE name = "张三") db.delete("user", "name=?", new String[]{"张三"});//第一个参数表名,第二个参数条件,第三个参数为对应的删除条件 // 改(SQLite的修改语句:UPDATE user SET passwords= "666" WHERE name="张三") ContentValues values = new ContentValues(); values.put("password", "666"); db.update("user", values, "name=?", new String[]{"张三"});(把名字为张三的密码修改为666) // 查(SQLite的查询语句:SELECT * FROM user) String sql = "select * from user"; Cursor cursor = db.rawQuery(sql, null); cursor.moveToFirst();//转移到结果的第一行 while(!cursor.isAfterLast()){ String name = cursor.getString(cursor.getColumnIndex("name")); String passwords = cursor.getString(cursor.getColumnIndex("password")); LogUtil.i("data", "name=" + name + " password=" + passwords); cursor.moveToNext(); }
使用ContentProvider存储数据
介绍: 内容提供器,主要用于在不同应用程序之间实现数据的共享,从而能够让其他的应用保存或读取此Content Provider的各种数据类型
ContentProvider使用方法有两种
使用现有的内容提供器来读取和操作相应程序中的数据
创建自己的内容提供器给我们的应用提供外部访问接口
使用ContentResolver读取数据
在ContentResolver中是通过Uri指定操作的内容“位置”
Uri由两部分组成:权限和路径
权限是对于不同的应用程序进行区分的,一般用应用程序的包名;
路径是对于同一应用程序的不同表进行区分的。
例如,我们有一个应用程序的包名是“top.gaojc.demo”,应用程序中有一个表是table,则Uri为:content://top.gaojc.demo/table
(Uri uri = Uri.parse.(“content://top.gaojc.demo/table”);)
pu<!--允许读取通讯录 --> <uses-permission android:name="android.permission.READ_CONTACTS"/>
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; ContentResolver mContentResolver= getContentResolver(); /** * 增删改的方式和SQLite存储方式类似,这里不再进行过多阐述 */ // 查(查询通讯录为例,查询通讯录需要添加上方权限) Cursor cursor = mContentResolver.query(uri,new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String num = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); LogUtil.i("data", "联系人姓名:" + name + ", 电话:" + num); cursor.moveToNext(); }
网络存储数据
介绍: 通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息
get请求
public static String loginByGet(String username, String password) { String path = http://192.168.0.1:8080/Demo/Login?username= + username + &password= + password; try { URL url = new URL(path);//将访问的路径转换为url HttpURLConnection conn = (HttpURLConnection) url.openConnection();//通过URL获取连接 conn.setConnectTimeout(5000);//设置连接超时时间 conn.setRequestMethod(GET);//设置请求方式 int code = conn.getResponseCode();//返回的状态值 if (code == 200) { InputStream is = conn.getInputStream(); return StreamTools.streamToString(is);//字节流转换为字符串 } else { return "网络访问失败"; } } catch (Exception e) { e.printStackTrace(); return "网络访问失败"; } }
post请求
public static String loginByPost(String username, String password) { String path = http://192.168.0.1:8080/Demo/Login; try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod(POST); // 设置请求头信息 conn.setRequestProperty(Content-Type, application/x-www-form-urlencoded); String data = username= + username + &password= + password; conn.setRequestProperty(Content-Length, data.length() + ); conn.setDoOutput(true); //设置可输出流 OutputStream os = conn.getOutputStream(); //获取输出流 os.write(data.getBytes()); //将数据写给服务器 int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); return StreamTools.streamToString(is); } else { return "网络访问失败"; } } catch (Exception e) { e.printStackTrace(); return "网络访问失败"; } }
工具类
public class StreamTools { // 将输入流转换成字符串 public static String streamToString(InputStream is) { ByteArrayOutputStream baos; try { baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } byte[] byteArray = baos.toByteArray(); return new String(byteArray); } catch (Exception e) { LogUtil.i("StreamTools", e.toString()); return null; } finally{ baos.close(); is.close(); } } }