一些有用的-------小工具

Posted 泸沽烟火

tags:

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

获取系统时间:

方法1:

import java.text.SimpleDateFormat;
import java.util.Date;     

  SimpleDateFormat   formatter   =   new   SimpleDateFormat   ("yyyy年MM月dd日   HH:mm:ss");     
  Date curDate =  new Date(System.currentTimeMillis()); 

获取时间:

        String newTime = formatter.format(curDate);

方法2:

import java.util.Calendar;

    private Calendar mCalendar;

	//获取时间
    private String Ctime() {
        mCalendar = Calendar.getInstance();
        long time = System.currentTimeMillis();
        mCalendar.setTimeInMillis(time);

        //判断上下午
        int timestate = mCalendar.get(Calendar.AM_PM);
        String am_pm = (timestate == 0) ? "AM" : "PM";

        //0是1月
        int month = mCalendar.get(Calendar.MONTH) + 1;

        return mCalendar.get(Calendar.YEAR) + "年" + month + "月" + mCalendar.get(Calendar.DAY_OF_MONTH) + "日"
                + "  " + am_pm + " " +
                mCalendar.get(Calendar.HOUR) + ":" + mCalendar.get(Calendar.MINUTE) + ":" + mCalendar.get(Calendar.SECOND);
    }

记录方法运行了多少时间:

  //开始时添加
  long a = System.currentTimeMillis();
  //结束时添加
  Log.e("dotime", "time is =" + (System.currentTimeMillis() - a) / 1000f + " 秒 ");


用adb shell查看数据库:

打开控制台,

1.adb shell

2.cd /data/data/包名/databases

包名是在androidManifest.xml里面,package后面的内容


3.这样就是成功了,然后在 # 后面输入ls


4.下面的myClass.db就是要打开的数据库,输入sqlite3 myClass.db 用sqlite3 打开目标数据库


5.直接输入sql语句即可,例如select * from person;



OSI七层网络模型(从下往上):

物理层:为设备之间的数据通信提供传输媒体以及互连设备,为数据传输提供可靠的环境。单位是:bit 比特。

数据链路层:数据通道,主要功能是如何在不可靠的物理线路上进行数据的可靠传递,改层作用包括:物理地址寻址,数据的成帧,流量控制,数据检错以及重发等!另外这个数据链路指的是:物理层要为终端设备间的数据通信提供传输媒体及其连接。媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信。每次通信都要经过建立通信联络和拆除通信联络两过程。单位是:帧。

网络层:主要功能是把网络地址翻译成对应的物理地址,并决定如何把数据从发送方路由到接收方。该层的单位为:数据包。IP协议就在这一层。

传输层:向上面的应用层提供通信服务,面向通信部分的最高层,同时也是用户功能中的最低层。接收会话层数据,在必要时将数据进行分割,并将这些数据交给网络层,并且保证这些数据段有效的到达对端!所以这层的单位是:数据段。这层有两个很重要的协议就是:TCP传输控制协议和UDP传输控制协议。

会话层:负责在网络中的两节点之间建立、维持和终止通信。建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对话,决定通信是否被中断以及通信中断时决定从何处重新发送,即不同机器上的用户之间会话的建立及管理。

表示层:对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。其主要功能是"处理用户信息的表示问题,如编码、数据格式转换和加密解密,压缩解压缩"等。

应用层:OSI参考模型的最高层,为用户的应用程序提供网络服务。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外,该层还负责协调各个应用程序间的工作。应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登录服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。

OSI是一个理想模型,一般的网络系统只涉及其中几层,在七层的模型中,每层都提供了一个功能:

下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主;

第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分;

上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主;


TCP/IP四层模型:

应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。

网络连接层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

主机到网络层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。


Activity的活动状态:

运行状态,暂停状态,停止状态,销毁状态

Activity的生命周期:onCreat(),onDestroy(),onStart(),onPause(),onResume(),onStop(),onRestart()

Activity的启动模式:

1.standard:默认启动模式,在此模式下,每当启动一个Activity时(不管回退栈中是否有次Activity),都会把此Activity加入到回退栈中,并置于栈顶,也就是说每次启动一个Activity就会创建该活动的一个新的实例。

2.singleTop:栈顶唯一,在此模式下,当启动的Activity已经在回退栈的栈顶的时候,就不会再次创建新的活动实例,而是直接使用此Activity。但是如果此活动没有在栈顶,就会再次创建一个新的实例。此方法可以很好的解决重复创建栈顶活动的问题。

3.singleTask:栈内唯一,在此模式下,每当启动一个Activity时,系统首先会在回退栈中检查是否存在该Activity的实例,如果发现存在,则直接使用该实例,否则将创建一个新的实例。此方法可以很好的解决在同一个栈内重复创建相同活动的问题。

4.singleInstance:指定为此模式的活动在启动时会创建一个新的回退栈来管理此活动(如果在singleTask模式下指定了不同的taskAffinity,也会启动一个新的回退栈)。

注意,在使用startActivityForResult()的时候,只能指定为默认模式,否则会直接调用onActivityResult()并返回一个REUKT_CANCELED。


完全退出APP:

1.创建一个活动管理器

public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<>();

    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
}

2.在BaseActivity的onCreat()方法中添加addActivity()方法

ActivityCollector.addActivity(this);

3. 在BaseActivity的onDestroy()方法中添加removeActivity()方法

ActivityCollector.removeActivity(this);

4.在需要结束APP的地方添加finishAll()方法

ActivityCollector.finishAll();

android的限定符



TextUtils的一些方法:


equals(CharSequence a,CharSequence b)

判断a和b是否相等,相等返回true

getChars(CharSequences, int start, int end, char[] dest, int destoff)

按要求获取字符

getOffsetAfter(CharSequences text, int offset)

获取offset后的字符长度

getoffsetBefore(CharSequences text, int offset)

获取offset前的字符长度

getReverse(CharSequences text, int start, int end)

获取反向序列

getTrimmedLength(CharSequence s)

获取去掉字符序列头尾空格后的长度,和.trim()的作用相同

htmlEncode(String s)
把字符S进行HTML编码,并返回编码后的字符串

indexOf(CharSequence s, char ch)
返回字符ch在该字符序列s中第一次出现的位置

indexOf(CharSequence s, char ch, int start)
返回在字符序列s中指定的位置start开始查找字符ch出现第一次的位置

indexOf(CharSequence s, char ch, int start, int end)
返回在字符序列s中指定的一段字符序列(以start开始,end结尾)中字符ch出现的第一次的位置

indexOf(CharSequence s,CharSequence needle)
返回指定的字符序列needle在字符序列s中第一次出现的位置

indexOf(CharSequence s,CharSequence needle, int start)
返回从字符序列中s指定的位置开始字符序列needle第一次出现的位置

indexOf(CharSequence s,CharSequence needle, int start, int end)
返回在字符序列s指定的一段中字符序列needle第一次出现的位置

isDigitsOnly(CharSequence str)
判断给定的字符序列str是否只包含数字。

isEmpty(CharSequence str)
判断给定的字符序列是否为空。如果字符串为空或者它的长度为0返回true。

isGraphic(char c)
判断给定的字符c是否是图形。

join(CharSequence delimiter,Iterable tokens)
让指定的迭代器加入到指定的分隔符序列中,组成一个字符串,并返回这个字符串。

lastIndexOf(CharSequence s, char ch)
返回指定字符ch在指定的字符序列s中最后一个位置的值。

lastIndexOf(CharSequence s, char ch, int last)
返回指定字符ch在指定的字符序列s中到指定的末尾last处最后一个位置的值。

lastIndexOf(CharSequence s, char ch, int start, int last)
返回指定字符c在指定的字符序列s中指定的一段中长度(以start开始,last结尾)最后一个位置的值。

regionMatches(CharSequence one, int toffset,CharSequence two, int ooffset, int len)
返回指定的字符序列one从toffset开始和指定的字符序列two从ooffset开始比较指定长度len的字符序列的布尔值。如果相同就返回true.如果不同就返回false。

replace(CharSequence template,String[] sources,CharSequence[] destinations)
返回一个新的字符序列:这个源字符串被目标字符序列组中对应的元素所代替而产生的一个新字符序列。

split(String text,Pattern pattern)
返回用指定的样式pattern来分隔这个字符串而形成的那个新的字符串。

split(String text,String expression)
返回用指定表达式expression来分隔指定的字符串而产生的新的字符串。当字符串被分隔后是空的就返回['']

substring(CharSequence source, int start, int end)
返回字符序列源的子字符串。从字符序列源中的指定的位置取出一个新的字符串并返回。


SQLite的一些操作

四种操作ISUD----I 添加,S 查询,U 更新,D 删除

添加用insert,查询用select,更新用updata,删除用delete

Android可以借助SQLiteOpenHelper的getReadableDatabase()和getWritableDatabase()方法来创建和升级数据库

用上面两个方法返回的SQLiteDatabase对象,对数据进行CRUD;

Insert:添加

在拿到SQLiteDatabase对象后

                ContentValues values = new ContentValues();
                values.put("author", "DaiAnNa");
                values.put("name", "TaiYangDeYunLuo");
                values.put("price", 13.14);
                values.put("pages", 200);
                sqLiteDatabase.insert("Book", null, values);
                values.clear();
                values.put("author", "ArBoLuo");
                values.put("name", "YueLiangDeXiaoYun");
                values.put("price", 14.13);
                values.put("pages", 100);
                sqLiteDatabase.insert("Book", null, values);

insert(String table,String nullColumnHack,ContentValues values),这个插入方法的参数说明如下:
table:代表想插入数据的表名。
nullColumnHack:代表强行插入null值的数据列的列名。
values:代表一行记录的数据。


Update:更新

把name等于LoveChangEr的条目的price和pages改为69和169:

                values.clear();
                values.put("price", 69);
                values.put("pages", 169);
                sqLiteDatabase.update("Book", values, "name = ?", new String[]{"LoveChangEr"});

update(String table,ContentValues values,String whereClause,String[] whereArgs),这个更新方法的参数说明如下:
table:代表想要更新数据的表名。
values:代表想要更新的数据。
whereClause:满足该whereClause子句的记录将会被更新。
whereArgs:用于为whereArgs子句传递参数。

把id大于6的条目的price和pages改为69和169:

                values.put("price", 69);
                values.put("pages", 169);
                sqLiteDatabase.update("Book", values, "id > ?", new String[]{"6"});


Delete:删除

                sqLiteDatabase.delete("Book", "id = ?", new String[]{"7"});

delete(String table,String whereClause,String[] whereArgs),这个删除的参数说明如下:
table:代表想删除数据的表名。
whereClause:满足该whereClause子句的记录将会被删除。
whereArgs:用于为whereArgs子句传入参数。
删除person_inf表中所有人名以孙开头的记录
.delete("person_inf","person_name like ?",new String[]{"孙_"});


Select:查询

query(boolean distinct,String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit),这个query方法的参数说明如下。
distinct:指定是否去除重复记录。
table:执行查询数据的表名。对应 from table_name
columns:要查询出来的列名。对应 select column1,column2
selection:查询条件子句。对应 where column = value
selectionArgs:用于为selection子句中占位符传入参数值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。对应 -

groupBy:用于控制分组。对应 group by column
having:用于对分组进行过滤。对应 having column = value
orderBy:用于对记录进行排序。对应 order by column1,column2
limit:用于进行分页。


简单的查询整个表:

                //1.获得游标Cursor
                Cursor cursor = sqLiteDatabase.query("Book", null, null, null, null, null, null);
                if (cursor.moveToFirst()) {
                    //2.遍历得到的结果
                    do {
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        String author = cursor.getString(cursor.getColumnIndex("author"));
                        int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                        double price = cursor.getDouble(cursor.getColumnIndex("price"));

                        Log.e("this Book : ", "name is " + name);
                        Log.e("this Book : ", "author is " + author);
                        Log.e("this Book : ", "pages is " + pages);
                        Log.e("this Book : ", "price is " + price);

                    } while (cursor.moveToNext());
                }
                cursor.close();

查询出person_inf表中人名以孙开头的数据:

Cursor cursor=db.query("person_inf",new String[]{"_id,name,age"},"name like ?",new String []{"孙%"},null,null,"personid desc","5,10");
cursor.close();



SwipeBackHelper

仿微信Activity侧滑效果


6.0运行时权限

http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650237473&idx=1&sn=b4c11e1f46fe2a99ef0ef90071fefac3&chksm=88639b4ebf141258a5000e59601f579c8bf43ce376a287fe23e287c8abb62a1340592dd19627&scene=0#rd


透明状态栏---5.0以上版本

private void initTrans() {
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | 
								WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
		window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | 
								View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | 
								View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.TRANSPARENT);
        window.setNavigationBarColor(Color.TRANSPARENT);
}


然后隐藏ActionBar

或者在主题里设置

<style name="TranslucentTheme" parent="stubook_s_AppTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="android:windowAnimationStyle">@style/TranAnimation</item>
		<item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowBackground">@color/white</item>
		<item name="android:windowIsTranslucent">false</item>
        <item name="android:listDivider">@drawable/line_divider</item>
</style>

以上是关于一些有用的-------小工具的主要内容,如果未能解决你的问题,请参考以下文章

分享十二个有用的jQuery代码

超级有用的9个PHP代码片段

微信小程序代码片段

一些有用的-------小工具

提效小技巧——记录那些不常用的代码片段

Xcode开发中的6个小技巧