个人项目经历

最近即将开始各种招聘,大三狗也要出去寻找实习了,在这里整理一下之前做过的一下小东西,就按照时间顺序来吧

----------------------------------------------------------------------------------------------------------------

一.新生助手(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(第二个版本我不是主要的程序员)

三、亿淘商城

 
项目说明
大连某公司外包项目,使用hybrid app 实现,电商导购类应用
 
项目介绍
1.首次进行hybrid app 开发,采用webview搭载页面内容,使用本地框架完成导航功能并实现推送功能。
2.在项目中,自己重写了带加载条的webview控件以实现显示进度条的需求
 
 
项目收获
1.初次接触hybrid app开发,初步了解该开发模式的开发流程以及组成部分
2.拓展webview控件,使其实现进度条的需求
3.初次使用个推推送平台
 
webview代码如下
 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 }
View Code

该webview参考了农民伯伯一个开源控件的写法

  

——————————————————————————————————————————————————————————————————

未完待续

原文地址:https://www.cnblogs.com/cwr941012/p/4313019.html