Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android roboguice 開源框架使用

Android roboguice 開源框架使用

編輯:關於Android編程

Android roboguice 應用

開源的roboguice是一個依賴注入框架,如果你用過Spring 應該知道其好處。
減少程序員的負擔,代碼變的更加簡潔。

 

工具用的是Android Studio 因為Gradle可以自動添加第三方庫。

Gradle部分內容:


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'org.roboguice:roboguice:2.0'
    compile ('com.google.inject.extensions:guice-assistedinject:3.0'){
        exclude group: 'com.google.inject'
    }
}

版本用的是2.0,官方版本最新是3.0

演示基本用法

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.google.inject.Binder;
import com.google.inject.ImplementedBy;
import com.google.inject.Inject;
import com.google.inject.Module;
import roboguice.activity.RoboActivity;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;

//會調用setContentView方法
@ContentView(R.layout.activity_main)
public class MainActivity extends RoboActivity {

    @InjectView(R.id.text1)
    private TextView textView; //代替findViewById 不用自己強轉類型

    @InjectView(R.id.btn1)
    private TextView button;

    @Inject
    private MyCache myCache;//單列

    @Inject
    private IService myService;//接口注入

    @Inject
    private Toaster toaster;//Toast簡單的用法封裝

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText(Test is ok. + myCache);
                toaster.showMsg(hey, I like to talk to you );
                myService.login(1,1);
            }
        });
    }
}

Toaster.java

import android.app.Activity;
import android.widget.Toast;
import com.google.inject.Inject;
import roboguice.inject.ContextSingleton;

/**
 * Created by gaofeng on 15-5-13.
 */
//可以獲取當前Activity中的上下文
@ContextSingleton
public class Toaster {

    @Inject
    private Activity activity;

    //不用傳上下文了
    public void showMsg(String msg) {//不用自己傳入Context,Activity上下文對象
        Toast.makeText(activity,msg, Toast.LENGTH_SHORT).show();

    }
}

MyCache.java

import com.google.inject.Singleton;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by gaofeng on 15-5-13.
 */
//Cache通常是單列的
@Singleton
public class MyCache { //這裡只是演示,沒有寫太復雜

    Map map = new HashMap();

    public void put(K k,V t) {
       map.put(k,t);
    }

    public V get(K k) {
        return map.get(k);
    }
}

下面是接口實例化的代碼,做java ssh web開發一般都是這個樣子

public interface IService { //簡單業務接口
    public void login(String u,String passwd);
}
import roboguice.inject.ContextSingleton;
public class MyService implements  IService {

 @Inject
    private MyCache myCache; //和上一次的對象是同一個,單列對象

    private Context context;

    public MyService() {

    }

    public MyService(Context context) {
        this.context = context;
    }


    @Override
    public void login(String u, String passwd) {
        Log.d(, Service Login>>>> + context +   + myCache); 
        //業務代碼xxxx
    }}

實現上面的接口實列化 需要配置注冊

import android.content.Context;
import android.util.Log;

import com.google.inject.AbstractModule;

/**
 * Created by gaofeng on 15-5-13.
 */
public class CustomModule2 extends AbstractModule {

    private Context context;//系統會自己傳入上下文

    public CustomModule2(Context context) {
        this.context = context;
    }

    @Override
    protected void configure() {
       Log.d(, CustomModule2>>>>>>>);
       bind(IService.class).toInstance(new MyService(context));//注冊
    }
}

還需要配置在 res/values/ 中添加文件roboguice.xml



    
        com.example.gaofeng.roboguice_demo.CustomModule2
    

掌握基本的用法就能減少大量的代碼。
不用自己去new對象,單列也很好弄,不用自己定義static對象


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved