zoukankan      html  css  js  c++  java
  • 个人项目经历

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

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

    一.新生助手(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参考了农民伯伯一个开源控件的写法

      

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

    未完待续

  • 相关阅读:
    awt
    登录校验 简单实现
    事务隔离级别
    事务的四大特性(ACID)
    多线程简单了解
    Eureka bug
    什么是存储过程
    filter和servlet的区别
    说说你对多线程锁机制的理解
    session的生命周期,session何时创建,何时销毁,session销毁的方式
  • 原文地址:https://www.cnblogs.com/cwr941012/p/4313019.html
Copyright © 2011-2022 走看看