如何获取sharedpreferences的所有key

如何获取sharedpreferences的所有key,第1张

关于SharedPreferences顺便再复习一下:

SharedPreferences 是Android 中的内置API,它允许我们存取键值对形式的基础类型数据,像:boolean,float ,int , long , string 。这些数据将会持久化的存在,即使你的应用程序结束之后(注意:如果应用从手机上写在掉后,该程序对应的SharedPreferences将会消失,保存在路径:/data/data/<package_name>/shared_prefs 目录下)

注意:User Preferences 用户配置

严格来说,SharedPreferences最好不要用来保存“用户配置”,比如,用户选择了什么铃声,是否自动更新等等。如果要为应用创建用户配置,可以使用PreferenceActivity,它可以用来创建“用户配置”。(PreferenceActivity用来创建程序中的设置界面)

   在php提供的用于与memcached交互的扩展模块中有memcached与memcache,前者提供方法getAllKeys用于遍历所有Memcached服务器上的key,但是并不保证原子 *** 作,而后者却没有提供任何方法,虽然在PHP官方

文档中有人给出使用方法getExtendedStats来间接获取Memcached服务器上的所有key,但是给出的代码是有不少坑的,如果拿来就用,对于cluster的memcached服务器而言,有些问题就需要指出来。

       下面将给出官方文档中的代码,并指出可能面临的问题,代码如下:

<php

/\

 Function to get all memcache keys

 @author Manish Patel

 @Created:  28-May-2010

\/

function getMemcacheKeys() {

$memcache = new Memcache;

$memcache->connect('127001', 11211) or die ("Could not connect to memcache server");

$list = array();

$allSlabs = $memcache->getExtendedStats('slabs');

$items = $memcache->getExtendedStats('items');

foreach($allSlabs as $server => $slabs) {

   foreach($slabs AS $slabId => $slabMeta) {

      $cdump = $memcache->getExtendedStats('cachedump',(int)$slabId);

      foreach($cdump AS $keys => $arrVal) {

         foreach($arrVal AS $k => $v){

           echo $k "<br>";

         }

      }

    }

}//EO getMemcacheKeys() >

       在上述代码中,如果用于获取单个memcached服务器上的key,是不存在任何问题,但是获取连接池中的多个memcached所有key就存在问题,会发现打印出重复的key,问题就在于当使用getExtendedStats用去特定$slabID

上的信息时,返回的是连接池中所有的服务器上的特定$slabId 的存储的keys信息。当$server为"127001:11214"且$slabId为0将变量$cdump的信息打印出如下所示:

array(2) {

  ["127001:11214"]=>

  array(1) {

    ["course_schools__¨é¨"]=>

    array(2) {

      [0]=>

      string(1) "0" [1]=>

      string(10) "12" }

  }

  ["127001:11216"]=>

  array(1) {

    ["monitorMemcache"]=>

    array(2) {

      [0]=>

      string(2) "10" [1]=>

      string(10) "12" }

  }

}

当$server为"127001:11216"且$slabId为0将变量$cdump的信息打印出如下所示:

array(2) {

  ["127001:11214"]=>

  array(1) {

    ["course_schools__¨é¨"]=>

    array(2) {

      [0]=>

      string(1) "0" [1]=>

      string(10) "12" }

  }

  ["127001:11216"]=>

  array(1) {

    ["monitorMemcache"]=>

    array(2) {

      [0]=>

      string(2) "10" [1]=>

      string(10) "12" }

  }

}

Mysql数据库管理工作中,经常需要查看一个table的primary key, unique key, foreign key。而mysql 客户端提供的describe table_name命令,却只能显示一个表的primary key和foreign key。这里介绍一种查询unique key的方法。

Mysql所有有关数据schema的信息都保存在INFORMATION_SCHEMA这个database instance里面。其中的两个表,TABLE_CONSTRAINTS和KEY_COLUMN_USAGE,保存了表的所有key信息。

TABLE_CONSTRAINTS

保存一个表的约束条件,其columns如下:

CONSTRAINT_CATALOG

CONSTRAINT_SCHEMA

CONSTRAINT_NAME :约束的名称

TABLE_SCHEMA :表所在的database instance

TABLE_NAME : 表名称

CONSTRAINT_TYPE :约束类型(primary key, foreign key, 或者unique key)

KEY_COLUMN_USAGE

保存一个表的详细column对应的约束条件信息,其columns如下:

CONSTRAINT_CATALOG

CONSTRAINT_SCHEMA

CONSTRAINT_NAME

:约束的名称

TABLE_CATALOG

TABLE_SCHEMA

:表所在的database instanceTABLE_NAME: 表名称COLUMN_NAME :列名称

ORDINAL_POSITION

POSITION_IN_UNIQUE_CONSTRAINT

REFERENCED_TABLE_SCHEMA

REFERENCED_TABLE_NAME

REFERENCED_COLUMN_NAME

通过查询KEY_COLUMN_USAGE表,即可以获取一个表的所有详细约束条件。

ini文件读取一般要引入win32API函数来完成,可以参考以下的函数ReadSection,结果以StringCollection的形式返回,你可以自己再做后续处理:

public string FileName; //INI文件名

//声明读写INI文件的API函数

[DllImport("kernel32")]

private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);

[DllImport("kernel32")]

private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);

//从Ini文件中,将指定的Section名称中的所有Ident添加到列表中

public void ReadSection(string Section, StringCollection Idents)

{

Byte[] Buffer = new Byte[16384];

//IdentsClear();

int bufLen = GetPrivateProfileString(Section, null, null, Buffer, BufferGetUpperBound(0),

FileName);

//对Section进行解析

GetStringsFromBuffer(Buffer, bufLen, Idents);

}

private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)

{

StringsClear();

if (bufLen != 0)

{

int start = 0;

for (int i = 0; i < bufLen; i++)

{

if ((Buffer[i] == 0) && ((i - start) > 0))

{

String s = EncodingGetEncoding(0)GetString(Buffer, start, i - start);

StringsAdd(s);

start = i + 1;

}

}

}

}

以上就是关于如何获取sharedpreferences的所有key全部的内容,包括:如何获取sharedpreferences的所有key、使用php Memcache模块如何正确遍历所有KEY以及VALUE、Mysql 如何查看一个表的unique key等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/9797174.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存