Android XUtilsフレームワーク

14322 ワード

https://github.com/wyouflf/xUtils/
 
xUtilsの概要
  • xUtilsには、多くの実用的なandroidツールが含まれています.
  • xUtilsは大きなファイルアップロードをサポートし、より包括的なhttpリクエストプロトコルサポート(10種類の述語)をサポートし、より柔軟なORMを持ち、より多くのイベント注釈サポートを提供し、混同の影響を受けない...
  • xUItls最小互換android 2.2(api level 8)
  • 現在、xUtilsには主に4つのモジュールがあります.
  • DbUtilsモジュール:
  • androidのormフレームワークは、1行のコードで削除・変更できます.
  • はトランザクションをサポートし、デフォルトで閉じます.
  • は、テーブル名、カラム名、外部キー、一意性制約、NOT NULL制約、CHECK制約などを注釈でカスタマイズできます(混同が必要な場合はテーブル名とカラム名を注釈してください).
  • は外部キーのバインドをサポートし、エンティティを保存すると、外部キー関連エンティティが自動的に保存または更新されます.
  • 外部キー関連エンティティを自動的にロードし、遅延ロードをサポートする.
  • は、チェーン表現クエリー、より直感的なクエリーの意味をサポートし、以下の説明またはsampleの例を参照します.

  • ViewUtilsモジュール:
  • androidのiocフレームワークは、UI、リソース、イベントバインドを完全に注釈することができます.
  • 新しいイベントバインド方式は、混同ツールを使用して混同した後も正常に動作します.
  • は現在、一般的な20種類のイベントバインディングをサポートしており、ViewCommonEventListenerクラスとパッケージcomを参照してください.lidroid.xutils.view.annotation.event.

  • HttpUtilsモジュール:
  • は同期、非同期方式の要求をサポートする.
  • は大きなファイルのアップロードをサポートし、大きなファイルをアップロードするとoomしません.
  • はGET、POST、PUT、MOVE、COPY、DELETE、HEAD、OPTIONS、TRACE、CONNECT要求をサポートする.
  • ダウンロードは301/302リダイレクトをサポートし、Content-Dispositionに基づいてダウンロードしたファイルの名前を変更するかどうかを設定することをサポートする.
  • は、テキストコンテンツの要求(デフォルトではGET要求のみ有効)を返してキャッシュをサポートし、デフォルトの期限切れ時間と現在の要求に対する期限切れ時間を設定します.

  • BitmapUtilsモジュール:
  • bitmapをロードするときは、bitmapロード中に発生するoomやandroidコンテナが急速にスライドするときに発生する画像のずれなどを考慮する必要はありません.
  • は、ネットワークピクチャとローカルピクチャのロードをサポートする.
  • メモリ管理lruアルゴリズムを使用して、bitmapメモリをよりよく管理します.
  • スレッドのロードスレッド数、キャッシュサイズ、キャッシュパス、ロード表示アニメーションなどを設定できます...


  • xUtilsクイック開発フレームワークを使用するには、次の権限が必要です.
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    混同時の注意事項:
  • Androidデフォルト混同構成${sdk.dir}/tools/proguard/proguard-androidを追加します.txt
  • xUtilsの注釈タイプを混同しないで、混同構成を追加します:-keep class*extends java.lang.annotation.Annotation { *; }
  • DbUtilsモジュールを使用して永続化されたエンティティークラスを混同しない、またはすべてのテーブルとカラム名@Table(name=「xxx」),@Id(column=「xxx」),@Column(column=「xxx」),@Foreign(column=「xxx」,@foreign=「xxx」);

  • DbUtilsの使用方法:
    DbUtils db = DbUtils.create(this);
    User user = new User(); //        User     id  ,     @ID     
    user.setEmail("[email protected]");
    user.setName("wyouflf");
    db.save(user); //   saveBindingId          id  
    
    ...
    //   
    Parent entity = db.findById(Parent.class, parent.getId());
    List<Parent> list = db.findAll(Parent.class);//      
    
    Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test"));
    
    // IS NULL
    Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null));
    // IS NOT NULL
    Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","!=", null));
    
    // WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize OFFSET pageOffset
    List<Parent> list = db.findAll(Selector.from(Parent.class)
                                       .where("id" ,"<", 54)
                                       .and(WhereBuilder.b("age", ">", 20).or("age", " < ", 30))
                                       .orderBy("id")
                                       .limit(pageSize)
                                       .offset(pageSize * pageIndex));
    
    // op "in" ,            Iterable    (  List )
    Parent test = db.findFirst(Selector.from(Parent.class).where("id", "in", new int[]{1, 2, 3}));
    // op "between" ,            Iterable    (  List )
    Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String[]{"1", "5"}));
    
    DbModel dbModel = db.findDbModelAll(Selector.from(Parent.class).select("name"));//select("name")   name 
    List<DbModel> dbModels = db.findDbModelAll(Selector.from(Parent.class).groupBy("name").select("name", "count(name)"));
    ...
    
    List<DbModel> dbModels = db.findDbModelAll(sql); //    sql  
    db.execNonQuery(sql) //      sql
    ...

     
    ViewUtilsの使用方法
  • 完全注釈方式は、UIバインディングおよびイベントバインディングを行うことができる.
  • findViewByIdやsetClickListenerなどは不要です.
  • // xUtils view        id,          。
    @ViewInject(R.id.textView)
    TextView textView;
    
    //@ViewInject(vale=R.id.textView, parentId=R.id.parentView)
    //TextView textView;
    
    @ResInject(id = R.string.label, type = ResType.String)
    private String label;
    
    //                  ,  id        
    //       id @OnClick({R.id.id1, R.id.id2, R.id.id3})
    // or @OnClick(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})
    //         ViewCommonEventListener   com.lidroid.xutils.view.annotation.event。
    @OnClick(R.id.test_button)
    public void testButtonClick(View v) { //                
        ...
    }
    ...
    // Activity   :
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ViewUtils.inject(this); //  view   
        ...
        textView.setText("some text...");
        ...
    }
    // Fragment   :
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.bitmap_fragment, container, false); //   fragment  
        ViewUtils.inject(this, view); //  view   
        ...
    }
    // PreferenceFragment   :
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ViewUtils.inject(this, getPreferenceScreen()); //  view   
        ...
    }
    //     
    // inject(View view);
    // inject(Activity activity)
    // inject(PreferenceActivity preferenceActivity)
    // inject(Object handler, View view)
    // inject(Object handler, Activity activity)
    // inject(Object handler, PreferenceGroup preferenceGroup)
    // inject(Object handler, PreferenceActivity preferenceActivity)
     

  • HttpUtilsの使用方法:
    一般getメソッド
    HttpUtils http = new HttpUtils();
    http.send(HttpRequest.HttpMethod.GET,
        "http://www.lidroid.com",
        new RequestCallBack<String>(){
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                testTextView.setText(current + "/" + total);
            }
    
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                textView.setText(responseInfo.result);
            }
    
            @Override
            public void onStart() {
            }
    
            @Override
            public void onFailure(HttpException error, String msg) {
            }
    });
    

    HttpUtilsを使用してファイルをアップロードするか、サーバにデータをコミットする(postメソッド)
    RequestParams params = new RequestParams();
    params.addHeader("name", "value");
    params.addQueryStringParameter("name", "value");
    
    //              BodyParamsEntity,
    //    UrlEncodedFormEntity("application/x-www-form-urlencoded")。
    params.addBodyParameter("name", "value");
    
    //            MultipartEntity("multipart/form-data"),
    //   "multipart/related",xUtils    MultipartEntity    subType "related"。
    //   params.setBodyEntity(httpEntity)        HttpEntity( :
    // MultipartEntity,BodyParamsEntity,FileUploadEntity,InputStreamUploadEntity,StringEntity)。
    //     json  :params.setBodyEntity(new StringEntity(jsonStr,charset));
    params.addBodyParameter("file", new File("path"));
    ...
    
    HttpUtils http = new HttpUtils();
    http.send(HttpRequest.HttpMethod.POST,
        "uploadUrl....",
        params,
        new RequestCallBack<String>() {
    
            @Override
            public void onStart() {
                testTextView.setText("conn...");
            }
    
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                if (isUploading) {
                    testTextView.setText("upload: " + current + "/" + total);
                } else {
                    testTextView.setText("reply: " + current + "/" + total);
                }
            }
    
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                testTextView.setText("reply: " + responseInfo.result);
            }
    
            @Override
            public void onFailure(HttpException error, String msg) {
                testTextView.setText(error.getExceptionCode() + ":" + msg);
            }
    });

     
    HttpUtilsを使用してファイルをダウンロードします.
  • はブレークポイントの継続をサポートし、いつでもダウンロードタスクを停止し、タスク
  • を開始する.
  • HttpUtils http = new HttpUtils();
    HttpHandler handler = http.download("http://apache.dataguru.cn/httpcomponents/httpclient/source/httpcomponents-client-4.2.5-src.zip",
        "/sdcard/httpcomponents-client-4.2.5-src.zip",
        true, //         ,            。      RANGE      。
        true, //                 ,          。
        new RequestCallBack<File>() {
    
            @Override
            public void onStart() {
                testTextView.setText("conn...");
            }
    
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                testTextView.setText(current + "/" + total);
            }
    
            @Override
            public void onSuccess(ResponseInfo<File> responseInfo) {
                testTextView.setText("downloaded:" + responseInfo.result.getPath());
            }
    
    
            @Override
            public void onFailure(HttpException error, String msg) {
                testTextView.setText(msg);
            }
    });
    
    ...
    //  cancel()      
    handler.cancel();
    ...
     

  • BitmapUtilsの使い方
    BitmapUtils bitmapUtils = new BitmapUtils(this);
    
    //       
    bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png");
    
    //       (   /  ,     )
    bitmapUtils.display(testImageView, "/sdcard/test.jpg");
    
    //   assets    (   assets  )
    bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");
    
    //   ListView           PauseOnScrollListener                    
    listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
    listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));

     
    その他(サンプルコードはsampleフォルダのコードを参照)
    出力ログログログLogUtils
    //     TAG,  : className.methodName(L:lineNumber)
    //       LogUtils.allowD = false,LogUtils.allowI = false...,      log。
    //    log  LogUtils.customLogger = new xxxLogger();
    LogUtils.d("wyouflf");