不说太多,直接上代码,不懂再说,只是一些零碎代码做个记录,各位看官看得懂,我深表荣幸,看不懂我也没法。

import com.huianrong.app.widget.toast.HuiToast;/** * Created by LanYan on 2015/11/17. */public interface OnBaseListener {    /** * Code set theme related properties, such as: remove the title bar, full screen mode. Simple: * //设置无标题 * requestWindowFeature(Window.FEATURE_NO_TITLE); * //设置全屏 * getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, * WindowManager.LayoutParams.FLAG_FULLSCREEN); * 代码设置主题相关属性,比如:去掉标题栏,全屏模式等。 */    void applyTheme();    /** * When the activity call the setContentView (int layout) method, this method is called to return to the layout * 当activity 调用setContentView(int layout) 方法时,调用此方法返回Layout * @return R.layout.xx */    int setContentViewId();    /** * initialization operation */    void initiazed();    /** * 短时间的提示 * Tips for a short period of time * @param content */    void shortToast(String content);    /** * 长时间的提示 * Tips for a long period of time * @param content */    void longToast(String content);}

每个Activity需要涉及到的调用方法,下面是FragmentActivity基类(基于Xutils的注解):

import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.PersistableBundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTabHost;import android.support.v4.app.FragmentTransaction;import android.view.View;import android.widget.Toast;import com.huianrong.app.HuiApplication;import com.huianrong.app.Interfaces.OnBaseListener;import com.huianrong.app.helper.FragmentHelper;import com.huianrong.app.widget.toast.HuiToast;import com.lidroid.xutils.ViewUtils;import java.util.ArrayList;/** * Created by LanYan on 2015/11/17. */public abstract class BaseFragmentActivity extends FragmentActivity implements OnBaseListener {    @Override    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {        super.onCreate(savedInstanceState, persistentState);        applyTheme();        setContentView(setContentViewId());        ViewUtils.inject(this);        HuiApplication.getInstance().addActivity(this);        initiazed();    }    @Override    public void applyTheme() {    }    @Override    public void initiazed() {    }     @Override     public void shortToast(String content) {       /*********ToastHelper略***********/    }    @Override    public void longToast(String content) {       /*********ToastHelper略***********/    }    /** * 显示指定的Fragment * According to the specified fragments * * @param framLayoutId * @param cls * @param <T> */    public <T extends Fragment> void replaceFragment(int framLayoutId, Class<T> cls) {        FragmentHelper.getInstance().replaceFragment(this, framLayoutId, cls);    }    /** * 显示指定的Fragment * According to the specified fragments * * @param framLayoutId * @param cls * @param tag * @param <T> */    public <T extends Fragment> void replaceFragment(int framLayoutId, Class<T> cls, String tag) {        FragmentHelper.getInstance().replaceFragment(this, framLayoutId, cls, null);    }    /** *添加Fragment集合并返回Fragment集合 * Add fragments set and return fragments * @param framLayoutId * @param clsList * @param <T> * @return */    public <T extends Fragment> ArrayList<Fragment> addFragmentList(int framLayoutId, Class<T>[] clsList) {        return FragmentHelper.getInstance().addFragmentList(this,framLayoutId, clsList);    }    /** *添加Fragment集合并返回Fragment集合 * Add fragments set and return fragments * @param framLayoutId * @param clsList * @param tag * @param <T> * @return */    public <T extends Fragment> ArrayList<Fragment> addFragmentList(int framLayoutId, Class<T>[] clsList, String tag) {        return FragmentHelper.getInstance().addFragmentList(this,framLayoutId, clsList, null);    }    /** * 显示指定的Fragment * According to the specified fragments */    public <T extends Fragment> void showFragment(int framLayoutId, int position, ArrayList<Fragment> mFragmentList) {        FragmentHelper.getInstance().showFragment(this, framLayoutId,position,mFragmentList);    }    /** * 创建Handler实例 * Create a Handler instance */    public Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            decodeHandleMessage(msg);        }    };    /** * 处理Handler接收到的消息 * Processing Handler receives the message * * @param msg */    protected void decodeHandleMessage(Message msg) {    }}

BaseActivity同理,这里就不做多解释,Dialog PopupWindow也需要在基类封装,这里不做累赘叙述,下面来看FragmentHelper(还可以扩展动画)类:

import android.app.Activity;import android.content.Context;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.View;import java.util.ArrayList;/** * Created by LanYan on 15/11/18. */public class FragmentHelper {    public static FragmentHelper instance;    public FragmentHelper(){    }    public static FragmentHelper getInstance(){        if(instance==null){            synchronized (FragmentHelper.class){                if(instance==null){                    instance=new FragmentHelper();                }            }        }        return instance;    }    /** * 显示指定的Fragment * According to the specified fragments * * @param framLayoutId * @param cls * @param <T> */    public <T extends Fragment> void replaceFragment(FragmentActivity mFragmentActivity,int framLayoutId, Class<T> cls) {        replaceFragment(mFragmentActivity,framLayoutId, cls, null);    }    /** * 显示指定的Fragment * According to the specified fragments * * @param framLayoutId * @param cls * @param tag * @param <T> */    public <T extends Fragment> void replaceFragment(FragmentActivity mFragmentActivity,int framLayoutId, Class<T> cls, String tag) {        FragmentManager mFragmentManager = mFragmentActivity.getSupportFragmentManager();        FragmentTransaction mTransaction = mFragmentManager.beginTransaction();        T t = null;        try {            t = cls.newInstance();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        }        if (tag == null) {            mTransaction.replace(framLayoutId, t, cls.getName());        } else {            mTransaction.replace(framLayoutId, t, tag);        }        mTransaction.commit();    }    public <T extends Fragment> ArrayList<Fragment> addFragmentList(FragmentActivity mFragmentActivity,int framLayoutId, Class<T>[] clsList) {        return addFragmentList(mFragmentActivity,framLayoutId, clsList, null);    }    public <T extends Fragment> ArrayList<Fragment> addFragmentList(FragmentActivity mFragmentActivity,int framLayoutId, Class<T>[] clsList, String tag) {        ArrayList<Fragment> mFragmentList = new ArrayList<>();        FragmentManager mFragmentManager = mFragmentActivity.getSupportFragmentManager();        FragmentTransaction mTransaction = mFragmentManager.beginTransaction();        for (int i = 0; i < clsList.length; i++) {            T t = null;            try {                t = clsList[i].newInstance();                mTransaction.add(framLayoutId, t, tag == null ? clsList[i].getName() : tag);                mFragmentList.add(t);            } catch (InstantiationException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            }        }        mTransaction.commit();        return mFragmentList;    }    /** * 显示指定的Fragment * According to the specified fragments */    public <T extends Fragment> void showFragment(FragmentActivity mFragmentActivity,int framLayoutId, int position, ArrayList<Fragment> mFragmentList) {        FragmentManager mFragmentManager = mFragmentActivity.getSupportFragmentManager();        FragmentTransaction mTransaction = mFragmentManager.beginTransaction();        for (int i = 0; i < mFragmentList.size(); i++) {            if (i == position) {                mTransaction.show(mFragmentList.get(i));            } else {                mTransaction.hide(mFragmentList.get(i));            }        }        mTransaction.commit();    }}

下面是GsonHelper泛型解析数据:

import java.util.ArrayList;import com.google.gson.Gson;import com.google.gson.JsonArray;import com.google.gson.JsonElement;import com.google.gson.JsonParser;public class GsonHelper {    private static GsonHelper mInstance;    private Gson mGson;    public GsonHelper(){        mGson=new Gson();    }    public static GsonHelper getInstance(){        if(mInstance==null){            synchronized (GsonHelper.class) {                if(mInstance==null){                    mInstance=new GsonHelper();                 }            }        }        return mInstance;    }    public <T> ArrayList<T> fromJsonList(String json, Class<T> cls) {          ArrayList<T> mList = new ArrayList<T>();          JsonArray array = new JsonParser().parse(json).getAsJsonArray();          for(final JsonElement elem : array){              mList.add(mGson.fromJson(elem, cls));          }          return mList;      }    public <T> T fromJsonObject(String json, Class<T> cls){        return mGson.fromJson(json, cls);    }    public <T> String toJson(Object mObject){        return mGson.toJson(mObject);    }}

图片转String 工具类:

import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.graphics.Bitmap.CompressFormat;import android.util.Base64;/** * Created by LanYan on 2015/11/17. */public class UploadImageHelper {    private static UploadImageHelper instance;    public UploadImageHelper() {    }    public static UploadImageHelper getInstance() {        if (instance == null) {            synchronized (UploadImageHelper.class) {                if (instance == null) {                    instance = new UploadImageHelper();                }            }        }        return instance;    }    /** * The picture file is transformed into a String * @param file * @return String */    public String getStringWithFile(File file) {        InputStream in = null;        byte[] data = null;        try {            in = new FileInputStream(file);            data = new byte[in.available()];            in.read(data);            in.close();        } catch (IOException e) {            e.printStackTrace();        }        return Base64.encodeToString(data, 0);    }    /** * The Bitmap is transformed into a String * @param bitmap * @return String */    public String getStringWithBitmap(Bitmap bitmap)      {          ByteArrayOutputStream baos = new ByteArrayOutputStream();          bitmap.compress(CompressFormat.PNG, 100, baos);          byte[] appicon = baos.toByteArray();         return Base64.encodeToString(appicon, Base64.DEFAULT);      }    /** * According to the image path, the image is transformed into a String * @param url * @return String */    public String getStringWithImageUrl(String url)      {          Bitmap mBitmap=BitmapFactory.decodeFile(url);        mBitmap=zipImage(mBitmap, 200, 200);        ByteArrayOutputStream baos = new ByteArrayOutputStream();         mBitmap.compress(CompressFormat.PNG, 100, baos);          byte[] appicon = baos.toByteArray();          return Base64.encodeToString(appicon, Base64.DEFAULT);      }    /** * The compressed image * @param bgimage * @param newWidth * @param newHeight * @return Bitmap */    public Bitmap zipImage(Bitmap bgimage, double newWidth,            double newHeight) {        float width = bgimage.getWidth();        float height = bgimage.getHeight();        Matrix matrix = new Matrix();        float scaleWidth = ((float) newWidth) / width;        float scaleHeight = ((float) newHeight) / height;        matrix.postScale(scaleWidth, scaleHeight);        Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,                (int) height, matrix, true);        return bitmap;    }}

Http请求响应类封装解析:

import java.io.Serializable;import java.util.ArrayList;import com.example.http.RespMessage;/** * Request response bean * Created by LanYan on 2015/11/17. */public class ResponseBean extends RespMessage implements Serializable {    /** * */    private static final long serialVersionUID = -3190468559588437672L;    private boolean hasNext;    public boolean isHasNext() {        return hasNext;    }    public void setHasNext(boolean hasNext) {        this.hasNext = hasNext;    }    public <T> T getResultObject(Class<T> cls) {        return GsonHelper.getInstance().fromJsonObject(getData(), cls);    }    public <T> ArrayList<T> getResultList(Class<T> cls) {        ArrayList<T> mList = GsonHelper.getInstance().fromJsonList(getData(),                cls);        setHasNext(hasNextPage(mList));        return mList;    }    public static long getSerialversionuid() {        return serialVersionUID;    }    public boolean getStatus() {        return "00000000".equals(getRespCode()) ? true : false;    }    public <T> boolean hasNextPage(ArrayList<T> mList) {        if (mList == null || mList.size() < 10) {            return false;        } else {            return true;        }    }}

封装可读性接口:

/** * Created by LanYan on 2015/11/17. */public enum Iinterface {    login(    /** 登录*/    "login",    /** 登录账户、密码 */    new String[]{            /**登录手机号(需要MD5)*/            "userName",            /**登录密码*/            "password"    }),    loading(            /**启动界面Loading初始数据*/            "",            null    );    private Iinterface(String requestUrl,            String[] postKey) {        this.postKey = postKey;        this.requestUrl = requestUrl;    }    private String requestUrl;    private String[] postKey = null;    public static final int ipIndex=23;    public static final String host = "http://192.168.3."+ipIndex+":8080/xxxx/";    public String[] getRequestpostKey() {        return postKey;    }    public String getRequestUrl() {        return host + requestUrl;    }}

SharedPeference简单封装:

import java.util.ArrayList;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import com.huianrong.app.http.GsonHelper;@SuppressLint("CommitPrefEdits")public class SharedPeferenceManager {    private static SharedPeferenceManager instance;    private static Context mContext;    public SharedPeferenceManager() {    }    public static SharedPeferenceManager getInstance(Context context) {        mContext = context;        if (instance == null) {            synchronized (SharedPeferenceManager.class) {                if (instance == null) {                    instance = new SharedPeferenceManager();                }            }        }        return instance;    }    public <T> T readObject(String tableName, String key, Class<T> cls) {        String json = null;        json = getSharedPreference(tableName).getString(key, null);        return json==null?null:GsonHelper.getInstance().fromJsonObject(json, cls);    }    public <T> ArrayList<T> readList(String tableName,String key, Class<T> cls) {        String json = null;        json = getSharedPreference(tableName).getString(key, null);        return GsonHelper.getInstance().fromJsonList(json, cls);    }    public <T> void saveOrUpdateObject(String tableName, String key, T t) {        addObject(tableName, key, t, null);    }    public <T> void saveOrUpdateList(String tableName, String key,            ArrayList<T> mList) {        addList(tableName, key, mList, null);    }    public <T> void addObject(String tableName, String key, T t,            Class<T> cls) {        SharedPreferences mSharedPreferences =getSharedPreference(tableName);        Editor mEditor=getEditor(mSharedPreferences);        if(cls==null){            mEditor.putString(key, GsonHelper.getInstance().toJson(t));        }else {            String requestJson=mSharedPreferences.getString(key, null);            ArrayList<T> mList=new ArrayList<T>();            if(requestJson!=null){                mList=GsonHelper.getInstance().fromJsonList(requestJson, cls);            }            mList.add(t);            mEditor.putString(key, GsonHelper.getInstance().toJson(mList));        }        mEditor.commit();    }    public <T> void addList(String tableName, String key,            ArrayList<T> list, Class<T> cls) {        SharedPreferences mSharedPreferences =getSharedPreference(tableName);        Editor mEditor=getEditor(mSharedPreferences);        if(cls==null){            mEditor.putString(key, GsonHelper.getInstance().toJson(list));        }else {            String requestJson=mSharedPreferences.getString(key, null);            ArrayList<T> mList=new ArrayList<T>();            if(requestJson!=null){                mList=GsonHelper.getInstance().fromJsonList(requestJson, cls);            }            mList.addAll(list);            mEditor.putString(key, GsonHelper.getInstance().toJson(mList));        }        mEditor.commit();    }    public SharedPreferences getSharedPreference(String tableName) {        return mContext.getSharedPreferences(tableName, Activity.MODE_PRIVATE);    }    public Editor getEditor(String tableName) {        return getSharedPreference(tableName).edit();    }    public Editor getEditor(SharedPreferences mSharedPreferences) {        return mSharedPreferences.edit();    }}

下面该是BaseFragment了:

import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.animation.Animation;import com.lidroid.xutils.ViewUtils;/** * Created by LanYan on 2015/11/17. */public abstract class BaseFragment extends Fragment {    View contentView;    protected FragmentActivity activity;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        if(contentView==null){            contentView=inflater.inflate(setContentViewId(),null);            ViewUtils.inject(this,contentView);            initiazed();        }        return contentView;    }    @Override    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {        return super.onCreateAnimation(transit, enter, nextAnim);    }    /** * onCreateView>inflater.inflate(setContentViewId(),null); * @return R.layout.xx */    protected abstract int setContentViewId();    /** * Initiazetion options */    protected void initiazed(){        activity=(BaseFragmentActivity)getActivity();    }}

有了一系列的基类可以帮助我们简化开发,下面是一个小的simple:

import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;import android.view.Window;import android.view.WindowManager;import com.huianrong.app.base.BaseFragmentActivity;import com.huianrong.app.fragment.LoadingFragment;public class SplashActivity extends BaseFragmentActivity {    @Override    public void applyTheme() {        super.applyTheme();        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);    }    /** * When the activity call the setContentView (int layout) method, this method is called to return to the layout * 当activity 调用setContentView(int layout) 方法时,调用此方法返回Layout * * @return R.layout.xx */    @Override    public int setContentViewId() {        return R.layout.activity_splash;    }    @Override    public void initiazed() {        super.initiazed();        replaceFragment(R.id.splash_frameLayout,LoadingFragment.class);    }}

下面是一个基于xutils http模块重新打包封装后的一个post请求实例:

        InterfaceManager manager=InterfaceManager.getInstance();        manager.login(new String[]{"15828845121","12345"}, new HuiRequestCallBack() {            @Override            public void huiSuccess(ResponseBean response) {                UserBean mUserBean=response.getResultObject(UserBean.class);            }            @Override            public void huiFailure(Exception e, String message) {            }        });

零零乱乱的一地思绪,总结出:开发需要Fragment系列:BaseFragmentActivity、BaseFragment、FragmentHelper,Activity系列:BaseActivity、BaseView、BaseDialogFragment、BasePopupWindow、(弹出视图通过BaseView获取View视图传入弹出视图例如BaseDialogFragment等)、BaseBean等待;还需要辅助工具类:CheckInputHelper、CacheHelper等。同时Http网络请求模块需要封装请求,图片注意缓存,那么写好这些东西,考虑清楚项目需求就可以进入开发了,当开发的app程序多了,就会发现很多通用功能,而且每个app的更新会让用户体验不好,我们就应该考虑插件化开发,模块化。我不知道我的技术目前还在什么阶段,但是我知道我还是个菜逼,哎,大腿难求!!

更多相关文章

  1. Android中解析Json方法
  2. Android打造炫酷进度条效果
  3. android开发数据储存的路径示例
  4. Android(安卓)ListView两种长按弹出菜单方式
  5. Android(安卓)setTextColor 不生效
  6. Android调用系统各个功能控件 方法
  7. Android(安卓)实现单选列表
  8. 关于Android的几种事件处理
  9. Android获取手机联系人的方法

随机推荐

  1. android iphone ui 设计 相关网站
  2. android WifiMange获取IP为负
  3. Android 揭露效果兼容低版本
  4. Android 程序打包及签名
  5. Android 默认声音大小修改
  6. Android获取图片Uri/path
  7. Android Studio 3.2.1找不到Android Devi
  8. 使用外部下载工具下载 Android SDK
  9. Android下修改SeekBar样式
  10. 49.Android中各种Span的用法