个人项目经历
最近即将开始各种招聘,大三狗也要出去寻找实习了,在这里整理一下之前做过的一下小东西,就按照时间顺序来吧
----------------------------------------------------------------------------------------------------------------
一.新生助手(2013.06)
这个项目实在大一下学期的时候做的第一个android项目
项目简介
实验室内部活动,一个月的时间,两个开发,两个美工设计完成并且实现一个校园导航类应用
项目介绍
第一款自己参与设计并完成开发的应用,在开发中,第一次参与团队配合,第一次了解设计——开发——测试——发布的流程
项目收获
1.app页面切换严重卡顿(当时测试用手机为魅族MX),并且会有崩溃现象
经测试发现,出现该现象原因为app中大量采用图片且图片文件大小偏大,后经过处理,将单张图片大小控制在10K以内,解决此问题
2.在团队合作时候,拼接模块很困难会出现大量bug
提前规定好命名规范,双方同一命名,极大限度的减少对接出现的问题
项目成果
该app没有进入市场进行分发,因为做的实在是太烂了,在校园内进行过一次推广,大概使用量在四五十人左右
二.学生周知(2013.05)
项目简介
面向学院学生进行开发,方便大家查看学院通知的信息类app
项目介绍
在13年5月想到这个想法,但是因为当时水平不够其实拖到了13年10月份才开始着手写,这款应用几乎没有美工配合,使用android4.0以后的默认样式
该app有两个数据来源
1.推送到达的内容在数据库中存取
2.app主动抓取内容,解析后展示并放进数据库
在app中第一次使用推送,最初使用百度推送,后因为教育网的网络环境问题导致推送到达时延比较大,因此推送平台先后迁移三个平台(百度——>个推——>信鸽)
在app中使用jsoup进行html代码解析
使用SQLite进行数据存储,借此整理了sqlite的操作类
使用handler机制进行APP UI界面的更新
该app总共经过3次大规模的迭代更新
1.将推送由百度迁移至个推平台
2.重构app,重做ui界面,在保持原有功能不变的情况下,重做界面,,添加动画效果,但这个版本设计与开发主要由学弟完成
3.将推送迁移至信鸽平台
项目收获
1.在自己开辟的线程中不能对控件进行操作,UI控件必须在主线程中进行操作
2.使用过国内常用的推送平台服务,能够快速接入
3.整理了数据库操作类,可以快速在其他代码中使用
package com.android.db; import java.util.ArrayList; import java.util.List; import com.android.adapter.Messageg; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelpter extends SQLiteOpenHelper { private static String DATABASE_NAME = "sql"; private static String TABLE_NAME = "data_table"; private static String TITLE = "title"; private static String TIME = "time"; private static String URL = "url"; private static String FROM = "fromuser"; @SuppressWarnings("unused") private final static String CHAT_ID = "id";// 主键 public DBHelpter help; public DBHelpter(Context context) { super(context, DATABASE_NAME, null, 1); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String sql = "CREATE TABLE if not exists data_table ( id INTEGER PRIMARY KEY AUTOINCREMENT, fromuser TEXT,time TEXT, title TEXT, url TEXT);"; db.execSQL(sql); System.out.println("data has been created"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } public void Delete() { SQLiteDatabase db = this.getWritableDatabase(); String sql = "DELETE FROM data_table"; db.execSQL(sql); System.out.println("data has been delete"); } public void Insert(Messageg messageg) { SQLiteDatabase db = this.getWritableDatabase(); String sql = "select * from data_table where url ='" + messageg.GetUrl() + "'"; Cursor cursor = db.rawQuery(sql, null); System.out.println(cursor.getCount()); if (cursor.getCount() == 0) { ContentValues value = new ContentValues(); value.put(TITLE, messageg.GetTitle()); value.put(TIME, messageg.GetTime()); value.put(URL, messageg.GetUrl()); value.put(FROM, messageg.GetFrom()); long id = db.insert(TABLE_NAME, null, value); System.out.println("has been insert in db line " + id); } else { System.out.println("has been insert in db "); } } public List<Messageg> findlist() { List<Messageg> messagegs = new ArrayList<Messageg>(); SQLiteDatabase db = this.getReadableDatabase(); String sql = "select * from data_table order by url asc"; Cursor cursor = db.rawQuery(sql, null); System.out.println("cursor num is " + cursor.getCount()); cursor.moveToFirst(); if (cursor.getCount() > 0) { for (int i = 0; i < cursor.getCount(); i++) { Messageg messageg = new Messageg(); messageg.SetTitle(cursor.getString(cursor.getColumnIndex(TITLE))); messageg.SetTime(cursor.getString(cursor.getColumnIndex(TIME))); messageg.SetFrom(cursor.getString(cursor.getColumnIndex(FROM))); messageg.SetUrl(cursor.getString(cursor.getColumnIndex(URL))); messagegs.add(messageg); cursor.moveToNext(); } return messagegs; } else { return null; } } }
4.在开发中学习了异步加载框架AsyncTask,并且同时针对网络连接进行了一定的用户体验优化
5.第一个联网并且投放商店的app,累计下载量在100+
项目结果
第一版本,下载地址:http://www.wandoujia.com/apps/com.android.dutxuesheng(现在因为推送服务器迁移,本版本推送功能关闭)
第二版本下载地址:http://www.wandoujia.com/apps/com.ranapp.hello(第二个版本我不是主要的程序员)
1 package com.yitaoapp; 2 3 import android.content.Context; 4 import android.util.AttributeSet; 5 import android.webkit.WebView; 6 import android.widget.ProgressBar; 7 8 9 public class ProgressWebView extends WebView { 10 11 private ProgressBar progressbar; 12 13 public ProgressWebView(Context context, AttributeSet attrs) { 14 super(context, attrs); 15 progressbar = new ProgressBar(context, null, 16 android.R.attr.progressBarStyleHorizontal); 17 progressbar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 18 3, 0, 0)); 19 addView(progressbar); 20 21 setWebChromeClient(new WebChromeClient()); 22 } 23 24 public class WebChromeClient extends android.webkit.WebChromeClient { 25 @Override 26 public void onProgressChanged(WebView view, int newProgress) { 27 if (newProgress == 100) { 28 progressbar.setVisibility(GONE); 29 } else { 30 if (progressbar.getVisibility() == GONE) 31 progressbar.setVisibility(VISIBLE); 32 progressbar.setProgress(newProgress); 33 } 34 // System.out.println("&&&&&&&" + view.getUrl()); 35 super.onProgressChanged(view, newProgress); 36 } 37 38 } 39 40 @Override 41 protected void onScrollChanged(int l, int t, int oldl, int oldt) { 42 LayoutParams lp = (LayoutParams) progressbar.getLayoutParams(); 43 lp.x = l; 44 lp.y = t; 45 progressbar.setLayoutParams(lp); 46 super.onScrollChanged(l, t, oldl, oldt); 47 } 48 }
该webview参考了农民伯伯一个开源控件的写法
——————————————————————————————————————————————————————————————————
未完待续