posts - 93,  comments - 2,  trackbacks - 0
 
java.lang.NullPointerException
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.AbsListView.obtainView(AbsListView.java:2298)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.ListView.onMeasure(ListView.java:1175)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5169)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
11-26 10:05:25.363: E/AndroidRuntime(28212): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2310)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.View.measure(View.java:16515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1958)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1155)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1337)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1042)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5721)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.Choreographer.doFrame(Choreographer.java:544)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.os.Handler.handleCallback(Handler.java:733)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.os.Handler.dispatchMessage(Handler.java:95)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.os.Looper.loop(Looper.java:136)
11-26 10:05:25.363: E/AndroidRuntime(28212): at android.app.ActivityThread.main(ActivityThread.java:5050)
11-26 10:05:25.363: E/AndroidRuntime(28212): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 10:05:25.363: E/AndroidRuntime(28212): at java.lang.reflect.Method.invoke(Method.java:515)
11-26 10:05:25.363: E/AndroidRuntime(28212): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)

原因是:adapter中返回的时候convertView为null.
posted @ 2014-11-26 13:40 Terry Zou 阅读(238) | 评论 (0)编辑 收藏
Exception:
    10-24 17:43:15.112: E/AndroidRuntime(11888): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.ViewGroup.addViewInner(ViewGroup.java:3596)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.ViewGroup.addView(ViewGroup.java:3449)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.support.v4.view.ViewPager.addView(ViewPager.java:1305)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.ViewGroup.addView(ViewGroup.java:3394)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.ViewGroup.addView(ViewGroup.java:3370)
10-24 17:43:15.112: E/AndroidRuntime(11888): at com.zhihe.xqsh.adapter.IndexTopPagerAdapter.instantiateItem(IndexTopPagerAdapter.java:72)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:833)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.support.v4.view.ViewPager.populate(ViewPager.java:1017)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.support.v4.view.ViewPager.populate(ViewPager.java:915)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.support.v4.view.ViewPager$3.run(ViewPager.java:245)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.Choreographer.doFrame(Choreographer.java:543)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.os.Handler.handleCallback(Handler.java:733)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.os.Handler.dispatchMessage(Handler.java:95)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.os.Looper.loop(Looper.java:136)
10-24 17:43:15.112: E/AndroidRuntime(11888): at android.app.ActivityThread.main(ActivityThread.java:5050)
10-24 17:43:15.112: E/AndroidRuntime(11888): at java.lang.reflect.Method.invokeNative(Native Method)
10-24 17:43:15.112: E/AndroidRuntime(11888): at java.lang.reflect.Method.invoke(Method.java:515)
10-24 17:43:15.112: E/AndroidRuntime(11888): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:805)
10-24 17:43:15.112: E/AndroidRuntime(11888): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)
10-24 17:43:15.112: E/AndroidRuntime(11888): at dalvik.system.NativeStart.main(Native Method)
10-24 17:43:15.132: I/Process(11888): Sending signal. PID: 11888 SIG: 9

原因:
    当图片向左滑动的时候,之后执行instantiateItem方法,而不去执行删除方法,所以出现上述异常
    所以在instantiateItem方法中执行删除操作,如下:
    View child = mPageViewList.get(position);
if(child.getParent()!=null){
((ViewPager)container).removeView(child);
}
    注意,在此执行了删除操作之后,把destroyItem方法中的删除去掉,因为,如果不去掉向左滑动的时候,会显示为空,原因如下:打印url是进行加载View,当加载完成之后会去执行destroyItem中的方法,所以,需要把destroyItem中的删除去掉。
10-24 17:49:14.452: W/(16419): ----zhihe---- IndextoppagerAdapter instantiateItem position:0
10-24 17:49:14.452: W/(16419): ----zhihe---- IndextoppagerAdapter instantiateItem image:http://ys.rili.com.cn/images/image/201401/0111174780.jpg
10-24 17:49:14.462: W/(16419): ----zhihe---- IndextoppagerAdapter destroyItem position:0
posted @ 2014-10-24 17:53 Terry Zou 阅读(1325) | 评论 (0)编辑 收藏
http://blog.csdn.net/asmcvc/article/details/9948419

举例子:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dontwarn
-dontskipnonpubliclibraryclassmembers
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-libraryjars libs/afinal-0.2.1-bin.jar
-libraryjars libs/armeabi/libBaiduMapSDK_v3_1_0.so  #地图相关的C++编译的可执行文件(引擎)不要混淆
-libraryjars libs/armeabi/liblocSDK4d.so                         #定位相关的C++编译的可执行文件(引擎)不要混淆
-libraryjars libs/afinal-0.2.1-bin.jar
-libraryjars libs/android-support-v4.jar
-libraryjars libs/android-support-v7-recyclerview.jar
-libraryjars libs/apache_httpClient_full_v43.jar
-libraryjars libs/support-annotations-21.0.0-rc1.jar
-libraryjars libs/locSDK_4.2.jar
-libraryjars libs/baidumapapi_v3_1_0.jar
-keep class com.baidu.** { *; }   
-keep class vi.com.gdi.bgl.android.**{*;}
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.annotation.** { *; }
-keep class org.apache.http43.** { *; }
-keep class android.support.v7.widget.** { *; }
-keep class net.tsz.afinal.** { *; }
-keep class com.alibaba.fastjson.** { *; } 
-keep class android.support.v4.** { *; }
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
posted @ 2014-10-21 11:37 Terry Zou 阅读(229) | 评论 (0)编辑 收藏
例子如下:
  1 File file = new File(filePath);
  2             if(file.exists()){
  3                 String END = "\r\n";
  4                 String PREFIX = "--" ;
  5                 String BOUNDARY =  UUID.randomUUID().toString();  //边界标识   随机生成
  6                 String CONTENT_TYPE = "multipart/form-data";   //内容类型
  7                 
  8                 InputStream inputStream = null;
  9                 FileInputStream fileStream = null;
 10                 DataOutputStream dos = null;
 11                 HttpURLConnection conn = null;
 12                 try {
 13                     URL url = new URL(Constant.URL_SECONDHAN_TAKEPHOTOATHAND);
 14                     conn = (HttpURLConnection) url.openConnection();
 15                     /*设置时间*/
 16                     conn.setReadTimeout(10*1000);
 17                     conn.setConnectTimeout(10*1000);
 18                     
 19                     /*允许Input,output,不使用Cache*/
 20                     conn.setDoInput(true);
 21                     conn.setDoOutput(true);
 22                     conn.setUseCaches(false);
 23                     
 24                     /*设置传送的method=POST*/
 25                     conn.setRequestMethod("POST");
 26                     conn.setRequestProperty("Connection", "Keep-Alive");
 27                     conn.setRequestProperty("Charset", "UTF-8");
 28                     conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); 
 29                     
 30                     /* 设置DataOutputStream */
 31                     dos = new DataOutputStream(conn.getOutputStream());
 32                     
 33                     StringBuffer sb = new StringBuffer();
 34                     sb.append(PREFIX);
 35                     sb.append(BOUNDARY);
 36                     sb.append(END);
 37                     /**
 38                      * 这里重点注意:
 39                      * name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件
 40                      * filename是文件的名字,包含后缀名的   比如:abc.png  
 41                      */
 42                     sb.append("Content-Disposition: form-data; name=\"UpLoadFile\"; filename=\""+file.getName()+"\""+END); 
 43                     sb.append("Content-Type: application/x-zip-compressed; charset=utf-8"+END);
 44                     sb.append(END);
 45                     dos.write(sb.toString().getBytes());
 46                     
 47                     /*取得文件的FileInputStream*/
 48                     fileStream = new FileInputStream(file);
 49                     
 50                     /*设置每次写入1024bytes*/
 51                     int bufferSize = 1024;
 52                     byte[] buffer = new byte[bufferSize];
 53                     int length = -1;
 54                     
 55                     /*从文件读取数据至缓冲区*/
 56                     while((length=fileStream.read(buffer))!=-1){
 57                         dos.write(buffer,0,length);
 58                     }
 59                     dos.write(END.getBytes());
 60                     byte[] end_data = (PREFIX+BOUNDARY+PREFIX+END).getBytes();
 61                     dos.write(end_data);
 62                     dos.flush();
 63                     
 64                     /* 取得Response内容 */
 65                     InputStream is = conn.getInputStream();
 66                     int ch;
 67                     StringBuffer b =new StringBuffer();
 68                     while( ( ch = is.read() ) != -1 ){
 69                         b.append( (char)ch );
 70                     }
 71                     String result = b.toString();
 72                     
 73                 } catch (SocketTimeoutException e) {
 74                     AgUtils.log("", " upload SocketTimeoutException");
 75                     mHandler.sendEmptyMessage(4);
 76                     e.printStackTrace();
 77                 } catch (ConnectTimeoutException e) {
 78                     AgUtils.log("", " download ConnectTimeoutException");
 79                     mHandler.sendEmptyMessage(4);
 80                     e.printStackTrace();
 81                 } catch (UnknownHostException e) {
 82                     AgUtils.log("", " download UnknownHostException");
 83                     mHandler.sendEmptyMessage(4);
 84                     e.printStackTrace();
 85                 } catch (MalformedURLException e) {
 86                     AgUtils.log("", " download MalformedURLException");
 87                     mHandler.sendEmptyMessage(4);
 88                     e.printStackTrace();
 89                 } catch (ProtocolException e) {
 90                     AgUtils.log("", " ProtocolException");
 91                     e.printStackTrace();
 92                     mHandler.sendEmptyMessage(2);
 93                 } catch (IOException e) {
 94                     AgUtils.log("", " IOException");
 95                     mHandler.sendEmptyMessage(0);
 96                     e.printStackTrace();
 97                 } finally {
 98                     XqshService.this.sendBroadcast(new Intent(INTENT_UPLOAD_COMPLETE));
 99                     try {
100                         if (fileStream != null) {
101                             fileStream.close();
102                         }
103                         if (inputStream != null) {
104                             inputStream.close();
105                         }
106                         if (dos != null) {
107                             dos.close();
108                         }
109                         
110                         if (conn != null) {
111                             conn.disconnect();
112                             conn = null;
113                         }
114                     } catch (IOException e) {
115                         e.printStackTrace();
116                     }
117                 }
118             }
posted @ 2014-09-11 08:16 Terry Zou 阅读(177) | 评论 (0)编辑 收藏
1.建立FrameLayout,因为该布局方式只显示下层内容,如:
 1 <FrameLayout
 2     xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="fill_parent">
 5     <LinearLayout
 6         android:layout_width="fill_parent"
 7         android:layout_height="fill_parent"
 8         android:orientation="vertical" 
 9         android:id="@+id/main"
10         android:background="@color/white"
11         >
12         <LinearLayout 
13             android:layout_width="fill_parent"
14             android:layout_height="wrap_content"
15             >
16             <GridView
17                 android:id="@+id/gridview_send"
18                 android:layout_width="fill_parent"
19                 android:layout_height="fill_parent"
20                 android:layout_marginLeft="20dp"
21                 android:layout_marginTop="40dp"
22                 android:listSelector="@color/bule_overlay"
23                 android:numColumns="4" >
24                    </GridView>
25         </LinearLayout>
26         <ImageView 
27             android:layout_width="fill_parent"
28             android:layout_height="wrap_content"
29             android:src="@drawable/service_public_diver"
30             android:layout_marginLeft="20dp"
31             android:layout_marginRight="20dp"
32             android:layout_marginTop="40px"
33             /> 
34          <EditText
35             android:id="@+id/issueContent"
36             android:layout_width="fill_parent"
37             android:layout_height="wrap_content"
38             android:minLines="4"
39             android:gravity="top"
40             android:layout_marginLeft="20dp"
41             android:layout_marginRight="20dp"
42             android:layout_marginTop="30px"
43             android:textColor="#e3e3e3"
44             android:hint="请输入内容"
45             android:background="@null"
46             android:textSize="46px"/>
47          <ImageView 
48             android:layout_width="fill_parent"
49             android:layout_height="wrap_content"
50             android:src="@drawable/service_public_diver"
51             android:layout_marginLeft="20dp"
52             android:layout_marginRight="20dp"
53             android:layout_marginTop="40dp"
54             /> 
55     </LinearLayout>
56     <LinearLayout 
57         android:id="@+id/layerMask"
58         android:layout_width="fill_parent"
59         android:layout_height="fill_parent"
60         android:orientation="vertical" 
61         android:background="@drawable/common_title_back"
62         android:visibility="gone">
63      </LinearLayout>
64 </FrameLayout>

2.在layerMasK中添加view内容
    private LinearLayout layerMask;//遮罩层
  layerMask = (LinearLayout)contentView.findViewById(R.id.layerMask);
    addInnerLayout(R.layout.fragment_takephotoathand_layer,layerMask);
    //设置点击不退出遮罩层
  layerMask.setOnTouchListener(new OnTouchListener(){  
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                return true;  
            }  
        });

    private void addInnerLayout(int layoutResID,LinearLayout view){
LayoutInflater inflater = (LayoutInflater) ((Activity) mContext).getLayoutInflater();
View CurView = inflater.inflate(layoutResID, null);
LinearLayout.LayoutParams lineparam = new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
view.addView(CurView,lineparam);
}
3.控制显示
    layerMask.setVisibility(View.VISIBLE);
posted @ 2014-09-11 08:13 Terry Zou 阅读(1235) | 评论 (0)编辑 收藏
一. intent.setFlags()方法中的参数值含义:

    1.FLAG_ACTIVITY_CLEAR_TOP例如现在的栈情况为:A B C D 。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_TOP标记,则栈情况变为:A B。如果没有添加这个标记,则栈情况将会变成:A B C D B。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_TOP标记,并且目标Activity在栈中已经存在,则将会把位于该目标activity之上的activity从栈中弹出销毁。这跟上面把B的Launch mode设置成singleTask类似。简而言之,跳转到的activity若已在栈中存在,则将其上的activity都销掉。

    2.FLAG_ACTIVITY_NEW_TASK:例如现在栈1的情况是:A B C。C通过intent跳转到D,并且这个intent添加了FLAG_ACTIVITY_NEW_TASK标记,如果D这个Activity在Manifest.xml中的声明中添加了Task affinity,系统首先会查找有没有和D的Task affinity相同的task栈存在,如果有存在,将D压入那个栈,如果不存在则会新建一个D的affinity的栈将其压入。如果D的Task affinity默认没有设置,则会把其压入栈1,变成:A B C D,这样就和不加FLAG_ACTIVITY_NEW_TASK标记效果是一样的了。注意如果试图从非activity的非正常途径启动一个activity(例见下文“intent.setFlags()方法中参数的用例”),比如从一个service中启动一个activity,则intent比如要添加FLAG_ACTIVITY_NEW_TASK标记(编者按:activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈,所以要新起一个栈装入启动的activity)。简而言之,跳转到的activity根据情况,可能压在一个新建的栈中。

    3.FLAG_ACTIVITY_NO_HISTORY:例如现在栈情况为:A B C。C通过intent跳转到D,这个intent添加FLAG_ACTIVITY_NO_HISTORY标志,则此时界面显示D的内容,但是它并不会压入栈中。如果按返回键,返回到C,栈的情况还是:A B C。如果此时D中又跳转到E,栈的情况变为:A B C E,此时按返回键会回到C,因为D根本就没有被压入栈中。简而言之,跳转到的activity不压在栈中。

    4.FLAG_ACTIVITY_SINGLE_TOP:和Activity的Launch mode的singleTop类似。如果某个intent添加了这个标志,并且这个intent的目标activity就是栈顶的activity,那么将不会新建一个实例压入栈中。简而言之,目标activity已在栈顶则跳转过去,不在栈顶则在栈顶新建activity。

二.intent.setFlags()方法中参数的用例:

很多人使用startActivity时候,会碰到如下的异常:
Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
都知道,Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task(编者按:参见一.2.的编者按),遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是:Java代码中加一个flag,即intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。这样就可以在新的task里面启动这个Activity了。

posted @ 2014-05-28 17:43 Terry Zou 阅读(146) | 评论 (0)编辑 收藏
     摘要:     转自:http://musicbox95351.iteye.com/blog/868526    比如项目为一个UserServlet,主要分三步    1 日志输出文件log4j.xml的配置。     2 加载日志配置...  阅读全文
posted @ 2014-05-26 11:13 Terry Zou 阅读(1409) | 评论 (0)编辑 收藏

- 概述NFC标签和四类标签的定义。


    近场通讯技术的关键要素之一,在于NFC装置与被动式NFC标签沟通的能力。NFC技术的这一特征,是许多应用成为可能的关键
NFC标签正在被大量生产、部署在全球若干个领域。部署的标签已逾百万,随着该技术流行,NFC标签将渗入到很多新的领域。
预测到未来将有大量标签得到使用,标签的定义必须清晰,已确保不同制造商的标签与设备达到兼容。



- NFC标签基础


    NFC标签是被动式装置,可用来与主动式NFC装置(主动式NFC读写器)通信。标签可用于应用之内,例如在海报、以及其他储存小量数据并传输到主动式NFC装置的场合。在海报中,起作用的部分可用来做主动设备的接触点。
    NFC标签所含储存的数据可为任何形式,但一般是用来贮存网址(URL)以供NFC装置找到进一步的信息。所需数据量很少,故可使用NFC标签。

    为了定义主动式NFC读写器与被动式标签之间的通信,NFC论坛在2006年6月推出了其第一个标准技术架构和NFC合规装置的标准,包括:NFC数据交换格式(NDEF)、三种记录类型定义(RTD),用于智能海报、文本、互联网资源读取应用。


- NFC标签类型定义


    定义的基本标签类型有四种,以1至4来标识,各有不同的格式与容量。这些标签类型格式的基础是:ISO 14443的A与B类型、Sony FeliCa,前者是非接触式智能卡的国际标准,而后者符合ISO 18092被动式通讯模式标准。

    保持NFC标签尽可能简单的优势是:在很多场合,标签可为一次性使用,例如在海报中寿命较短的场合。


各种标签的定义如下:



  • 第1类标签(Tag 1 Type):此类型基于ISO14443A标准。此类标签具有可读、重新写入的能力,用户可将其配置为只读。存储能力为96字节,用来存网址URL或其他小量数据富富有余。然而,内存可被扩充到2k字节。此类NFC标签的通信速度为106 kbit/s。此类标签简洁,故成本效益较好,适用于许多NFC应用。


  • 第2类标签(Tag 2 Type):此类标签也是基于ISO14443A,具有可读、重新写入的能力,用户可将其配置为只读。其基本内存大小为48字节,但可被扩充到2k字节。通信速度也是106 kbit/s。


  • 第3类标签(Tag 3 Type):此类标签基于Sony FeliCa体系。目前具有2k字节内存容量,数据通讯速度为212 kbit/s。故此类标签较为适合较复杂的应用,尽管成本较高。


  • 第4类标签(Tag 4 Type):此类标签被定义为与ISO14443A、B标准兼容。制造时被预先设定为可读/可重写、或者只读。内存容量可达32k字节,通信速度介于106 kbit/s和424 kbit/s之间。

    从上述不同标签类型的定义可以看出,前两类与后两类在内存容量、构成方面大不相同。故它们的应用不太可能有很多重叠。

    第1与第2类标签是双态的,可为读/写或只读。第3与第4类则是只读,数据在生产时写入或者通过特殊的标签写入器来写入。


-NFC标签运行

    NFC标签是无需电源的被动装置。在使用时,用户以具有NFC功能的设备与其接触。标签从读写器获得很小的电源驱动标签的电路,把小量信息传输到读写器。



标签内存里的数据被传至带有NFC功能的设备。尽管数据量很小,却可能是把设备导向到某个网址(URL)、或是小量文本、其他数据。



-NFC标签设计与制造



标签设计与制造需要考虑很多方面。标签是为了大量、极低成本制造,同时保持性能。在设计标签时,下面是需要考虑的几个关键的性能参数与要素:




  • 读取速度:因为需要在两个NFC装置接近时传输标签所含的所有数据,故速度很重要。如果标签传数据较慢,就有不能完全传输、可靠性差的危险。结果影响到用户,不明白该技术的用户,假如不得不重复多次才能奏效就会对其丧失信心。第一类NFC标签允许所有数据整块(block)传输,保持了标签的读取性能。


  • 晶片尺寸:在标签设计中,晶片尺寸(die size)具有特别的重要性。尺寸较小,则成本较低、标签也不那么显眼(对在海报中使用较为重要)。内存较小自然导致晶片尺寸较小。


  • 单元价格:鉴于NFC标签的目标应用是极低成本的(例如用于智能海报),单位价格是标签设计极其重要的一个因素。在这里,成本至为关键。标签成本受一系列因素影响,包括内存大小和所含附加特征带来的集成电路复杂性。把内存与特征尽可能简化,成本就能压低。
    当NFC体系真正起飞时,标签生产量可能达到数十亿的规模;需要精心设计,以在成本与性能之间取得正确的平衡。
posted @ 2014-05-16 10:33 Terry Zou 阅读(198) | 评论 (0)编辑 收藏
问题:按照NDEF消息格式来解析下列Hex串?

D1 02 1F 53 70 91 01 0E 54 02 
65 6E 68 65 6C 6C 6F 20 77 6F 
72 6C 64 51 01 09 55 01 73 69 
6E 61 2E 63 6F 6D

解答:
    
(1)NDEF记录格式如下,
   
    
    Byte 0: D1
    0xD1 = 11010001B,对应的标志位如下:
    MB(Message Begin) = 1,说明这是首记录
    ME(Message End) = 1,说明这是末记录(说明消息只有一个记录)
    CF(Chunk Flag) = 0,说明记录未被切块
    SR(Short Record) = 1,说明这是短记录,PAYLOAD_LENGTH 占1字节
    IL(ID_LENGTH field is present) = 0,说明没有 ID_LENGTH 和 ID 域
    TNF(Type Name Format) = 1,说明TYPE类型是 NFC Forum well-known type [NFC RTD],
     下表是TNF编码对应表
    
        因为SR=1且IL=0,所以NDEF记录可简化为如下结构
        
    Byte 1: 02
    TYPE_LENGTH = 2,TYPE域长度为2

    Byte 2: 1F
    PAYLOAD_LENGTH = 0x1F,Payload域长度为31

    Byte 3-4: 53 70
    TYPE = "Sp",因为TYPE域长度为2,所以此处TYPE取2个字节

    此后全是PAYLOAD域的内容,因为TYPE="Sp",所以需要使用的Spec是“Smart Poster Record Type Definition”

   (2)智能海报的记录类型其实也是一个NDEF消息。没错,NDEF记录的PAYLOAD域可以存放任何东西,包括嵌套NDEF消息。

    智能海报的内容可以包括标题、URI、动作、图标、大小、类型等记录,其中URI记录是必须有的,其他的可选,次序无所谓。

        1)现在将智能海报的内容贴过来,如下

    91 01 0E 54 02 65 6E 68 65 6C 
    6C 6F 20 77 6F 72 6C 64 51 01 
    09 55 01 73 69 6E 61 2E 63 6F 
    6D

    Byte 0: 91
    0x91 = 10010001B,对应的标志位如下:
    MB = 1,说明这是首记录
    ME = 0,说明后面还有记录
    CF = 0,说明记录未被切块
    SR = 1,说明这是短记录,PAYLOAD_LENGTH 占1字节
    IL = 0,说明没有 ID_LENGTH 和 ID 域
    TNF = 1,说明TYPE类型是 NFC Forum well-known type

    Byte 1: 01
    TYPE_LENGTH = 1,TYPE域长度为1

    Byte 2: 0E
    PAYLOAD_LENGTH = 0x0E,Payload域长度为14

    Byte 3: 54
    TYPE = "T",说明是文本记录类型,适用“Text Record Type Definition”

    Byte 4-17: 02 65 6E 68 65 6C 6C 6F 20 77 6F 72 6C 64 
    这是文本记录的内容

    下面对“02 65 6E 68 65 6C 6C 6F 20 77 6F 72 6C 64”按照文本记录格式解码。

    文本记录格式如下:
    
        
    Byte 0: 02
    Status = 2,由下表可知,IANA语言码长度=2
    
    Byte 1-2: 65 6E
    ISO/IANA语言码 = “en”,编码为US-ASCII码

    Byte 3-13:68 65 6C 6C 6F 20 77 6F 72 6C 64
    按照ASCII码解码可得“hello world”

    至此,对海报内容的第一条NDEF记录解码完成,接下来是对剩余内容解码。

        2)剩余内容为“51 01 09 55 01 73 69 6E 61 2E 63 6F 6D”,同样也是按照NDEF记录来解码。

    Byte 0: 51
    0x91 = 01010001B,对应的标志位如下:
    MB = 0,说明这不是首记录
    ME = 1,说明这是末记录
    CF = 0,说明记录未被切块
    SR = 1,说明这是短记录,PAYLOAD_LENGTH 占1字节
    IL = 0,说明没有 ID_LENGTH 和 ID 域
    TNF = 1,说明TYPE类型是 NFC Forum well-known type

    Byte 1: 01
    TYPE_LENGTH = 1,TYPE域长度为1

    Byte 2: 09
    PAYLOAD_LENGTH = 0x09,Payload域长度为9

    Byte 3: 55
    TYPE = "U",说明是URI记录类型,适用“URI Record Type Definition”

    Byte 4-12: 01 73 69 6E 61 2E 63 6F 6D
    这是URI记录的内容

    URI记录内容格式如下:
        
        
    Byte 0: 01
    ID码 = 1,由下表可知,对应的协议是“http://www.”
     
                    
                
    Byte 1-8: 73 69 6E 61 2E 63 6F 6D
    按照UTF-8格式解码可得:“sina.com”

    至此,整个NDEF消息解码完毕。

    回顾一下吧,整个结构的解码将其如下分解:

    D1 02 1F 53 70                                        <-- 智能海报
    91 01 0E 54 02 65 6E 68 65 6C 6C 6F 20 77 6F 72 6C 64 <-- 文本
    51 01 09 55 01 73 69 6E 61 2E 63 6F 6D                <-- URI

posted @ 2014-05-14 16:17 Terry Zou 阅读(1814) | 评论 (0)编辑 收藏
     摘要: AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控  &n...  阅读全文
posted @ 2014-05-08 17:25 Terry Zou 阅读(169) | 评论 (0)编辑 收藏
仅列出标题
共8页: 上一页 1 2 3 4 5 6 7 8 下一页 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

Java

搜索

  •  

最新随笔

最新评论

阅读排行榜

评论排行榜