这段时间同时做安卓和Java Web后端,出现和解决一些小问题。记录一下:
1.
java.sql.SQLException: Data truncated for column 'dead_time' at row 1
解决:数据被截断,请检查表字段类型和待添加的数据类型是否一致。我这里dead_time类型使用了int,肯定出问题。
2.
org.json.JSONException: Value [] at tasks of type java.lang.String cannot be converted to JSONArray
jsonObject.put("key", jsonArray)和jsonObject.put("key", jsonArrayString)是不一样的,后者getJsonArray会出现错误,因为后者为字符串。
3.
注意:Gson序列化时默认会自动将为null的项给清除;
Gson.toJson()方法是转为了字符串,注意put时可能要转为JSONObject或JSONArray,否则字符串是不能直接get为JSONObject或JSONArray的。
4.
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.crowd_sourcing.llj.crowdsourceclient/com.crowd_sourcing.llj.crowdsource.activity.CSCommonActivity}; have you declared this activity in your AndroidManifest.xml?
解决:这个不用说,记得在AndroidManifest.xml中声明用到的Activity。
5.
注意:setText为int时特别要注意使用String.valueOf()方法转为字符串,也可以是使用intval+""转为字符串。否则会识别为资源ID,出现异常。
6.
FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatTextView with id 'tv_task_detail'
解决:Android XML文件里面View的onClick属性只能用于有context的组件上,一般就是Activity,不能用在Fragment的页面中,因为Fragment没有自己的context。乖乖改成:view.findViewById(R.id.btn_bid_for_task).setOnClickListener(this);
7.
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.support.v7.widget.RecyclerView.findMinMaxChildLayoutPositions
解决:这个我忘了什么原因造成的了,空指针异常,不用说,肯定是没正常初始化。
8.
注意:Android菜单栏右上角不显示,按物理菜单键会在下方滑出,可能和物理菜单按键有关;
9.
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to get provider droidninja.filepicker.utils.FilePickerProvider: java.lang.ClassNotFoundException: Didn't find class "droidninja.filepicker.utils.FilePickerProvider" on path: DexPathList[dexElements=[zip file "/data/app/com.crowd_sourcing.llj.crowdsourceclient-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.crowd_sourcing.llj.crowdsourceclient-2, /vendor/lib, /system/lib]]
问题:这是开源库在低版本Android系统上的bug,会导致直接闪退。
10.
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to resume activity {com.sendbird.android.sample/com.sendbird.android.sample.groupchannel.GroupChannelActivity}: java.lang.RuntimeException: Failure delivering result
解决:选择文件后返回原页面出现该问题,导致闪退,我这里原因为手机内存较小,原页面被回收。
11.
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'task_id' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3971)
解决:我这里是task_id取了负值,显然有问题;被截断可能和整数补码有关。
结论:在MySQL和JDBC中,主键id取0代表可自动选择id,其它正数代表手动选择,为-1会出现错误。
12.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:189)
解决:URL路径上某些字符不支持,我这里是\,可以修改tomcat的conf目录下文件,具体参考其它文档和博客。
13.
onFailure(int, Header[], String, Throwable) was not overriden, but callback was received
org.json.JSONException: Response cannot be parsed as JSON data
解决:使用AsyncHttpClient回调出现这个问题,因为返回数据不是JSON。
14.