咱们的三、四岁孩子:Android有些问题。现罗列一下,以后会断断续续补充
- java.net.URLEncoder 当使用 URLEncoder.encode(String param), param中包含一些特殊字符如空格, 百分号等,则会触发如下异常: java.lang.IllegalArgumentException 解决办法: 自己实现encode或先对这些特殊字符做处理 如: public static final String ENCODING_POST[] = {"%25","%22","%20","%21","%23","%24","%26","%27","%28","%29","%2A","%2B","%2C","%2D","%2E","%2F","%3A","%3B","%3C","%3D","%3E","%3F","%40","%5B","%5C"," %5D","%5E","%5F","%60"};
public static final char ENCODING_CHAR[] = {'%','\"',' ','!','#','$','&','\'','(',')','*','+',',','-','.','/',':',';','<','=','>','?','@','[','\\',']','^','_','`'};
- java.net.HttpURLConnection 大部分从j2ee转入Android的开发员都容易直接使用这个类来做所有http操作,如: /* HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
可是他在一些sdk并不工作(现在发现并不是http server不支持Http Head,而是部分sdk并不支持,而且没有等到Timeout,返回的status code并不是200). 最后解决如下: 使用DefaultHttpClient(或HttpClient) + HttpHead . 至此对 java.net.HttpURLConnection不再信任con.setRequestMethod("HEAD"); con.setFollowRedirects(false); con.setConnectTimeout(TIMEOUT_FOR_CONNECTION); con.setReadTimeout(TIMEOUT_FOR_READ); return (con.getResponseCode() == HttpURLConnection.HTTP_OK);*
- Xml Parser,无论是采用DOM或SAX parser,只要碰到文本节点包含特殊字符如&,>,<甚至<![CDATA[等都会报异常或不作后继的解析. 解决办法对确保出现特殊字符的xml自己用字符串方式解析
- android.webkit.WebView
- WebView+ScrollView(即WebView置于ScrollView中),则会碰到WebView中的href更本不响应(clicking):也就是超级链接失效,解决办法,去掉外层的ScrollView
- WebView+TabHost+Select(即WebView是通过Xml配置的,放于ActivityGroup中的一个Activity的Layout中,碰到WebView有html的Select选单(对应Android的Spinner),则会在用户点击选择Item的时候发生异常: android.view.WindowManager$BadTokenException: Unable to add wind //-- token android.app.LocalActivityManager$LocalActivityRecord@44ed8338 is not valid; is your activity running? 解决办法: 代码生成WebView : webview = new WebView(this.getParent() == null ? this : this.getParent());
- WebView的Zoom和他的OnTouchListener,当设置setBuiltInZoomControls(true)后触摸WebView可能在一些ROM上会有Zoom Button, Zoom Button出现后WebView就不在有任何OnTouchListener响应。原本想借用onTouch实现LongPress+ContextMenu,最后没辄,用OptionMenu代替了
- java.lang.OutOfMemoryError: bitmap size exceeds VM budget at android.graphics.Bitmap.nativeCreate(Native Method) at android.graphics.Bitmap.createBitmap(通常发生在ROM/RAM都比较小的手机上). 没有彻底的解决方法,参考:http://stackoverflow.com/search?q=OutOfMemoryError%3A+bitmap+size+exceeds+VM+budget
如果你的孩子也存在上述问题,别忘记了我没提醒你怎么帮助引导改善他。