Android中的uid

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中的uid相关的知识,希望对你有一定的参考价值。

参考技术A uid 是user 用户id

Android 里的UID是基于应用程序,每一个程序都有一个UID,如果应用程序1和应用程序2的uid不同,则在default情况下,二者无法读取对方的数据,这样提升了应用的安全性。

当使用者安装了某一应用程序时,android系统就会赋予一个uid,用户可以在屏幕上的窗口里可以检视这个AndroidManifest.xml档案的内容,用户回了解这个应用程序的目的、权限等,并选择接受与不接受。

一些特殊情形下,两个应用程序是可以持有一样的UID。

例如,当需要推出新版本时,这两种版本的程序可以持有一样的UID, 才有权限将旧版程序的数据转移到新版软件里。

Pid 是 process 进程ID,Uid 是 user 用户ID,只是Android和计算机不一样。

计算机每个用户都具有一个Uid,而Android中每个程序都有一个Uid。

默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果用互相调用,只能是Uid相同才行,这就使得共享数据具有了一定安全性。

每一个不同的 程序 都能有一个UId,但是一个应用里面可以有多个PId。

一个用户可以打开多个进程(Pid),并且这些进程的uid是一样的;

一个pid对应一个进程,每次打开时系统都会赋予不同的pid,但是uid是当你安装Apk时,系统赋予的,是不变的,除非你卸载了重装,又会重新赋予一个Uid;

参考: 认识Android的UID(Unix user ID)与权限

ANDROID 中UID与PID的作用与区别

android 怎么读取数据库中的数据?

数据库是服务器上的mssql2005,我需要做一个客户端和读取数据库中的信息,改怎么做?

android读取数据库可以使用sqlite一些api进行读取,实例如下:

  /** 
     * 查找一条数据 
     * @param uid 
     */  
    public User find(Integer uid)  
        SQLiteDatabase db=dbOpenHelper.getReadableDatabase();  //创建数据库辅助类
        Cursor cursor =db.rawQuery("select * from user where uid=?", new String[]uid.toString());  //创建一个游标
        if(cursor.moveToFirst())  //循环遍历查找数组
            int uid2=cursor.getInt(cursor.getColumnIndex("uid"));  
            String uname=cursor.getString(cursor.getColumnIndex("uname"));  
            String uaddress=cursor.getString(cursor.getColumnIndex("uaddress"));  
            User user=new User();  
            user.setUid(uid2);  
            user.setUname(uname);  
            user.setUaddress(uaddress);  
            return user;  
          
        cursor.close();  
        return null;  
    
参考技术A Android里面Sqlite的使用
使用步骤
1,创建一个SqliteOpenHelper的子类
public class MySqliteOpenHelper extends SQLiteOpenHelper private static final int DATABASE_VERSION = 1;//数据库版本
 public static final String DATABASE_NAME="user.db";//数据库文件 名
 public static final String TABLE_NAME="user";//表名

 //字段名
 public static final String ID="id"; public static final String NAME="name"; public static final String AGE="age"; /** * 构造方法
 * @param context :上下文
 * @param name :数据文件名
 * @param factory :数据库工厂 使用过程中传null * @param version :数据库版本 1 */ public MySqliteOpenHelper(Context context) super(context, DATABASE_NAME, null, DATABASE_VERSION); /** * 当数据库打开时调用
 * @param db 数据库操作对象
 */ @Override public void onOpen(SQLiteDatabase db) super.onOpen(db); System.out.println("-------onOpen"); /** * 创建数据库的方法
 * @param db 数据库操作对象 CRUD ---CREATE READ UPDATE DELETE */ @Override public void onCreate(SQLiteDatabase db) System.out.println("-------onCreate"); /** *当数据库的版本有提升时调用
 * @param db 数据库操作对象
 * @param oldVersion 老版本号
 * @param newVersion 新版本号
 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) //更新表
 //更新数据
 System.out.println("-------onUpgrade"); /** * 当数据库版本降低时调用 ---没什么用
 * @param db * @param oldVersion * @param newVersion */ @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) super.onDowngrade(db, oldVersion, newVersion); System.out.println("-------onUpgrade");
onCreate方法:在第一次调用getReadableDatabase(),getWriteableDatabase()方法里调用【如果磁盘上没有数据库文件就会调用】
onOpen方法:在调用getReadableDatabase(),getWriteableDatabase()调用
onUpgrade()方法,当数据库版本提升时调用
getWritableDatabase()得到可读可写的数据库操作对象。如果内存不足,该方法会锁定数据库,并抛异常
getReadableDatabase()得到可读写的数据库操作对象,,如果内存不足,数据库就只能写了
2,重写onCreate方法
public MySqliteOpenHelper(Context context) super(context, DATABASE_NAME, null, DATABASE_VERSION);
@Override public void onCreate(SQLiteDatabase db) // 创建表 String sql = "CREATE TABLE " + TABLE_NAME + "( " + _ID + " Integer primary key autoincrement," + NAME + " TEXT, " + PASSWORD + " TEXT)"; db.execSQL(sql); @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
3,初始化数据库
//创建数据库
public void mysqlite(View view)

//创建 实现工具类
DBHelper dh = new DBHelper("test.db",1);
//连接数据库 获取数据库实例
//getWritableDatabase() 数据写满会报错
//getReadableDatabase() 数据写满不会报错
SQLiteDatabase sd = dh.getWritableDatabase();
sd.close();
4,对数据库进行CRUD
参考demo:
public class DBHelper private final static String DATABASE_NAME = "TestDB2.db";// 数据库文件名 private final static int VERSION = 1;// 数据库版本 private final static String TABLE_NAME = "users";// 表名 private final static String _ID = "_id";// 编号 private final static String NAME = "name";// 用户名字段 private final static String PASSWORD = "password";// 用户密码 // 操作数据库的类 private SQLiteDatabase database; MySQLiteOpenHepler hepler; // 写一个内部类去处理数据库的创建和版本的更新 class MySQLiteOpenHepler extends SQLiteOpenHelper public MySQLiteOpenHepler(Context context) super(context, DATABASE_NAME, null, VERSION); @Override public void onCreate(SQLiteDatabase db) // 创建表 String sql = "CREATE TABLE " + TABLE_NAME + "( " + _ID + " Integer primary key autoincrement," + NAME + " TEXT, " + PASSWORD + " TEXT)"; db.execSQL(sql); @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) public DBHelper(Context context) hepler = new MySQLiteOpenHepler(context); database = hepler.getWritableDatabase(); // 添加 public void insert(User user) ContentValues values = new ContentValues(); values.put(NAME, user.getName()); values.put(PASSWORD, user.getPassword()); database.insert(TABLE_NAME, null, values); // 修改 public void update(User user) ContentValues values = new ContentValues(); values.put(NAME, user.getName()); values.put(PASSWORD, user.getPassword()); database.update(TABLE_NAME, values, _ID + "=?", new String[] String.valueOf(user.getId()) ); // 删除 public void delete(int id) database.delete(TABLE_NAME, _ID + "=?", new String[] String.valueOf(id) ); // 查询一个 public User queryById(int id) User u = null; Cursor cursor = database.query(TABLE_NAME, null, _ID + "=?", new String[] String.valueOf(id) , null, null, null); if (cursor.getCount() > 0) cursor.moveToNext(); u = new User(cursor.getInt(0), cursor.getString(1), cursor.getString(2)); return u;
参考技术B 做一个WEBServerse取出数据转换成XML输出,再用android。bundle接受编译本回答被提问者采纳

以上是关于Android中的uid的主要内容,如果未能解决你的问题,请参考以下文章

android中的java.lang.OutOfMemoryError,同时从android中的画廊获取图像

android 6中的android webview youtube视频中的全屏模式问题

android权限--android开发中的权限及含义(上)

FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?

Android - 将参数传递给 Android 应用程序中的 RESTful URL

Android 中的 ContactsContract 概览