Giter Site home page Giter Site logo

oschina / android-app Goto Github PK

View Code? Open in Web Editor NEW
743.0 225.0 593.0 2.37 MB

这是开源**社区的开源 Android 客户端项目,本项目已经迁移到码云 gitee.com 此处不再更新!

Home Page: https://gitee.com/oschina/android-app

License: GNU General Public License v2.0

Java 100.00%

android-app's Introduction

android-app

开源**社区 Android 客户端项目简析

注:本文假设你已经有Android开发环境

启动Eclipse,点击菜单并导入Android客户端项目,请确保你当前的Android SDK是最新版。
如果编译出错,请修改项目根目录下的 project.properties 文件。
推荐使用Android 4.0 以上版本的SDK:

target=android-15

本项目采用 GPL 授权协议,欢迎大家在这个基础上进行改进,并与大家分享。

下面将简单的解析下项目:

一、项目的目录结构

根目录
├ src
├ libs
├ res
├ AndroidManifest.xml
├ LICENSE.txt
├ proguard.cfg
└ project.properties

1、src目录
src目录用于存放项目的包及java源码文件。

下面是src目录的子目录:

src
├ com.weibo.net
├ greendroid.widget
├ net.oschina.app
├ net.oschina.app.adapter
├ net.oschina.app.api
├ net.oschina.app.bean
├ net.oschina.app.common
├ net.oschina.app.ui
└ net.oschina.app.widget

  • com.weibo.net — 新浪微博SDK源码包
  • greendroid.widget — 快捷菜单栏组件(国外UI库GreenDroid)
  • net.oschina.app — APP启动及管理包
  • net.oschina.app.adapter — APP列表适配器包
  • net.oschina.app.api — API访问包
  • net.oschina.app.bean — APP实体包
  • net.oschina.app.common — APP工具包
  • net.oschina.app.ui — APP界面包
  • net.oschina.app.widget — APP控件包

2、libs目录
libs目录用于存放项目引用到的jar包文件。

下面是libs目录里的jar包文件:

libs
└ commons-httpclient-3.1.jar

  • commons-httpclient-3.1.jar — Apache的HttpClient包

3、res目录
res目录用于存放项目的图片、布局、样式等资源文件。

下面是res目录的子目录:

res
├ anim
├ color
├ drawable
├ drawable-hdpi
├ drawable-ldpi
├ drawable-mdpi
├ layout
├ menu
├ raw
├ values
└ xml

  • anim — 动画效果
  • color — 颜色
  • drawable/drawable-hdpi/drawable-ldpi/drawable-mdpi — 图标、图片
  • layout — 界面布局
  • menu — 菜单
  • raw — 通知音
  • values — 语言包和样式
  • xml — 系统设置

4、AndroidManifest.xml
AndroidManifest.xml用于设置应用程序的版本、主题、用户权限及注册Activity等。

二、项目的功能流程

1、APP启动流程

AndroidManifest.xml注册的启动界面为"AppStart",具体文件为net.oschina.app\AppStart.java文件。启动显示欢迎界面之后,通过意图(Intent)跳转到首页(net.oschina.app.ui\Main.java)。
注:除启动界面之外,其他所有界面都放在src\net.oschina.app.ui包中。

2、APP访问API流程

以首页资讯列表显示访问API数据为例:

1) 初始化控件
首页Activity(Main.java)在onCreate()方法里面加载布局文件(Main.xml),对下拉刷新列表控件(PullToRefreshListView)进行了初始化,并设置了数据适配器(ListViewNewsAdapter)。
注:Main.xml布局文件在res\layout目录下;PullToRefreshListView控件在net.oschina.app.widget包;ListViewNewsAdapter适配器在net.oschina.app.adapter包。

2) 异步线程访问
列表控件初始化后,开启一个线程方法(loadLvNewsData()),该方法中调用全局应用程序类(AppContext)来访问API客户端类(ApiClient)。通过ApiClient以http方式请求服务器的API。返回响应的XML数据,再通过实体Bean(NewsList)解析XML,返回实体(NewsList)给UI控件(PullToRefreshListView)展示。
注:AppContext全局应用程序类在net.oschina.app包;ApiClient API客户端类在net.oschina.app.api包。

3) 解析数据显示
服务得到请求,将返回对应的资讯XML数据,再通过资讯实体类(NewsList)解析XML,返回实体(NewsList)给UI控件(PullToRefreshListView)展示。
注:NewsList实体类在net.oschina.app.bean包。

android-app's People

Contributors

jxsmallmouse avatar openproject avatar oschina avatar seabornlee avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-app's Issues

Problem with Samsung Note2 Dualsim (for China)

Hello,
I have bought the original Samsung N7102. I am in Europe now but Google play and other applications dont Run on my phone. It is rooted already but I dont know what to modify...
Can You help?

读取属性文件效率质疑?

在AppContext类中
/**
* 获取登录信息
* @return
*/

public User getLoginInfo() {        
    User lu = new User();       
    lu.setUid(StringUtils.toInt(getProperty("user.uid"), 0));
    lu.setName(getProperty("user.name"));
    lu.setFace(getProperty("user.face"));
    /* ohter code */
    return lu;
}

追踪getProperty()方法的定义,可以找到相关两个方法,如下:

    public String get(String key) {
    Properties props = get();
    return (props != null) ? props.getProperty(key) : null;
}

public Properties get() {
    FileInputStream fis = null;
    Properties props = new Properties();
    try {
        File dirConf = mContext.getDir(APP_CONFIG, Context.MODE_PRIVATE);
        fis = new FileInputStream(dirConf.getPath() + File.separator + APP_CONFIG);
        props.load(fis);
    } 
            /* other code */
    return props;
}

不难发现,每次获取属性集中的某个属性,都要通过打开一次属性文件,读取props,即将所有属性都读出来。换句话说,如果要获取10个属性,这里就要打开10次属性文件,试问这样的IO效率是否他低了,有没有更好的解决办法?

下拉刷新不是很流畅

慢慢的下拉刷新 按住不放 稍微移动移动就会卡住了
还有快速下拉也会卡主
我分析源码 下拉刷新有问题
望版主改正

滑动加载数据bug

缓慢向上划动视图,到达底部后,自动加载“更多”数据,此时会重复加载1-3次.
解决办法:

if(scrollEnd && lvDataState==UIHelper.LISTVIEW_DATA_MORE && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE)
{
lvNews_foot_more.setText(R.string.load_ing);
lvNews_foot_progress.setVisibility(View.VISIBLE);
//当前pageIndex
int pageIndex = lvNewsSumData/AppContext.PAGE_SIZE;
loadLvNewsData(curNewsCatalog, pageIndex, lvNewsHandler, UIHelper.LISTVIEW_ACTION_SCROLL);
}
除加上 && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE
解决了。

ListItem选中状态下背景色不变bug

这个只是用户体验的不良的bug

如何产生:
手指点中一列,该列白色背景色变成浅蓝色后,不要松开手指,向左或向右移动,直到移出触摸屏,会发现,浅蓝色背景依然是浅蓝色,而没有恢复原来的白色背景色。

对比其他:
新浪微薄Android客户端就不会出现这种情况。

个人:
另外,测试发现等待“新闻正文”的时候,有时会有1-2s的延迟,这时候item的背景色依然是浅蓝色的。

ps:我认为手指松开item的背景色应该恢复原来的颜色啊?!对吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.