Android实用代码片段整合

1、精确获取屏幕尺寸(例如:3.5、4.0、5.0寸屏幕)

1
2
3
4
5
6
public  static  double  getScreenPhysicalSize(Activity ctx) {
         DisplayMetrics dm =  new  DisplayMetrics();
         ctx.getWindowManager().getDefaultDisplay().getMetrics(dm);
         double  diagonalPixels = Math.sqrt(Math.pow(dm.widthPixels,  2 ) + Math.pow(dm.heightPixels,  2 ));
         return  diagonalPixels / ( 160  * dm.density);
     }

2、判断是否是平板(官方用法)

1
2
3
4
public  static  boolean  isTablet(Context context) {
         return  (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= 
         Configuration.SCREENLAYOUT_SIZE_LARGE;
     }

3、文字根据状态更改颜色 android:textColor 

1
2
3
4
5
6
<selector xmlns:android= "http://schemas.android.com/apk/res/android" >
     <item android:color= "#53c1bd"  android:state_selected= "true" />
     <item android:color= "#53c1bd"  android:state_focused= "true" />
     <item android:color= "#53c1bd"  android:state_pressed= "true" />
     <item android:color= "#777777" />
</selector>

            放在res/color/目录下
4、背景色根据状态更改颜色 android:backgroup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<selector xmlns:android= "http://schemas.android.com/apk/res/android" >
 
     <item android:state_selected= "true" ><shape>            <gradient android:angle= "0"  android:centerColor= "#00a59f" 
     android:endColor= "#00a59f"  android:startColor= "#00a59f"  />
         </shape></item>
     <item android:state_focused= "true" ><shape>
             <gradient android:angle= "0"  android:centerColor= "#00a59f"  android:endColor= "#00a59f"  android:startColor=
             "#00a59f"  />
         </shape></item>
     <item android:state_pressed= "true" ><shape>
             <gradient android:angle= "0"  android:centerColor= "#00a59f"  android:endColor= "#00a59f"  android:startColor=
             "#00a59f"  />
         </shape></item>
     <item><shape>
             <gradient android:angle= "0"  android:centerColor= "#00ff00"  android:endColor= "00ff00"  android:startColor=
             "00ff00"  />
         </shape></item>
 
</selector>

            如果直接给背景色color会报错。
5、启动APK的默认Activity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public  static  void  startApkActivity( final  Context ctx, String packageName) {
         PackageManager pm = ctx.getPackageManager();
         PackageInfo pi;
         try  {
             pi = pm.getPackageInfo(packageName,  0 );
             Intent intent =  new  Intent(Intent.ACTION_MAIN,  null );
             intent.addCategory(Intent.CATEGORY_LAUNCHER);
             intent.setPackage(pi.packageName);
 
             List<ResolveInfo> apps = pm.queryIntentActivities(intent,  0 );
 
             ResolveInfo ri = apps.iterator().next();
             if  (ri !=  null ) {
                 String className = ri.activityInfo.name;
                 intent.setComponent( new  ComponentName(packageName, className));
                 ctx.startActivity(intent);
             }
         catch  (NameNotFoundException e) {
             Log.e( "startActivity" , e);
         }
     }

7、计算字宽

1
2
3
4
5
public  static  float  GetTextWidth(String text,  float  Size) {
         TextPaint FontPaint =  new  TextPaint();
         FontPaint.setTextSize(Size);
         return  FontPaint.measureText(text);
     }

             注意如果设置了textStyle,还需要进一步设置TextPaint。 
8、获取应用程序下所有Activity 

1
2
3
4
5
6
7
8
9
public  static  ArrayList<String> getActivities(Context ctx) {
       ArrayList<String> result =  new  ArrayList<String>();
       Intent intent =  new  Intent(Intent.ACTION_MAIN,  null );
       intent.setPackage(ctx.getPackageName());
       for  (ResolveInfo info : ctx.getPackageManager().queryIntentActivities(intent,  0 )) {
           result.add(info.activityInfo.name);
       }
       return  result;
   }

9、检测字符串中是否包含汉字

1
2
3
4
5
6
7
8
public  static  boolean  checkChinese(String sequence) {
         final  String format =  "[\\u4E00-\\u9FA5\\uF900-\\uFA2D]" ;
         boolean  result =  false ;
         Pattern pattern = Pattern.compile(format);
         Matcher matcher = pattern.matcher(sequence);
         result = matcher.find();
         return  result;
     }

10、检测字符串中只能包含:中文、数字、下划线(_)、横线(-)

1
2
3
4
5
6
public  static  boolean  checkNickname(String sequence) {
         final  String format =  "[^\\u4E00-\\u9FA5\\uF900-\\uFA2D\\w-_]" ;
         Pattern pattern = Pattern.compile(format);
         Matcher matcher = pattern.matcher(sequence);
         return  !matcher.find();
     }

11、检查有没有应用程序来接受处理你发出的intent

1
2
3
4
5
6
public  static  boolean  isIntentAvailable(Context context, String action) {
         final  PackageManager packageManager = context.getPackageManager();
         final  Intent intent =  new  Intent(action);
         List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
         return  list.size() >  0 ;
     }

12、使用TransitionDrawable实现渐变效果 

1
2
3
4
5
6
7
8
9
private  void  setImageBitmap(ImageView imageView, Bitmap bitmap) {
         // Use TransitionDrawable to fade in.
         final  TransitionDrawable td =  new  TransitionDrawable( new  Drawable[] {  new  ColorDrawable(android.R.color.
         transparent),  new  BitmapDrawable(mContext.getResources(), bitmap) });
         //noinspection deprecation
             imageView.setBackgroundDrawable(imageView.getDrawable());
         imageView.setImageDrawable(td);
         td.startTransition( 200 );
     }

    比使用AlphaAnimation效果要好,可避免出现闪烁问题。
13、扫描指定的文件
     sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
     用途:从本软件新增、修改、删除图片、文件某一个文件(音频、视频)需要更新系统媒体库时使用,不必扫描整个SD卡

14、Dip转px

1
2
3
public  static  int  dipToPX( final  Context ctx,  float  dip) {
         return  ( int )TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, ctx.getResources().getDisplayMetrics());
     }

  用途:难免在Activity代码中设置位置、大小等,本方法就很有用了! 
15、获取已经安装APK的路径

1
2
3
4
5
PackageManager pm = getPackageManager();
 
         for  (ApplicationInfo app : pm.getInstalledApplications( 0 )) {
              Log.d( "PackageList" "package: "  + app.packageName +  ", sourceDir: "  + app.sourceDir);
         }

输出如下:

1
2
package : com.tmobile.thememanager, sourceDir: /system/app/ThemeManager.apk
         package : com.touchtype.swiftkey, sourceDir: /data/app/com.touchtype.swiftkey- 1 .apk

16、多进程Preferences数据共享

1
2
3
4
5
6
7
8
9
10
11
public  static  void  putStringProcess(Context ctx, String key, String value) {
         SharedPreferences sharedPreferences = ctx.getSharedPreferences( "preference_mu" , Context.MODE_MULTI_PROCESS);
         Editor editor = sharedPreferences.edit();
         editor.putString(key, value);
         editor.commit();
     }
 
     public  static  String getStringProcess(Context ctx, String key, String defValue) {
         SharedPreferences sharedPreferences = ctx.getSharedPreferences( "preference_mu" , Context.MODE_MULTI_PROCESS);
         return  sharedPreferences.getString(key, defValue);
     }

 相关文章:

                        http://zengrong.net/post/1687.htm


17、泛型ArrayList转数组

1
2
3
4
5
6
7
@SuppressWarnings ( "unchecked" )
     public  static  <T> T[] toArray(Class<?> cls, ArrayList<T> items) {
         if  (items ==  null  || items.size() ==  0 ) {
             return  (T[]) Array.newInstance(cls,  0 );
         }
         return  items.toArray((T[]) Array.newInstance(cls, items.size()));
     }

18、保存恢复ListView当前位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private  void  saveCurrentPosition() {
         if  (mListView !=  null ) {
             int  position = mListView.getFirstVisiblePosition();
             View v = mListView.getChildAt( 0 );
             int  top = (v ==  null ) ?  0  : v.getTop();
             //保存position和top
         }
     }
     
     private  void  restorePosition() {
         if  (mFolder !=  null  && mListView !=  null ) {
             int  position =  0 ; //取出保存的数据
             int  top =  0 ; //取出保存的数据
             mListView.setSelectionFromTop(position, top);
         }
     }

   可以保存在Preference中或者是数据库中,数据加载完后再设置。


19、调用 便携式热点和数据共享 设置

1
2
3
4
5
6
7
public  static  Intent getHotspotSetting() {
         Intent intent =  new  Intent();
         intent.setAction(Intent.ACTION_MAIN);
         ComponentName com =  new  ComponentName( "com.android.settings" "com.android.settings.TetherSettings" );
         intent.setComponent(com);
         return  intent;
     }

20、格式化输出IP地址

1
2
3
4
public  static  String getIp(Context ctx) {
         return  Formatter.formatIpAddress((WifiManager) ctx.getSystemService(Context.WIFI_SERVICE).
         getConnectionInfo().getIpAddress());
     }

21、文件夹排序(先文件夹排序,后文件排序)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public  static  void  sortFiles(File[] files) {
         Arrays.sort(files,  new  Comparator<File>() {
 
             @Override
             public  int  compare(File lhs, File rhs) {
                 //返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。 
                 boolean  l1 = lhs.isDirectory();
                 boolean  l2 = rhs.isDirectory();
                 if  (l1 && !l2)
                     return  - 1 ;
                 else  if  (!l1 && l2)
                     return  1 ;
                 else  {
                     return  lhs.getName().compareTo(rhs.getName());
                 }
             }
         });
     }

22、发送不重复的通知(Notification)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public  static  void  sendNotification(Context context, String title,
             String message, Bundle extras) {
         Intent mIntent =  new  Intent(context, FragmentTabsActivity. class );
         mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         mIntent.putExtras(extras);
 
         int  requestCode = ( int ) System.currentTimeMillis();
 
         PendingIntent mContentIntent = PendingIntent.getActivity(context,
                 requestCode, mIntent,  0 );
 
         Notification mNotification =  new  NotificationCompat.Builder(context)
                 .setContentTitle(title).setSmallIcon(R.drawable.app_icon)
                 .setContentIntent(mContentIntent).setContentText(message)
                 .build();
         mNotification.flags |= Notification.FLAG_AUTO_CANCEL;
         mNotification.defaults = Notification.DEFAULT_ALL;
 
         NotificationManager mNotificationManager = (NotificationManager) context
                 .getSystemService(Context.NOTIFICATION_SERVICE);
 
         mNotificationManager.notify(requestCode, mNotification);
     }

  关键点在这个requestCode,这里使用的是当前系统时间,巧妙的保证了每次都是一个新的Notification产生。


23、代码设置TextView的样式

                使用过自定义Dialog可能马上会想到用如下代码:

                new TextView(this,null,R.style.text_style);

                但你运行这代码你会发现毫无作用!正确用法:

1
new  TextView( new  ContextThemeWrapper( this , R.style.text_style))

24、ip地址转成8位十六进制串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  /** ip转16进制 */
     public  static  String ipToHex(String ips) {
         StringBuffer result =  new  StringBuffer();
         if  (ips !=  null ) {
             StringTokenizer st =  new  StringTokenizer(ips,  "." );
             while  (st.hasMoreTokens()) {
                 String token = Integer.toHexString(Integer.parseInt(st.nextToken()));
                 if  (token.length() ==  1 )
                     token =  "0"  + token;
                 result.append(token);
             }
         }
         return  result.toString();
     }
 
     /** 16进制转ip */
     public  static  String texToIp(String ips) {
         try  {
             StringBuffer result =  new  StringBuffer();
             if  (ips !=  null  && ips.length() ==  8 ) {
                 for  ( int  i =  0 ; i <  8 ; i +=  2 ) {
                     if  (i !=  0 )
                         result.append( '.' );
                     result.append(Integer.parseInt(ips.substring(i, i +  2 ),  16 ));
                 }
             }
             return  result.toString();
         catch  (NumberFormatException ex) {
             Logger.e(ex);
         }
         return  "" ;
     }

ip:192.168.68.128 16 =>hex :c0a84480


25、WebView保留缩放功能但隐藏缩放控件

1
2
3
4
  mWebView.getSettings().setSupportZoom( true );
         mWebView.getSettings().setBuiltInZoomControls( true );
         if  (DeviceUtils.hasHoneycomb())
               mWebView.getSettings().setDisplayZoomControls( false );

 注意:setDisplayZoomControls是在API Level 11中新增。


26、获取网络类型名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  public  static  String getNetworkTypeName(Context context) {
         if  (context !=  null ) {
             ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
             if  (connectMgr !=  null ) {
                 NetworkInfo info = connectMgr.getActiveNetworkInfo();
                 if  (info !=  null ) {
                     switch  (info.getType()) {
                     case  ConnectivityManager.TYPE_WIFI:
                         return  "WIFI" ;
                     case  ConnectivityManager.TYPE_MOBILE:
                         return  getNetworkTypeName(info.getSubtype());
                     }
                 }
             }
         }
         return  getNetworkTypeName(TelephonyManager.NETWORK_TYPE_UNKNOWN);
     }
 
     public  static  String getNetworkTypeName( int  type) {
         switch  (type) {
         case  TelephonyManager.NETWORK_TYPE_GPRS:
             return  "GPRS" ;
         case  TelephonyManager.NETWORK_TYPE_EDGE:
             return  "EDGE" ;
         case  TelephonyManager.NETWORK_TYPE_UMTS:
             return  "UMTS" ;
         case  TelephonyManager.NETWORK_TYPE_HSDPA:
             return  "HSDPA" ;
         case  TelephonyManager.NETWORK_TYPE_HSUPA:
             return  "HSUPA" ;
         case  TelephonyManager.NETWORK_TYPE_HSPA:
             return  "HSPA" ;
         case  TelephonyManager.NETWORK_TYPE_CDMA:
             return  "CDMA" ;
         case  TelephonyManager.NETWORK_TYPE_EVDO_0:
             return  "CDMA - EvDo rev. 0" ;
         case  TelephonyManager.NETWORK_TYPE_EVDO_A:
             return  "CDMA - EvDo rev. A" ;
         case  TelephonyManager.NETWORK_TYPE_EVDO_B:
             return  "CDMA - EvDo rev. B" ;
         case  TelephonyManager.NETWORK_TYPE_1xRTT:
             return  "CDMA - 1xRTT" ;
         case  TelephonyManager.NETWORK_TYPE_LTE:
             return  "LTE" ;
         case  TelephonyManager.NETWORK_TYPE_EHRPD:
             return  "CDMA - eHRPD" ;
         case  TelephonyManager.NETWORK_TYPE_IDEN:
             return  "iDEN" ;
         case  TelephonyManager.NETWORK_TYPE_HSPAP:
             return  "HSPA+" ;
         default :
             return  "UNKNOWN" ;
         }
     }

27、Android解压Zip包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
      * 解压一个压缩文档 到指定位置
     
      * @param zipFileString 压缩包的名字
      * @param outPathString 指定的路径
      * [url=home.php?mod=space&uid=2643633]@throws[/url] Exception
      */
     public  static  void  UnZipFolder(String zipFileString, String outPathString)  throws  Exception {
         java.util.zip.ZipInputStream inZip =  new  java.util.zip.ZipInputStream( new  java.io.FileInputStream(zipFileString));
         java.util.zip.ZipEntry zipEntry;
         String szName =  "" ;
 
         while  ((zipEntry = inZip.getNextEntry()) !=  null ) {
             szName = zipEntry.getName();
 
             if  (zipEntry.isDirectory()) {
 
                 // get the folder name of the widget
                 szName = szName.substring( 0 , szName.length() -  1 );
                 java.io.File folder =  new  java.io.File(outPathString + java.io.File.separator + szName);
                 folder.mkdirs();
 
             else  {
 
                 java.io.File file =  new  java.io.File(outPathString + java.io.File.separator + szName);
                 file.createNewFile();
                 // get the output stream of the file
                 java.io.FileOutputStream out =  new  java.io.FileOutputStream(file);
                 int  len;
                 byte [] buffer =  new  byte [ 1024 ];
                 // read (len) bytes into buffer
                 while  ((len = inZip.read(buffer)) != - 1 ) {
                     // write (len) byte from buffer at the position 0
                     out.write(buffer,  0 , len);
                     out.flush();
                 }
                 out.close();
             }
         } //end of while
 
         inZip.close();
 
     } //end of func

28、从assets中读取文本和图片资源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  /** 从assets 文件夹中读取文本数据 */
     public  static  String getTextFromAssets( final  Context context, String fileName) {
         String result =  "" ;
         try  {
             InputStream in = context.getResources().getAssets().open(fileName);
             // 获取文件的字节数
             int  lenght = in.available();
             // 创建byte数组
             byte [] buffer =  new  byte [lenght];
             // 将文件中的数据读到byte数组中
             in.read(buffer);
             result = EncodingUtils.getString(buffer,  "UTF-8" );
             in.close();
         catch  (Exception e) {
             e.printStackTrace();
         }
         return  result;
     }
     
     /** 从assets 文件夹中读取图片 */
     public  static  Drawable loadImageFromAsserts( final  Context ctx, String fileName) {
         try  {
             InputStream is = ctx.getResources().getAssets().open(fileName);
             return  Drawable.createFromStream(is,  null );
         catch  (IOException e) {
             if  (e !=  null ) {
                 e.printStackTrace();
             }
         catch  (OutOfMemoryError e) {
             if  (e !=  null ) {
                 e.printStackTrace();
             }
         catch  (Exception e) {
             if  (e !=  null ) {
                 e.printStackTrace();
             }
         }
         return  null ;
     }

29、展开、收起状态栏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public  static  final  void  collapseStatusBar(Context ctx) {
         Object sbservice = ctx.getSystemService( "statusbar" );
         try  {
             Class<?> statusBarManager = Class.forName( "android.app.StatusBarManager" );
             Method collapse;
             if  (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                 collapse = statusBarManager.getMethod( "collapsePanels" );
             else  {
                 collapse = statusBarManager.getMethod( "collapse" );
             }
             collapse.invoke(sbservice);
         catch  (Exception e) {
             e.printStackTrace();
         }
     }
 
     public  static  final  void  expandStatusBar(Context ctx) {
         Object sbservice = ctx.getSystemService( "statusbar" );
         try  {
             Class<?> statusBarManager = Class.forName( "android.app.StatusBarManager" );
             Method expand;
             if  (Build.VERSION.SDK_INT >=  17 ) {
                 expand = statusBarManager.getMethod( "expandNotificationsPanel" );
             else  {
                 expand = statusBarManager.getMethod( "expand" );
             }
             expand.invoke(sbservice);
         catch  (Exception e) {
             e.printStackTrace();
         }
     }

  用途:可用于点击Notifacation之后收起状态栏


30、获取状态栏高度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  static  int  getStatusBarHeight(Context context){
         Class<?> c =  null ;
         Object obj =  null ;
         Field field =  null ;
         int  x =  0 , statusBarHeight =  0 ;
         try  {
             c = Class.forName( "com.android.internal.R$dimen" );
             obj = c.newInstance();
             field = c.getField( "status_bar_height" );
             x = Integer.parseInt(field.get(obj).toString());
             statusBarHeight = context.getResources().getDimensionPixelSize(x);
         catch  (Exception e1) {
             e1.printStackTrace();
         }
         return  statusBarHeight;
     }

31、ListView使用ViewHolder极简写法

1
2
3
4
5
6
7
8
9
10
11
12
13
public  static  <T  extends  View> T getAdapterView(View convertView,  int  id) {
         SparseArray<View> viewHolder = (SparseArray<View>) convertView.getTag();
         if  (viewHolder ==  null ) {
             viewHolder =  new  SparseArray<View>();
             convertView.setTag(viewHolder);
         }
         View childView = viewHolder.get(id);
         if  (childView ==  null ) {
             childView = convertView.findViewById(id);
             viewHolder.put(id, childView);
         }
         return  (T) childView;
     }

用法

1
2
3
4
5
6
7
8
9
@Override
     public  View getView( int  position, View convertView, ViewGroup parent) {
         if  (convertView ==  null ) {
             convertView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_feed_item, parent,  false );
         }
 
         ImageView thumnailView = getAdapterView(convertView, R.id.video_thumbnail);
         ImageView avatarView =  getAdapterView(convertView, R.id.user_avatar);
         ImageView appIconView = getAdapterView(convertView, R.id.app_icon);

用起来非常简练,将ViewHolder隐于无形。


32、设置Activity透明

1
2
3
4
5
6
7
<style name= "TransparentActivity"  parent= "AppBaseTheme" >
         <item name= "android:windowBackground" > @android :color/transparent</item>
         <item name= "android:colorBackgroundCacheHint" > @null </item>
         <item name= "android:windowIsTranslucent" > true </item>
         <item name= "android:windowNoTitle" > true </item>
         <item name= "android:windowContentOverlay" > @null </item>
     </style>

说明:AppBaseTheme一般是你application指定的android:theme是啥这里就是啥,否则Activity内部的空间风格可能不一致。

           用途:用于模拟Dialog效果,比如再Service中没法用Dialog,就可以用Activity来模拟

33、代码切换全屏

1
2
3
4
5
6
7
//切换到全屏
         getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
         getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 
         //切换到非全屏
         getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

 注意:切换到全屏时,底部的虚拟按键仍然是显示的。次方法可多次调用用于切换

            用途:播放器界面经常会用到


34、调用开发者选项中显示触摸位置功能

1
android.provider.Settings.System.putInt(getContentResolver(),  "show_touches" 1 );

 设置1显示,设置0不显示。


35、获取设备上已安装并且可启动的应用列表

1
2
3
4
Intent intent =  new  Intent(Intent.ACTION_MAIN);
             intent.addCategory(Intent.CATEGORY_LAUNCHER);
 
             List<ResolveInfo> activities = getPackageManager().queryIntentActivities(intent,  0 )

注意:使用getInstalledApplications会返回很多无法启动甚至没有图标的系统应用。ResolveInfo.activityInfo.applicationInfo也能取到你                     想要的数据


原文: http://www.eoeandroid.com/thread-570919-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值