android怎么表格按数字大小排序序

44695人阅读
微信公共帐号开发(11)
关于签名的算法,api提供的原文是:
1.签名算法
签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
 ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。 ◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
第二步,在stringA最后拼接上key=(API密钥的值)得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
假设传送的参数如下:
appid: wxd930ea5d5a258f4f
device_info: 1000
body: test
nonce_str: ibuaiVcKdpRxkhJA
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
stringA=&appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=&nonce_str=ibuaiVcKdpRxkhJA&;
第二步:拼接API密钥:
stringSignTemp=&stringA&key=c09247ec02edce69f6a2d&
sign=MD5(stringSignTemp).toUpperCase()=&9A0AA9CF3B7&
网友的整理:
ok,根据这个我们来尝试一下看能够根据提供的参数得到这个结果【9A0AA9CF3B7】!!!!
关于按照ASCII排序这里用到了(SortedMap),我的上一篇blog说过的,有兴趣自己去看看
关键代码Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
生成MD5的时候,需要统一编码,这里微信api要求是UTF-8
相关代码如下:
【MD5Util】
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i & b. i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
private static String byteToHexString(byte b) {
if (n & 0)
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
public static String MD5Encode(String origin, String charsetname) {
String resultString =
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance(&MD5&);
if (charsetname == null || &&.equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
resultString = byteArrayToHexString(md.digest(resultString
.getBytes(charsetname)));
} catch (Exception exception) {
return resultS
private static final String hexDigits[] = { &0&, &1&, &2&, &3&, &4&, &5&,
&6&, &7&, &8&, &9&, &a&, &b&, &c&, &d&, &e&, &f& };
【PayTest】
//http://mch./wiki/doc/api/index.php?chapter=4_3
private static String Key = &c09247ec02edce69f6a2d&;
* @param args
public static void main(String[] args) {
System.out.println(&&&&模拟微信支付&&&&);
System.out.println(&==========华丽的分隔符==========&);
//微信api提供的参数
String appid = &wxd930ea5d5a258f4f&;
String mch_id = &&;
String device_info = &1000&;
String body = &test&;
String nonce_str = &ibuaiVcKdpRxkhJA&;
SortedMap&Object,Object& parameters = new TreeMap&Object,Object&();
parameters.put(&appid&, appid);
parameters.put(&mch_id&, mch_id);
parameters.put(&device_info&, device_info);
parameters.put(&body&, body);
parameters.put(&nonce_str&, nonce_str);
String characterEncoding = &UTF-8&;
String weixinApiSign = &9A0AA9CF3B7&;
System.out.println(&微信的签名是:& + weixinApiSign);
String mySign = createSign(characterEncoding,parameters);
System.out.println(&我
的签名是:&+mySign);
if(weixinApiSign.equals(mySign)){
System.out.println(&恭喜你成功了~&);
System.out.println(&注定了你是个失败者~&);
String userAgent = &Mozilla/5.0(CPU iphone OS 5_1_1 like Mac OS X) AppleWebKit/534.46(KHTML,like Geocko) Mobile/9B206 MicroMessenger/5.0&;
char agent = userAgent.charAt(userAgent.indexOf(&MicroMessenger&)+15);
System.out.println(&微信的版本号:&+new String(new char[]{agent}));
* 微信支付签名算法sign
* @param characterEncoding
* @param parameters
@SuppressWarnings(&unchecked&)
public static String createSign(String characterEncoding,SortedMap&Object,Object& parameters){
StringBuffer sb = new StringBuffer();
Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
Iterator it = es.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
Object v = entry.getValue();
if(null != v && !&&.equals(v)
&& !&sign&.equals(k) && !&key&.equals(k)) {
sb.append(k + &=& + v + &&&);
sb.append(&key=& + Key);
String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
【最终结果】
&&&模拟微信支付&&&
==========华丽的分隔符==========
微信的签名是:9A0AA9CF3B7
的签名是:9A0AA9CF3B7
恭喜你成功了~
微信的版本号:5
后期用真正的商家APPId整合再试试~~good
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2056831次
积分:17578
积分:17578
排名:第571名
原创:335篇
转载:28篇
评论:439条
(1)(2)(7)(4)(1)(1)(7)(1)(3)(3)(4)(4)(5)(6)(4)(2)(5)(6)(5)(8)(4)(3)(8)(9)(5)(9)(7)(5)(6)(8)(6)(12)(6)(8)(7)(4)(6)(6)(8)(6)(4)(6)(6)(1)(5)(2)(5)(5)(7)(8)(11)(5)(8)(18)(10)(6)(5)(6)(12)(6)(6)(6)(2)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'随笔 - 2146&
文章 - 96&评论 - 11732&trackbacks - 253
uses System.IOUtils, System.Types, System.Generics.Collections, System.Generics.Defaults, System.C
procedure StrArrNumberSort(var Arr: TArray&string&);
TArray.Sort&string&(Arr,
TComparer&string&.Construct(
function (const s1,s2: string): Integer
L1 := TPath.GetFileNameWithoutExtension(s1);
L2 := TPath.GetFileNameWithoutExtension(s2);
if (IsDigit(L1[1]) and IsDigit(L2[1])) then
Result := StrToIntDef(L1, 0) - StrToIntDef(L2, 0)
Result := CompareText(L1, L2);
{考虑嵌套目录}
L1 := TPath.GetDirectoryName(s1);
L2 := TPath.getDirectoryName(s2);
Result := CompareText(L1, L2) * MaxWord + R
procedure TForm1.Button1Click(Sender: TObject);
arr: TArray&string&;
arr := TArray&string&(TDirectory.GetFiles('c:\temp'));
StrArrNumberSort(arr);
for s in arr do Memo1.Lines.Add(s);
阅读(...) 评论()7765人阅读
Android(127)
java(147)
Linux(142)
针对ListView的各选项进行排序,参考链接:
/questions/9600040/how-can-i-sort-items-in-baseadapter-before-i-setadapter
实验代码片段如下:
private void sortInfo() {
Comparator&InfoTmp& itemComparator = new Comparator&InfoTmp&() {
public int compare(InfoTmp info1, InfoTmp info2){
return info1.getAge().compareTo(info2.getAge());
Collections.sort(mProfileList, itemComparator);
public class UserListAdapter extends BaseAdapter {
private Context mC
private List&InfoTmp& mUserL
public UserListAdapter(Context context, List&InfoTmp& users) {
mContext =
mUserList =
public int getCount() {
return mUserList.size();
public Object getItem(int position) {
if (position &= mUserList.size()) {
return mUserList.get(position);
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(R.layout.user_item, null);
TextView text = (TextView) convertView.findViewById(R.id.text);
ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
ImageButton btnEdit = (ImageButton) convertView.findViewById(R.id.edit);
ImageButton btnDel = (ImageButton) convertView.findViewById(R.id.delete);
return convertV
private void refreshAdapter() {
// ... ...
sortInfo();
mListVew.setAdapter(new UserListAdapter(mContext, mProfileList));
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1226177次
积分:11239
积分:11239
排名:第1471名
原创:165篇
转载:258篇
评论:53条
(1)(3)(4)(1)(2)(3)(9)(8)(5)(5)(10)(2)(3)(4)(8)(9)(2)(8)(12)(10)(8)(7)(15)(18)(9)(23)(24)(16)(1)(2)(3)(3)(3)(1)(4)(26)(28)(9)(33)(3)(2)(3)(8)(6)(10)(6)(13)(15)(7)(4)(8)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'一.理论准备
        Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。
        TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
        HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。
        Map.Entry返回Collections视图。
二.key排序
        TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:
import java.util.I
import java.util.M
import java.util.S
import java.util.TreeM
public class TreeMapTest {
public static void main(String[] args) {
Map&String, String& map = new TreeMap&String, String&(
new Comparator&String&() {
public int compare(String obj1, String obj2) {
// 降序排序
return pareTo(obj1);
map.put(&b&, &ccccc&);
map.put(&d&, &aaaaa&);
map.put(&c&, &bbbbb&);
map.put(&a&, &ddddd&);
Set&String& keySet = map.keySet();
Iterator&String& iter = keySet.iterator();
while (iter.hasNext()) {
String key = iter.next();
System.out.println(key + &:& + map.get(key));
        运行结果如下:
三.value排序
        上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List&T& list, Comparator&? super T& c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较,如下:
import java.util.ArrayL
import java.util.C
import java.util.L
import java.util.M
import java.util.Map.E
import java.util.TreeM
public class TreeMapTest {
public static void main(String[] args) {
Map&String, String& map = new TreeMap&String, String&();
map.put(&a&, &ddddd&);
map.put(&c&, &bbbbb&);
map.put(&d&, &aaaaa&);
map.put(&b&, &ccccc&);
//这里将map.entrySet()转换成list
List&Map.Entry&String,String&& list = new ArrayList&Map.Entry&String,String&&(map.entrySet());
//然后通过比较器来实现排序
Collections.sort(list,new Comparator&Map.Entry&String,String&&() {
//升序排序
public int compare(Entry&String, String& o1,
Entry&String, String& o2) {
return o1.getValue().compareTo(o2.getValue());
for(Map.Entry&String,String& mapping:list){
System.out.println(mapping.getKey()+&:&+mapping.getValue());
        运行结果如下:
        那时候学C++的STL的时候就想搞,可是找不到资料,偶然于网上发现,记下了。
        参考文献,原文有删改。
*****************************************************************************************************************
                                                   为每一个渴望知识的朋友提供精品博文。
*****************************************************************************************************************
阅读(...) 评论()

我要回帖

更多关于 mysql 按数字大小排序 的文章

 

随机推荐