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 閱讀(266) |
評論 (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
原因:
當(dāng)圖片向左滑動的時候,之后執(zhí)行instantiateItem方法,而不去執(zhí)行刪除方法,所以出現(xiàn)上述異常
所以在instantiateItem方法中執(zhí)行刪除操作,如下:
View child = mPageViewList.get(position);
if(child.getParent()!=null){
((ViewPager)container).removeView(child);
}
注意,在此執(zhí)行了刪除操作之后,把destroyItem方法中的刪除去掉,因為,如果不去掉向左滑動的時候,會顯示為空,原因如下:打印url是進(jìn)行加載View,當(dāng)加載完成之后會去執(zhí)行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 閱讀(1349) |
評論 (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 #地圖相關(guān)的C++編譯的可執(zhí)行文件(引擎)不要混淆
-libraryjars libs/armeabi/liblocSDK4d.so #定位相關(guān)的C++編譯的可執(zhí)行文件(引擎)不要混淆
-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 閱讀(267) |
評論 (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(); //邊界標(biāo)識 隨機生成
6 String CONTENT_TYPE = "multipart/form-data"; //內(nèi)容類型
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 /*設(shè)置時間*/
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 /*設(shè)置傳送的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 /* 設(shè)置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里面的值為服務(wù)器端需要key 只有這個key 才可以得到對應(yīng)的文件
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 /*設(shè)置每次寫入1024bytes*/
51 int bufferSize = 1024;
52 byte[] buffer = new byte[bufferSize];
53 int length = -1;
54
55 /*從文件讀取數(shù)據(jù)至緩沖區(qū)*/
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內(nèi)容 */
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 閱讀(185) |
評論 (0) |
編輯 收藏
1.建立FrameLayout,因為該布局方式只顯示下層內(nèi)容,如:
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="請輸入內(nèi)容"
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內(nèi)容
private LinearLayout layerMask;//遮罩層
layerMask = (LinearLayout)contentView.findViewById(R.id.layerMask);
addInnerLayout(R.layout.fragment_takephotoathand_layer,layerMask);
//設(shè)置點擊不退出遮罩層
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 閱讀(1248) |
評論 (0) |
編輯 收藏
一. intent.setFlags()方法中的參數(shù)值含義:
1.FLAG_ACTIVITY_CLEAR_TOP:例如現(xiàn)在的棧情況為:A B C D 。D此時通過intent跳轉(zhuǎn)到B,如果這個intent添加FLAG_ACTIVITY_CLEAR_TOP標(biāo)記,則棧情況變?yōu)椋篈 B。如果沒有添加這個標(biāo)記,則棧情況將會變成:A B C D B。也就是說,如果添加了FLAG_ACTIVITY_CLEAR_TOP標(biāo)記,并且目標(biāo)Activity在棧中已經(jīng)存在,則將會把位于該目標(biāo)activity之上的activity從棧中彈出銷毀。這跟上面把B的Launch mode設(shè)置成singleTask類似。簡而言之,跳轉(zhuǎn)到的activity若已在棧中存在,則將其上的activity都銷掉。
2.FLAG_ACTIVITY_NEW_TASK:例如現(xiàn)在棧1的情況是:A B C。C通過intent跳轉(zhuǎn)到D,并且這個intent添加了FLAG_ACTIVITY_NEW_TASK標(biāo)記,如果D這個Activity在Manifest.xml中的聲明中添加了Task affinity,系統(tǒng)首先會查找有沒有和D的Task affinity相同的task棧存在,如果有存在,將D壓入那個棧,如果不存在則會新建一個D的affinity的棧將其壓入。如果D的Task affinity默認(rèn)沒有設(shè)置,則會把其壓入棧1,變成:A B C D,這樣就和不加FLAG_ACTIVITY_NEW_TASK標(biāo)記效果是一樣的了。注意如果試圖從非activity的非正常途徑啟動一個activity(例見下文“intent.setFlags()方法中參數(shù)的用例”),比如從一個service中啟動一個activity,則intent比如要添加FLAG_ACTIVITY_NEW_TASK標(biāo)記(編者按:activity要存在于activity的棧中,而非activity的途徑啟動activity時必然不存在一個activity的棧,所以要新起一個棧裝入啟動的activity)。簡而言之,跳轉(zhuǎn)到的activity根據(jù)情況,可能壓在一個新建的棧中。
3.FLAG_ACTIVITY_NO_HISTORY:例如現(xiàn)在棧情況為:A B C。C通過intent跳轉(zhuǎn)到D,這個intent添加FLAG_ACTIVITY_NO_HISTORY標(biāo)志,則此時界面顯示D的內(nèi)容,但是它并不會壓入棧中。如果按返回鍵,返回到C,棧的情況還是:A B C。如果此時D中又跳轉(zhuǎn)到E,棧的情況變?yōu)椋篈 B C E,此時按返回鍵會回到C,因為D根本就沒有被壓入棧中。簡而言之,跳轉(zhuǎn)到的activity不壓在棧中。
4.FLAG_ACTIVITY_SINGLE_TOP:和Activity的Launch mode的singleTop類似。如果某個intent添加了這個標(biāo)志,并且這個intent的目標(biāo)activity就是棧頂?shù)腶ctivity,那么將不會新建一個實例壓入棧中。簡而言之,目標(biāo)activity已在棧頂則跳轉(zhuǎn)過去,不在棧頂則在棧頂新建activity。
二.intent.setFlags()方法中參數(shù)的用例:
很多人使用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 閱讀(161) |
評論 (0) |
編輯 收藏
摘要: 轉(zhuǎn)自:http://musicbox95351.iteye.com/blog/868526 比如項目為一個UserServlet,主要分三步 1 日志輸出文件log4j.xml的配置。 2 加載日志配置...
閱讀全文
posted @
2014-05-26 11:13 Terry Zou 閱讀(1429) |
評論 (0) |
編輯 收藏
- 概述NFC標(biāo)簽和四類標(biāo)簽的定義。
近場通訊技術(shù)的關(guān)鍵要素之一,在于NFC裝置與被動式NFC標(biāo)簽溝通的能力。NFC技術(shù)的這一特征,是許多應(yīng)用成為可能的關(guān)鍵
NFC標(biāo)簽正在被大量生產(chǎn)、部署在全球若干個領(lǐng)域。部署的標(biāo)簽已逾百萬,隨著該技術(shù)流行,NFC標(biāo)簽將滲入到很多新的領(lǐng)域。
預(yù)測到未來將有大量標(biāo)簽得到使用,標(biāo)簽的定義必須清晰,已確保不同制造商的標(biāo)簽與設(shè)備達(dá)到兼容。
- NFC標(biāo)簽基礎(chǔ)
NFC標(biāo)簽是被動式裝置,可用來與主動式NFC裝置(主動式NFC讀寫器)通信。標(biāo)簽可用于應(yīng)用之內(nèi),例如在海報、以及其他儲存小量數(shù)據(jù)并傳輸?shù)街鲃邮絅FC裝置的場合。在海報中,起作用的部分可用來做主動設(shè)備的接觸點。
NFC標(biāo)簽所含儲存的數(shù)據(jù)可為任何形式,但一般是用來貯存網(wǎng)址(URL)以供NFC裝置找到進(jìn)一步的信息。所需數(shù)據(jù)量很少,故可使用NFC標(biāo)簽。
為了定義主動式NFC讀寫器與被動式標(biāo)簽之間的通信,NFC論壇在2006年6月推出了其第一個標(biāo)準(zhǔn)技術(shù)架構(gòu)和NFC合規(guī)裝置的標(biāo)準(zhǔn),包括:NFC數(shù)據(jù)交換格式(NDEF)、三種記錄類型定義(RTD),用于智能海報、文本、互聯(lián)網(wǎng)資源讀取應(yīng)用。
- NFC標(biāo)簽類型定義
定義的基本標(biāo)簽類型有四種,以1至4來標(biāo)識,各有不同的格式與容量。這些標(biāo)簽類型格式的基礎(chǔ)是:ISO 14443的A與B類型、Sony FeliCa,前者是非接觸式智能卡的國際標(biāo)準(zhǔn),而后者符合ISO 18092被動式通訊模式標(biāo)準(zhǔn)。
保持NFC標(biāo)簽盡可能簡單的優(yōu)勢是:在很多場合,標(biāo)簽可為一次性使用,例如在海報中壽命較短的場合。
各種標(biāo)簽的定義如下:
第1類標(biāo)簽(Tag 1 Type):此類型基于ISO14443A標(biāo)準(zhǔn)。此類標(biāo)簽具有可讀、重新寫入的能力,用戶可將其配置為只讀。存儲能力為96字節(jié),用來存網(wǎng)址URL或其他小量數(shù)據(jù)富富有余。然而,內(nèi)存可被擴充到2k字節(jié)。此類NFC標(biāo)簽的通信速度為106 kbit/s。此類標(biāo)簽簡潔,故成本效益較好,適用于許多NFC應(yīng)用。
第2類標(biāo)簽(Tag 2 Type):此類標(biāo)簽也是基于ISO14443A,具有可讀、重新寫入的能力,用戶可將其配置為只讀。其基本內(nèi)存大小為48字節(jié),但可被擴充到2k字節(jié)。通信速度也是106 kbit/s。
第3類標(biāo)簽(Tag 3 Type):此類標(biāo)簽基于Sony FeliCa體系。目前具有2k字節(jié)內(nèi)存容量,數(shù)據(jù)通訊速度為212 kbit/s。故此類標(biāo)簽較為適合較復(fù)雜的應(yīng)用,盡管成本較高。
第4類標(biāo)簽(Tag 4 Type):此類標(biāo)簽被定義為與ISO14443A、B標(biāo)準(zhǔn)兼容。制造時被預(yù)先設(shè)定為可讀/可重寫、或者只讀。內(nèi)存容量可達(dá)32k字節(jié),通信速度介于106 kbit/s和424 kbit/s之間。
從上述不同標(biāo)簽類型的定義可以看出,前兩類與后兩類在內(nèi)存容量、構(gòu)成方面大不相同。故它們的應(yīng)用不太可能有很多重疊。
第1與第2類標(biāo)簽是雙態(tài)的,可為讀/寫或只讀。第3與第4類則是只讀,數(shù)據(jù)在生產(chǎn)時寫入或者通過特殊的標(biāo)簽寫入器來寫入。
-NFC標(biāo)簽運行
NFC標(biāo)簽是無需電源的被動裝置。在使用時,用戶以具有NFC功能的設(shè)備與其接觸。標(biāo)簽從讀寫器獲得很小的電源驅(qū)動標(biāo)簽的電路,把小量信息傳輸?shù)阶x寫器。
標(biāo)簽內(nèi)存里的數(shù)據(jù)被傳至帶有NFC功能的設(shè)備。盡管數(shù)據(jù)量很小,卻可能是把設(shè)備導(dǎo)向到某個網(wǎng)址(URL)、或是小量文本、其他數(shù)據(jù)。
-NFC標(biāo)簽設(shè)計與制造
標(biāo)簽設(shè)計與制造需要考慮很多方面。標(biāo)簽是為了大量、極低成本制造,同時保持性能。在設(shè)計標(biāo)簽時,下面是需要考慮的幾個關(guān)鍵的性能參數(shù)與要素:
讀取速度:因為需要在兩個NFC裝置接近時傳輸標(biāo)簽所含的所有數(shù)據(jù),故速度很重要。如果標(biāo)簽傳數(shù)據(jù)較慢,就有不能完全傳輸、可靠性差的危險。結(jié)果影響到用戶,不明白該技術(shù)的用戶,假如不得不重復(fù)多次才能奏效就會對其喪失信心。第一類NFC標(biāo)簽允許所有數(shù)據(jù)整塊(block)傳輸,保持了標(biāo)簽的讀取性能。
晶片尺寸:在標(biāo)簽設(shè)計中,晶片尺寸(die size)具有特別的重要性。尺寸較小,則成本較低、標(biāo)簽也不那么顯眼(對在海報中使用較為重要)。內(nèi)存較小自然導(dǎo)致晶片尺寸較小。
單元價格:鑒于NFC標(biāo)簽的目標(biāo)應(yīng)用是極低成本的(例如用于智能海報),單位價格是標(biāo)簽設(shè)計極其重要的一個因素。在這里,成本至為關(guān)鍵。標(biāo)簽成本受一系列因素影響,包括內(nèi)存大小和所含附加特征帶來的集成電路復(fù)雜性。把內(nèi)存與特征盡可能簡化,成本就能壓低。
當(dāng)NFC體系真正起飛時,標(biāo)簽生產(chǎn)量可能達(dá)到數(shù)十億的規(guī)模;需要精心設(shè)計,以在成本與性能之間取得正確的平衡。
posted @
2014-05-16 10:33 Terry Zou 閱讀(218) |
評論 (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,對應(yīng)的標(biāo)志位如下:
MB(Message Begin) = 1,說明這是首記錄
ME(Message End) = 1,說明這是末記錄(說明消息只有一個記錄)
CF(Chunk Flag) = 0,說明記錄未被切塊
SR(Short Record) = 1,說明這是短記錄,PAYLOAD_LENGTH 占1字節(jié)
IL(ID_LENGTH field is present) = 0,說明沒有 ID_LENGTH 和 ID 域
TNF(Type Name Format) = 1,說明TYPE類型是 NFC Forum well-known type [NFC RTD],
下表是TNF編碼對應(yīng)表
因為SR=1且IL=0,所以NDEF記錄可簡化為如下結(jié)構(gòu)
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個字節(jié)
此后全是PAYLOAD域的內(nèi)容,因為TYPE="Sp",所以需要使用的Spec是“Smart Poster Record Type Definition”
(2)智能海報的記錄類型其實也是一個NDEF消息。沒錯,NDEF記錄的PAYLOAD域可以存放任何東西,包括嵌套NDEF消息。
智能海報的內(nèi)容可以包括標(biāo)題、URI、動作、圖標(biāo)、大小、類型等記錄,其中URI記錄是必須有的,其他的可選,次序無所謂。
1)現(xiàn)在將智能海報的內(nèi)容貼過來,如下
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,對應(yīng)的標(biāo)志位如下:
MB = 1,說明這是首記錄
ME = 0,說明后面還有記錄
CF = 0,說明記錄未被切塊
SR = 1,說明這是短記錄,PAYLOAD_LENGTH 占1字節(jié)
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
這是文本記錄的內(nèi)容
下面對“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”
至此,對海報內(nèi)容的第一條NDEF記錄解碼完成,接下來是對剩余內(nèi)容解碼。
2)剩余內(nèi)容為“51 01 09 55 01 73 69 6E 61 2E 63 6F 6D”,同樣也是按照NDEF記錄來解碼。
Byte 0: 51
0x91 = 01010001B,對應(yīng)的標(biāo)志位如下:
MB = 0,說明這不是首記錄
ME = 1,說明這是末記錄
CF = 0,說明記錄未被切塊
SR = 1,說明這是短記錄,PAYLOAD_LENGTH 占1字節(jié)
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記錄的內(nèi)容
URI記錄內(nèi)容格式如下:
Byte 0: 01
ID碼 = 1,由下表可知,對應(yīng)的協(xié)議是“http://www.”
Byte 1-8: 73 69 6E 61 2E 63 6F 6D
按照UTF-8格式解碼可得:“sina.com”
至此,整個NDEF消息解碼完畢。
回顧一下吧,整個結(jié)構(gòu)的解碼將其如下分解:
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 閱讀(1851) |
評論 (0) |
編輯 收藏
摘要: AsyncTask和Handler對比
1 ) AsyncTask實現(xiàn)的原理,和適用的優(yōu)缺點
AsyncTask,是android提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現(xiàn)異步操作,并提供接口反饋當(dāng)前異步執(zhí)行的程度(可以通過接口實現(xiàn)UI進(jìn)度更新),最后反饋執(zhí)行的結(jié)果給UI主線程.
使用的優(yōu)點:
l 簡單,快捷
l 過程可控
&n...
閱讀全文
posted @
2014-05-08 17:25 Terry Zou 閱讀(181) |
評論 (0) |
編輯 收藏