做这个APP+WEB项目快2个月的,昨天才发觉有很多知识都没有掌握,每次需要又要重新搜索,十分费时又费力。从今天开始把自己遇到的坑都记录一下吧,给以后做个参考,也希望能给其他和我一样的小白提供点帮助。
1、String和InputStream的互转
[String to InputStream]
String content="abc";
InputStream stream = new ByteArrayInputStream(content.getBytes());
[InputStream to String]
public String inputStream2String (InputStream in) throws IOException {
StringBuffer out = new StringBuffer();
byte[] b = new byte[4096];
for (int n; (n = in.read(b)) != -1;) {
out.append(new String(b, 0, n));
}
return out.toString();
}
2、删除List<>中的某些数据
删除List中某些数据的最好的方法是使用iterator.(自己的代码中掺杂了许多其他的方法,这个是引用了@骄傲的奔波儿灞 大神教程中的代码)
/**
* 去除未发布状态的课件,并删除其在数据库的存储
* @param listLessons
* @return
*/
public static List<LessonModel> removeUnpublishedLessons(KorenpineApplication application, List<LessonModel> listLessons){
if(null == listLessons || listLessons.size() == 0){
return null;
}
LogUtils.e(TAG + "课件--removeUnpublishedLessons剔除开始--size-->" + listLessons.size());
Iterator<LessonModel> it = listLessons.iterator();
LessonModel model = null;
while (it.hasNext()) {
model = it.next();
if (model.getStatus() != 1) {
/*课件未发布,剔除*/
LessonModelDB.newInstance(application).deleteByCourseIdAndLessonId(model.getCourseid(), Integer.parseInt(model.getId()));
LogUtils.d(TAG + "课件--removeUnpublishedLessons剔除-->" + model.getId());
it.remove();
}
}
LogUtils.e(TAG + "课件--removeUnpublishedLessons剔除结束--size-->" + listLessons.size());
return listLessons;
}
3、另外Android进行HTTP访问时session的问题一直困扰了我很久,之前做的时候就先把session无视掉了,实验了众多方法,okhttp我认为是最好的方案,但是无奈当时对方法调用和回调理解太过浅薄,同步和异步的问题没有解决,也就索性放一边。最近突然又脑子一热找到了解决办法,此时的APP功能已经全部完整,开始回头改代码,简直是一段血泪史,要讲所有的老HTTP访问更换成okhttp的访问,跟重做有的一拼了。
4、现在回过头看自己以前的代码,特别有想重写的冲动,耦合度太高、逻辑性又差,改起来十分不方便,特别是一些变量和函数命名不规范,备注又少,导致自己阅读起来都十分困难。以后写代码还是得规范一点,免得给以后埋太多坑。