架构MVP框架+Dagger2实现

1.依赖(见上一篇)

2.代码

      base包下的BaseContract

package com.example.administrator.yizhoumoni.base;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public interface BaseContract {
    //抽取所有presenter的共性,例如绑定、解绑
    interface BasePresenter<T extends BaseView>{
        void attchView(T view);
        void detachView();
    }
    interface BaseView{

    }
}

      base包下的BasePresenter

package com.example.administrator.yizhoumoni.base;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public class BasePresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> {
    protected T mTiew;
    @Override
    public void attchView(T view) {
        this.mTiew=view;
    }

    @Override
    public void detachView() {
        if (mTiew!=null){
            mTiew=null;
        }
    }
}

      base包下的BaseActivity

package com.example.administrator.yizhoumoni.base;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.example.administrator.yizhoumoni.inter.IBase;

import javax.inject.Inject;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public abstract class BaseActivity<T extends BaseContract.BasePresenter> extends AppCompatActivity implements IBase,BaseContract.BaseView {
    @Inject
    protected T mPresenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentLayout());
        inject();
        mPresenter.attchView(this);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        mPresenter.detachView();
    }
}
     component包下的HttpComponent
package com.example.administrator.yizhoumoni.component;

import com.example.administrator.yizhoumoni.MainActivity;
import com.example.administrator.yizhoumoni.module.HttpModule;

import dagger.Component;

/**
 * Created by Administrator on 2018/5/12 0012.
 */
@Component(modules = HttpModule.class)
public interface HttpComponent {
    void inject(MainActivity mainActivity);
}
    inter包下的IBase
package com.example.administrator.yizhoumoni.inter;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public interface IBase {
    int getContentLayout();
    void inject();
}
model包下的HttpModule
package com.example.administrator.yizhoumoni.module;

import com.example.administrator.yizhoumoni.net.API;
import com.example.administrator.yizhoumoni.net.JokesApi;
import com.example.administrator.yizhoumoni.net.JokesApiService;
import com.example.administrator.yizhoumoni.ui.MyInterceptor;

import java.util.concurrent.TimeUnit;

import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by Administrator on 2018/5/12 0012.
 */
@Module
public class HttpModule {
    @Provides
    JokesApi provideJokesApi(){
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .writeTimeout(20, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .connectTimeout(10, TimeUnit.SECONDS)
                .addInterceptor(new MyInterceptor())
                .build();
        Retrofit retrofit = new Retrofit.Builder().baseUrl(API.BASEURL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();
        JokesApiService jokesApiService = retrofit.create(JokesApiService.class);
        return JokesApi.getJokesApi(jokesApiService);
    }
}
   拦截器MyInterceptor
package com.example.administrator.yizhoumoni.ui;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public class MyInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Response response;
        //区分是GET请求还是POST请求
        Request originRequest = chain.request();
        if ("GET".equals(originRequest.method())) {
            HttpUrl httpUrl = originRequest.url()
                    .newBuilder()
                    .addQueryParameter("source", "android")
                    .addQueryParameter("appVersion","101")
                    .build();
            Request request = new Request.Builder().url(httpUrl).build();
            //发送请求
            response = chain.proceed(request);
        } else {
            FormBody.Builder builder = new FormBody.Builder();


            FormBody body = (FormBody) originRequest.body();
            int size = body.size();
            for (int i = 0; i < size; i++) {
                builder.add(body.name(i), body.value(i));
            }
            builder.add("source", "android");
            builder.add("appVersion","101");
            FormBody formBody = builder.build();
            Request request = new Request.Builder()
                    .url(originRequest.url())
                    .post(formBody)
                    .build();
            response = chain.proceed(request);


        }
        return response;
    }
}
MainActivity
package com.example.administrator.yizhoumoni;

import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.Toast;

import com.example.administrator.yizhoumoni.base.BaseActivity;
import com.example.administrator.yizhoumoni.bean.JokesBean;
import com.example.administrator.yizhoumoni.component.DaggerHttpComponent;
import com.example.administrator.yizhoumoni.jokes.JokesContract;
import com.example.administrator.yizhoumoni.jokes.JokesPresenter;
import com.example.administrator.yizhoumoni.module.HttpModule;

public class MainActivity extends BaseActivity<JokesPresenter> implements JokesContract.View {

    private RecyclerView mRv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initView();
        mPresenter.getJokes("2");
    }

    private void initView() {
        mRv = (RecyclerView) findViewById(R.id.rv);
    }

    @Override
    public int getContentLayout() {
        return R.layout.activity_main;
    }

    @Override
    public void inject() {
        DaggerHttpComponent.builder().httpModule(new HttpModule()).build().inject(this);

    }

    @Override
    public void jokesSuccess(JokesBean jokesBean) {
        Log.e("zzzzz",jokesBean.getMsg());
        Toast.makeText(this,jokesBean.getMsg(),Toast.LENGTH_LONG).show();
    }
}

api

API

package com.example.administrator.yizhoumoni.net;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public interface API {
    String BASEURL="https://www.zhaoapi.cn";
}
JokesApi
package com.example.administrator.yizhoumoni.net;

import com.example.administrator.yizhoumoni.bean.JokesBean;

import io.reactivex.Observable;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public class JokesApi {
    private static JokesApi jokesApi;
    private JokesApiService jokesApiService;
    public JokesApi(JokesApiService jokesApiService) {
        this.jokesApiService=jokesApiService;
    }
    public static JokesApi getJokesApi(JokesApiService jokesApiService){
        if (jokesApi==null){
            jokesApi=new JokesApi(jokesApiService);
        }
        return jokesApi;
    }
    public Observable<JokesBean> getJokes(String page){
        return jokesApiService.getJokes(page);
    }
}
JokesApiService
package com.example.administrator.yizhoumoni.net;

import com.example.administrator.yizhoumoni.bean.JokesBean;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * Created by Administrator on 2018/5/12 0012.
 */

public interface JokesApiService {
    @FormUrlEncoded
    @POST("quarter/getJokes ")
    Observable<JokesBean> getJokes(@Field("page") String page);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值