The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

#

1.Windows 很简单,写出来时为了和linux对比

   public void execWindowsCmd(String cmd) throws Exception {
      Runtime rt = Runtime.getRuntime();
      Process ppp = rt.exec(cmd);
      //input
      InputStreamReader ir = new InputStreamReader(ppp.getInputStream());
      LineNumberReader input = new LineNumberReader(ir);

      String line;
      while ((line = input.readLine()) != null)
         com.pub.Log.logger.debug(this.getClass().getClass() + " " +
                                           line);

      //error
      ir = new InputStreamReader(ppp.getErrorStream());
      input = new LineNumberReader(ir);
      while ((line = input.readLine()) != null)
         com.pub.Log.logger.debug(this.getClass().getClass() + " " +
                                           line);

      ppp.waitFor();
   }

 

2. Linux :首先要确保对于命令,允许Web服务器的用户是否有权限,普通命令和windows没什么区别。Linux管道命令不能这样直接执行,下面是具体实现fang

   public void execLinuxCmd(String cmd) throws Exception {
      Runtime rt = Runtime.getRuntime();
      File f = new File(this.fileName + PDU_SHELL);
      BufferedWriter bw = new BufferedWriter(new FileWriter(f));
      bw.write("#!/bin/bash");
      bw.newLine();
      bw.write(cmd);  //把命令写入一个文本shell文件
      bw.flush();
      bw.close();
      cmd = f.getAbsolutePath();

      Process ppp = rt.exec("chmod a+x " + cmd);  //授权该shell文件可以执行
      ppp.waitFor();

      ppp = rt.exec(cmd);  //执行shell

      //input
      InputStreamReader ir = new InputStreamReader(ppp.getInputStream());
      LineNumberReader input = new LineNumberReader(ir);

      String line;
      while ((line = input.readLine()) != null)
         com.pub.Log.logger.debug(this.getClass().getClass() + " " +
                                           line);

      //error
      ir = new InputStreamReader(ppp.getErrorStream());
      input = new LineNumberReader(ir);
      while ((line = input.readLine()) != null)
         com.pub.Log.logger.debug(this.getClass().getClass() + " " +
                                           line);

      ppp.waitFor();

   }

posted @ 2014-12-24 12:01 Eric_jiang 阅读(233) | 评论 (0)编辑 收藏

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
LayoutInflater 是一个抽象类,在文档中如下声明:
public abstract class LayoutInflater extends Object
获得 LayoutInflater 实例的三种方式
1. LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater() 
2. LayoutInflater inflater = LayoutInflater.from(context);  
3. LayoutInflater inflater =  (LayoutInflater)context.getSystemService
                              (Context.LAYOUT_INFLATER_SERVICE);
其实,这三种方式本质是相同的,从源码中可以看出:
getLayoutInflater():
Activity 的 getLayoutInflater() 方法是调用 PhoneWindow 的getLayoutInflater()方法,看一下该源代码:
public PhoneWindow(Context context)
{   
 super(context);   
    mLayoutInflater = LayoutInflater.from(context);
}
可以看出它其实是调用 LayoutInflater.from(context)。
LayoutInflater.from(context):
public static LayoutInflater from(Context context)
{   
 LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService
         (Context.LAYOUT_INFLATER_SERVICE);
    if (LayoutInflater == null)
    {       
     throw new AssertionError("LayoutInflater not found.");   
    }   
    return LayoutInflater;
}
可以看出它其实调用 context.getSystemService()。
结论:所以这三种方式最终本质是都是调用的Context.getSystemService()。
另外getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。
 
传入的Name  返回的对象 说明
WINDOW_SERVICE WindowManager 管理打开的窗口程序
LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定义的view
ACTIVITY_SERVICE ActivityManager 管理应用程序的系统状态
POWER_SERVICE PowerManger 电源的服务
ALARM_SERVICE AlarmManager 闹钟的服务
NOTIFICATION_SERVICE NotificationManager 状态栏的服务
KEYGUARD_SERVICE KeyguardManager 键盘锁的服务
LOCATION_SERVICE LocationManager 位置的服务,如GPS
SEARCH_SERVICE SearchManager 搜索的服务
VEBRATOR_SERVICE Vebrator 手机震动的服务
CONNECTIVITY_SERVICE Connectivity 网络连接的服务
WIFI_SERVICE WifiManager Wi-Fi服务
TELEPHONY_SERVICE TeleponyManager 电话服务
inflate 方法
通过 sdk 的 api 文档,可以知道该方法有以下几种过载形式,返回值均是 View 对象,如下:
public View inflate (int resource, ViewGroup root) 
public View inflate (XmlPullParser parser, ViewGroup root)
public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)  
public View inflate (int resource, ViewGroup root, boolean attachToRoot)
示意代码:
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);       
View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test));       
//EditText editText = (EditText)findViewById(R.id.content);// error 
EditText editText = (EditText)view.findViewById(R.id.content);
对于上面代码,指定了第二个参数 ViewGroup root,当然你也可以设置为 null 值。
注意:
·inflate 方法与 findViewById 方法不同;
·inflater 是用来找 res/layout 下的 xml 布局文件,并且实例化;
·findViewById() 是找具体 xml 布局文件中的具体 widget 控件(如:Button、TextView 等)。
posted @ 2014-12-17 10:23 Eric_jiang 阅读(179) | 评论 (0)编辑 收藏

     摘要: 做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。废话不说先上图片:实现机制1.先自定义一个弹出框的样式2.自己实现CustomDialog类,继承自Dialog,实现里面方法,在里面加载自定义样式的弹出框;3.使用时,与使用Dialog一样具体代码dialog_normal_layout.xml样式文件[html] view pla...  阅读全文
posted @ 2014-12-16 17:24 Eric_jiang 阅读(404) | 评论 (0)编辑 收藏

在LinearLayout中,如果将其定位方向设为横向排列:android:orientation="horizontal",那么这个布局中的控件将自左向右排列。

但有时会有这样的情况:行的左边有两个控制的同时,行的右边也有一个控制。

如图:

这怎么处理呢?

我们可以将右边的控件放在另一个LinearLayout中,同时将其对齐方式设为右对齐:android:gravity="right",还有一点,这个LinearLayout的宽度设为充满父控件: android:layout_width="fill_parent"。这样就行了。

完整的XML代码如下:

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:background="@drawable/bg"  
  6.     android:orientation="horizontal" >  
  7.   
  8.     <TextView  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="左边1" />  
  12.   
  13.     <TextView  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content"  
  16.         android:text="左边2" />  
  17.     <!-- 将TextView包在另一个LinearLayout中  
  18.          注意android:layout_width和android:gravity这两个属性  
  19.      -->  
  20.     <LinearLayout  
  21.         android:layout_width="fill_parent"  
  22.         android:layout_height="wrap_content"  
  23.         android:gravity="right" >  
  24.   
  25.         <TextView  
  26.             android:layout_width="wrap_content"  
  27.             android:layout_height="wrap_content"  
  28.             android:layout_marginRight="10dp"  
  29.             android:text="右边" />  
  30.     </LinearLayout>  
  31.   
  32. </LinearLayout>  
posted @ 2014-12-16 15:42 Eric_jiang 阅读(309) | 评论 (0)编辑 收藏

     摘要: declare-styleable:declare-styleable是给自定义控件添加自定义属性用的。官方的相关内部控件的配置属性文档:http://developer.android.com/reference/android/R.styleable.html如果不知道如何查看源码:点击这里起初,在自定义控件的时候,会要求构造3个方法中的一个或多个,好比我自定义的控件PersonView,[j...  阅读全文
posted @ 2014-12-16 12:43 Eric_jiang 阅读(568) | 评论 (0)编辑 收藏

有时候我们不满足于系统控件的外观要改变一些背景,文字颜色等,这些属性可以在代码里更改,随便哪种控件,我们点,后面会出来一大串set开头的方法。但是在代码里这样改来改去还是比较麻烦的,如果同样的控件多了,重复的代码也比较多。控件的这些属性也是可以在xml文件里改的,同样的控件多了,还是会带来代码的重复。这进我们就可以用设置控件样子式的方法了。下面以EditText控件为例来说明如何来设置一个控件的样式,工程序源码可以在后面下载;

第一步建立一个新的工程,在main布局里面建立三个EditText控件。

第二步在工程的res/values文件夹下新建一个xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="et1" parent="@android:style/Widget.EditText">
<item name="android:background">#1A4EA4</item>
<item name="android:textColor">#FFF111</item>
</style>
<style name="et2" parent="@android:style/Widget.EditText">
<item name="android:background">#A6C60F</item>
<item name="android:textColor">#EC02C3</item>
</style>
</resources>
<!--
说明:
这里建立了两种样式,从字面意思上可以看出这两中样式分别都更改了背景颜色和文字颜色
,一个控件可以更改的属性有很多,这里只改了两个,要改其它的属性,我们要知道属性的name,
才可以改。那所有的属性的名字在哪呢?找了一番终于找到了,所有的属性的名字在一个attrs.xml
文件里。这个文件存在于:android sdk目录\data\res\values 目录下,找到这个文件以后我们
改某些属性时可以做为查看的资料了。
上面的两个样式中,都有一个parent属性。这就不难理解style是可以继承的。在这里我们继
承的是系统默认的EditText属性,只修改了背景和文字颜色而已。那系统的EditText样式是在哪
定义的呢?找了一番终于也找到了,所有系统控件的样式是在一个style.xml文件中,这个文件也
在上面说的那个目录下。里面我们可以找到Widget.EditText的样式定义。有了它我们也可以查看
某一种控件可以更改哪些样式了。
在设置style时,我们经常用到@和?@表明引用的的资源是在一个项目或是系统框架中定义过
的。?表明引用的资源是在当前的主题定义过的。
上面的设置背景中的值除了可以是颜色的值外,还可以是一个图片的引用哦~~。

-->
复制代码



 

第三步我们修改main布局文件中EditText的属性。为了对比,我们将第一个属性将做改变,第二个的style属性设为我们上面建立的name为et1的样式。第三个的style属性设为我们上面建立的name为et2的样式,代码如下:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width
="fill_parent" android:layout_height="fill_parent"
android:orientation
="vertical">
<EditText android:layout_width="fill_parent"
android:layout_height
="wrap_content" android:text="默认样式" android:id="@+id/et1"></EditText>
<EditText android:layout_width="fill_parent" android:id="@+id/et2"
android:text
="自定义样式一" android:layout_height="wrap_content" style="@style/et1"></EditText>
<EditText android:layout_width="fill_parent" android:id="@+id/et3"
android:text
="自定义样式二" android:layout_height="wrap_content" style="@style/et2"></EditText>
<Button android:text="改变主题" android:id="@+id/btn1"
android:layout_width
="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>
复制代码

 

 加了一个改变主题的按钮是无效的,下一篇会用到它来设置主题。虽然定义好了style文件,但似乎并不能在java代码里设置,我没有发现像setStyle()这样的方法。所以就不 能在java代码里能过style文件动态改变控件的样式, 不知道哪位仁兄可以解决此问题,特在此求教了。

 无图无真相,下面是截图:

posted @ 2014-12-16 11:57 Eric_jiang 阅读(356) | 评论 (0)编辑 收藏

  Android中布局的单位很多,如:(dp、sp、px、in、pt、mm) 但是他们之间有什么区别了?又该在什么时候使用了?我想即使是很有经验的开发者有时也会不明白吧。

         现在这里介绍一下dp和sp。dp也就是dip。这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。

         px:表示屏幕实际的象素。例如,320*480的屏幕在横向有320个象素,在纵向有480个象素。 

         in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如,形容手机屏幕大小,经常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是3.2英寸,表示手机的屏幕(可视区域)对角线长度是3.2*2.54 = 8.128厘米。读者可以去量一量自己的手机屏幕,看和实际的尺寸是否一致。 

         mm:表示毫米,是屏幕的物理尺寸。 

         pt:表示一个点,是屏幕的物理尺寸。大小为1英寸的1/72。

posted @ 2014-12-16 11:38 Eric_jiang 阅读(181) | 评论 (0)编辑 收藏

Windows
修改 C:\Windows\System32\drivers\etc\hosts

Linux/Mac
修改 /etc/hosts

在最后添加一行:
74.125.237.1 dl-ssl.google.com

原理就是:我们输入网站时,一般都是通过DNS 域名解析。
但是顺序为:先读取 hosts 文件,是否有对应的IP,若有直接通过此IP访问。没有的话,就通过 DNS 解析到的 IP 访问,但是GOOGLE,在内地是没有服务器的,一般解析不到的。

posted @ 2014-12-16 11:16 Eric_jiang 阅读(183) | 评论 (0)编辑 收藏

全球著名投资管理公司Efficient Frontier Advisors联合创始人William Bernstein最近出版了新书,名为 If You Can: How Millennials Can Get Rich Slowly,书中介绍了掌握一些基础金融知识的重要性。

他还在自己的网页上为读者列出了一份投资书单(书单信息来自 华尔街见闻)

这几天这份书单被各大网站所转载

也有热心的坛友发布到了论坛

http://bbs.pinggu.org/thread-3039669-1-1.html

http://bbs.pinggu.org/thread-3040268-1-1.html

结合咱论坛自身优势,小冰把书籍下载链接附上

还有几本书下载链接没找到

欢迎大家补充,找到一个链接,奖励50论坛币,如果能上传论坛没有的新的下载文件,奖励100论坛币~~

咱们一起努力把书单补齐吧~

1. 《漫步华尔街》 A Random Walk Down Wall Street

作者:Burton Malkiel

Bernstein荐言:这是一本非常棒的投资初级读本,解释了股票、债券和共同基金的一些基础知识,书中还强调了有效市场的概念。
    http://bbs.pinggu.org/thread-935209-1-1.html


2. 《共同基金常识》 Common Sense on Mutual Funds

作者:John Bogle

Bernstein荐言:这本书提供了关于共同基金的细节,要多详细就有多详细。John Bogle本人就是投资巨头Vanguard集团的创始人,他的话在这个行业中一直掷地有声。

http://bbs.pinggu.org/thread-563219-1-1.html


3. 《全球投资》 Global Investing

作者:Roger Ibbotson、 Gary Brinson

Bernstein荐言:本书介绍了可投资资产的历史,投资者总是会对市场的历史求知若渴,这本书无疑是该类书籍中最好的选择。你能够从这本书中了解到过去200年中的美国股市、过去500年中的黄金价格、过去800年中的利率和通胀等等,该书对外国资产的投资也有详尽介绍。


4. 《有效的投资之道》 What Has Worked in Investing

作者: Tweedy Browne投资公司

Bernstein荐言:这是一个免费的投资小册子,是我见过的价值投资方法中最善于用数据提供论据支持的内容。

http://bbs.pinggu.org/thread-964326-1-1.html


5. The New Finance, the Case Against Efficient Markets

作者:Robert Haugen

Bernstein荐言:如果上面那本小册子让你有迷惑为何价值投资在多年之后仍然有效,那么你就可以看看这本书。


6. 《价值平均法》 Value Averaging

作者:Michael Edleson

Bernstein荐言:如何在多种多样的资产面前分配你的资金?这本书提供了很有用的指导。


7. 《聪明的投资者》 The Intelligent Investor

作者:Ben Graham

Bernstein荐言:这本书非常出名,比起之前的版本《证券分析》更有可读性也更大众化。对于想要购买个股的投资者尤为适用。许多如今的金融大鳄们都从这两本书中得到了启迪。(如果你想读《证券分析》,推荐1934年原版,最近McGraw-Hill出版社有印发)

http://bbs.pinggu.org/thread-2864998-1-1.html


8. 《魔鬼来袭》 Devil Take the Hindmost

作者:Edward Chancellor

Bernstein荐言:本书讲述了17世纪以来资本市场的泡沫盒泡沫的破裂,可以与Mackay的那本Extraordinary Popular Delusions and the Madness of Crowds相媲美。


9. 《邻家的百万富翁》 The Millionaire Next Door

作者:Thomas Stanley、William Danko

Bernstein荐言:如果你是巴菲特,你就不用愁攒不下钱。这本书也是大众投资者了解金融知识的好地方。

http://bbs.pinggu.org/thread-787856-1-1.html


10. 《资产配置》 Asset Allocation

作者:Roger Gibson

Bernstein荐言:这本书着重强调了个人资产的质量问题,对于投资热爱者和金融顾问尤为适用。


再分享几个金融学书单~~



高盛推荐金融书单+下载

http://bbs.pinggu.org/thread-2468145-1-1.html

http://bbs.pinggu.org/thread-2322467-1-1.html


金融学入门教材推荐+下载

http://bbs.pinggu.org/thread-2917977-1-1.html


金融从业者的必看实务类图书

http://bbs.pinggu.org/thread-1355508-1-1.html


金融从业者的10大必看图书

http://bbs.pinggu.org/thread-1354694-1-1.html


posted @ 2014-12-12 13:56 Eric_jiang 阅读(214) | 评论 (0)编辑 收藏

     摘要: .同源策略如下:URL说明是否允许通信http://www.a.com/a.jshttp://www.a.com/b.js同一域名下允许http://www.a.com/lab/a.jshttp://www.a.com/script/b.js同一域名下不同文件夹允许http://www.a.com:8000/a.jshttp://www.a.com/b.js同一域名,不同端口不允许http://w...  阅读全文
posted @ 2014-12-12 09:36 Eric_jiang 阅读(237) | 评论 (0)编辑 收藏

仅列出标题
共57页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last