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参考了农民伯伯一个开源控件的写法

      

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

    未完待续

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    现在使用控件, 更喜欢继承(覆盖控件已有的函数,很奇怪的一种使用方式)
    Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
    QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)
  • 原文地址:https://www.cnblogs.com/cwr941012/p/4313019.html
Copyright © 2011-2022 走看看