How to remove directory from remote and local

Remove directory from remote repo and local

1
2
3
git rm -r FolderName
git commit -m "Remove folder from repository"
git push origin <your-git-branch> (typically 'master', but not always)

Remove directory from remote repo but NOT local

1
2
3
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

【转】Android中关于Date格式化的方法总结

方法1

直接使用 android.text.format.DateFormat类:

1
String date = (String)DateFormat.format("EEEE, MMMM dd日, yyyy kk:mm", new(Date());

值得注意的是:
(1)可根据格局需要来设定日期的格式模板,主要模板如下:
“MM/dd/yy h:mmaa” -> “11/03/87 11:23am”
“MMM dd, yyyy h:mmaa” -> “Nov 3, 1987 11:23am”
“MMMM dd, yyyy h:mmaa” -> “November 3, 1987 11:23am”
“E, MMMM dd, yyyy h:mmaa” -> “Tues , November 3, 1987 11:23am”
“EEEE, MMMM dd, yyyy h:mmaa” -> “Tues day, Nov 3, 1987 11:23am”
“yyyy年MM月dd日,kk:mm” -> 2014年09月30日,11:23
(2)关于用24小时制的设定
“EEEE, MMMM dd, yyyy kk:mm” -> “Tues day, Nov 3, 1987 23:23”
其中:12小时制 :hh; 24小时制: kk,如果用 SimpleDateFormat ,则为: hh; HH
我们可使用Android.text.format.DateFormat类的static boolean is24HourFormat(Context context)方法可以用来判断当前系统时间是否为24小时制式。

方法2

1
2
3
4
5
6
7
import java.text.SimpleDateFormat;
import java.util.Date;
long time=System.currentTimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd EEEE HH:mm");
Date d1 = new Date(time);
String date = format.format(d1);

方法3

1
2
3
4
5
import java.text.SimpleDateFormat;
import java.util.Date;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd E HH:mm");
String date = format.format(new Date());

【转】Activity中的finish() VS OnDestroy()

Activity.finish()
Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。

当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。换而言之,finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。安卓系统自己决定何时从内存中释放应用程序。当系统没有可用内存到时候,会按照优先级,释放部分应用。

Activity.onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。

如何用命令行对mysql进行操作

(1)启动服务器
如果发现”Can’t connect to local MySQL server through socket…”,通常是因为MySQL服务器没有启用。

用命令行启动和关闭MySQL服务器:

1
2
sudo /usr/local/mysql/support-files/mysql.server start
sudo /usr/local/mysql/support-files/mysql.server stop

(2)修改root用户密码
方法1: 用SET PASSWORD命令

1
2
  mysql -u root
  mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

方法2:用mysqladmin

1
  mysqladmin -u root password "newpass"

如果root已经设置过密码(123456),那么修改密码为abcdef的命令是:

1
mysqladmin -u root -p123456 password abcdef

注意:上述命令中参数-p不要和后面的密码分开写,要写在一起,不然会出错

方法3: 用UPDATE直接编辑user表

1
2
3
4
  mysql -u root
  mysql> use mysql;
  mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
  mysql> FLUSH PRIVILEGES;

在丢失root密码的时候,可以这样

1
2
3
4
  mysqld_safe --skip-grant-tables&
  mysql -u root mysql
  mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';
  mysql> FLUSH PRIVILEGES;

(3)登录使用mysql

1
mysql -h localhost -u root -p

Android Studio 使用Support.v7和support.v4包遇到的各种问题

如果在Android Studio中打开项目时,发现了如下Error:
Failed to resolve: com.android.support:appcompat-v7:25.0.2(下图中红色框部分)

上述问题通常是由于compileSdkVersion和buildToolsVersion对应的版本和导入的v7包要求的版本不一样。解决方法如下:

第一步,明确compileSdkVersion版本

在下图红色框部分,描述的即是我们需要确认的compileSdkVersion版本。

第二步,compileSdkVersion版本修改appcompat-v7包的版本

在上图黄色框部分,明显可见红色波浪线,这就提示我们此处有错误。将光标移过去,可见提醒如下图:

这是指当前我们设置的support包版本与compileSdkVersion版本不一致,只有设置成一致能能让APP成功运行。所以我们需要进行修改,结果如下图红色框部分:

其他需要注意的版本设置

(1)minSDK VS targetSDK:

这两者相当于一个区间,你可以用到targetSDK中最新的API和最酷的新功能,但你又不得不向下兼容到minSDK,保证这个区间内的设备都可以正常的运行你的app。换句话说,你想使用Android刚刚推出的新特性,但这对于你的app又不是必须的,你就可以将targetSDK设置为你想使用新特性的SDK版本,minSDK设置成低版本保证所有人都可以使用你的app。

例子1:假如你想给你的app加入大量的手势操作(sdk 7才引入的),然而这些手势操作可以被Button或menu等代替,在这种情况下,手势操作就是一个额外的加分功能,而不是一个必须的功能,因此你就需要把targetSDK设置为7,把minSDK设置为3(这是举个例子,现在没人还在用这么老的设备了)这样即使是使用老设备的用户也可以用你的app了。然后你所要做的就是要在代码里判断版本,如果是大于等于7的版本中就使用手势操作,小于7的版本中就使用button等代替,这样使用了新手机的用户就可以体验到你app中酷炫的新功能了。

例子2:如果你想给你的项目加入Android 5.0的Material Design,有一些用户可能会升级到5.0而使用到你的新特性,而有一部分用户的手机硬件太老,不支持升级到5.0,除非他们换新手机,那么你就要为他们进行向下兼容,不至于损失这部分用户,这样你的targetSDK设置为21,minSDK可以设置为8。

(2)buildToolsVersion VS compileSdkVersion

  • CompileSdkVersion是你SDK的版本号,也就是API Level,例如API-19、API-20、API-21等等。
  • buildeToolVersion是你构建工具的版本,其中包括了打包工具aapt、dx等等。这个工具的目录位于..your_sdk_path/build-tools/XX.XX.XX。例如最新的build-tool的版本就是25.0.2。
  • 在android studio中是必须在build.gradle中设置buildToolsVersion。例如上图中的:

    1
    2
    compileSdkVersion 22
    buildToolsVersion "25.0.2"
  • 你可以用高版本的build-tool去构建一个低版本的sdk工程,例如build-tool的版本为20,去构建一个sdk版本为18的。

另外需要注意的是,正如光标提示的错误信息中讲到,我们有时候为了能体验到最新的Android系统,需要保持最新的SDK更新,这会同时把build-Tools也进行更新,如下二图所示(AS2.3之后的版本中将不再提供独立的SDK Manager程序):

【转】gradle与gradle wrapper关系,以及版本关系

关于gradle、gradle plugin、gradle和gradlew的具体说明,还请参见以下链接:
http://hucaihua.cn/2016/09/27/Gradle_upgrade/

转自:http://blog.csdn.net/klx502/article/details/50762059

gradle-wrapper.properties中的设置

1
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip

build.gradle中的设置

1
2
3
4
5
6
7
8
9
10
11
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

上述两个与gradle相关的设置,有何关系和区别?

问:
在上述两个设置文件中,与gradle相关但是用到了不同的版本设置。那么他们的关系到底是什么样的?gradle wrapper作用是什么?

答:
gradle wrapper task利用gradle-wrapper.properties来下载指定的gradle。

build.gradle中classpath ‘com.android.tools.build:gradle:1.5.0’表示要使用这个android plugin的库,而这个android plugin是对gradle库的扩展。

前者是gradle的版本,当时正式版最新的是2.9。实际上是到这里下载https://services.gradle.org/distributions;
后者是android plugin的版本,当时正式版本最新是1.5.0。实际上是到这里来下载https://jcenter.bintray.com/com/android/tools/build/gradle/1.5.0/。

另外的配置问题参考

可参见http://blog.csdn.net/rodulf/article/details/50679928。

如何解决Android Studio Refreshing Gradle Project 编译更新Gradle卡住问题

问题描述

重新安装Android Studio或从Eclipse换到AS的时候,在编译新的项目的时候,一般会遇到如下图那样:
停止状态

这个问题一般是因为在Android Studio每次更新版本都会更新Gradle这个插件(但由于墙的问题每次更新都是失败),于是停止在Refreshing Gradle Project状态下。

关于gradle、gradle plugin、gradle和gradlew的具体说明,请参见以下以下链接:
http://hucaihua.cn/2016/09/27/Gradle_upgrade/

解决方案

打开AndroidStudio项目,找到项目目录\wrapper\gradle-wrapper.properties,如下图所示:
在AS中打开设置文件
在上图中,找到以下代码:

1
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

这里gradle-3.3-all.zip,就是我们要翻墙去下载更新的gradle版本。Android Studio会联网下载符合当前版本的Gradle插件,而这个网址虽然可以访问但速度实在太慢,所以每次下载需要花很长时间或直接超时。

Hexo+Git 搭建Blog时需要注意的地方

对之前的博文进行补充:
(1)在安装完Git之后,需要对SSH进行配置

  • 检查SSH key

    1
    cd ~/.ssh
  • 备份已有的key(如果有的话)

    1
    2
    mkdir key_backup
    mv id_rsa* key_backup
  • 生成SSH key

    1
    ssh-keygen -t rsa -C “xxx@xxx.com”
  • 将SSH key添加到Github
    登录到GitHub页面,Account Settings->SSH Public Keys->Add another key将生成的key(id_rsa.pub文件)内容copy到输入框中,save。

  • 测试连接

    1
    ssh git@github.com
  • 设置个人信息

    1
    2
    git config --global user.name ”xxx”
    git config --global user.email xxx@xxx.com

(2)修改hexo根目录下_config.yml文件(xxx为你的github账户名称)

1
2
3
4
deploy:
type: github
repo: git@github.com:xxx/xxx.github.io.git
branch: master

Android中Mipmap和Drawable的区别

Android 在 API level 17 加入了 mipmap 技术,对 bitmap 图片的渲染支持 mipmap 技术,来提高渲染的速度和质量。

mipmap 是一种很早就有的技术了,翻译过来就是纹理映射技术。android 中的 mipmap 技术主要为了应对图片大小缩放的处理,在android 中我们提供一个 bitmap 图片,由于应用的需要(比如缩放动画),可能对这个 bitmap 进行各种比例的缩小,为了提高缩小的速度和图片的质量,android 通过 mipmap 技术提前对按缩小层级生成图片预先存储在内存中,这样就提高了图片渲染的速度和质量。

api 中通过 Bitmap 的 public final void setHasMipMap (boolean hasMipMap) 方法可以让系统渲染器尝试开启 Bitmap 的 mipmap 技术。但是这个方法只能建议系统开启这个功能,至于是否正真开启,还是由系统决定。

res 目录下面 mipmap 和 drawable 的区别也就是上面这个设置是否开启的区别。mipmap 目录下的图片默认 setHasMipMap 为 true,drawable 默认 setHasMipMap 为 false。

google 建议大家只把 app 的启动图标放在 mipmap 目录中,其他图片资源仍然放在 drawable 下面。

google :
drawable/
For bitmap files (PNG, JPEG, or GIF), 9-Patch image files, and XML files that describe Drawable shapes or Drawable objects that contain multiple states (normal, pressed, or focused). See the Drawable resource type.
mipmap/
For app launcher icons. The Android system retains the resources in this folder (and density-specific folders such as mipmap-xxxhdpi) regardless of the screen resolution of the device where your app is installed. This behavior allows launcher apps to pick the best resolution icon for your app to display on the home screen. For more information about using the mipmap folders, see Managing Launcher Icons as mipmap Resources.

Android中如何读取txt文件的内容以及其编码问题

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
//读取文本文件中的内容
public static String ReadTxtFile(String strFilePath)
{
String path = strFilePath;
String content = ""; //文件内容字符串
//打开文件
File file = new File(path);
//如果path是传递过来的参数,可以做一个非目录的判断
if (file.isDirectory())
{
Log.d("TestFile", "The File doesn't not exist.");
}
else
{
try {
InputStream instream = new FileInputStream(file);
InputStreamReader inputStreamReader = null;
try {
inputStreamReader = new InputStreamReader(instream, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
BufferedReader reader = new BufferedReader(inputStreamReader);
StringBuffer sb = new StringBuffer("");
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
content = sb.toString();
}
catch (java.io.FileNotFoundException e)
{
Log.d("TestFile", "The File doesn't not exist.");
}
catch (IOException e)
{
Log.d("TestFile", e.getMessage());
}
}
return content;
}