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);
}