第一点先创建6个包分别是Entity,view,basemodel,baseviewmodel,adapter,utils和一个fragment
接着里面创建项目
utils里面的:
有一个api接口和一个Retrofitutils类
api接口:
package com.bw.day1.Http; import com.bw.day1.Entity.FoodEntity; import io.reactivex.Observable; import retrofit2.http.GET; import retrofit2.http.Query; public interface Api { @GET("/foods/getFoods") Observable<FoodEntity> getFoodData(@Query("currentPage")int currentPage,@Query("pageSize")int pageSize); }
Retrofitutils:
package com.bw.day1.Http; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitManager { //私有化构造 private RetrofitManager() { } //声明变量 private static RetrofitManager retrofitManager; //对外提供接口 public static RetrofitManager getRetrofitManager() { if (retrofitManager == null) { retrofitManager = new RetrofitManager(); } return retrofitManager; } Retrofit retrofit; public Retrofit getRetrofit() { if (retrofit == null) { retrofit = createRetrofit(); } return retrofit; } private Retrofit createRetrofit() { OkHttpClient okHttpClient = new OkHttpClient.Builder() .writeTimeout(5, TimeUnit.MINUTES) .connectTimeout(5,TimeUnit.MINUTES) .readTimeout(5,TimeUnit.MINUTES) //日志拦截器 .addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) .build(); retrofit = new Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl("http://10.161.9.80:7012") .client(okHttpClient) .build(); return retrofit; } }
接着就是basemodel里面的:
package com.bw.day1.Model; import com.bw.day1.Entity.FoodEntity; import com.bw.day1.Http.Api; import com.bw.day1.Http.RetrofitManager; import io.reactivex.Observable; import retrofit2.http.Query; public class FoodModel { Api mapi; public FoodModel() { mapi = RetrofitManager.getRetrofitManager().getRetrofit().create(Api.class); } public Observable<FoodEntity> getFoodData(int currentPage,int pageSize){ return mapi.getFoodData(currentPage, pageSize); } } 然后就是Entity:
里面就是一个接口类
接下来就是view创建一个新的Activity:
package com.bw.day1.View; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import android.os.Bundle; import com.bw.day1.Adapter.MyFoodAdapter; import com.bw.day1.Entity.FoodEntity; import com.bw.day1.R; import com.bw.day1.ViewModel.FoodViewModel; import com.bw.day1.databinding.ActivityFoodBinding; import java.util.ArrayList; import java.util.List; public class FoodActivity extends AppCompatActivity { ActivityFoodBinding activityFoodBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_food); activityFoodBinding = DataBindingUtil.setContentView(this,R.layout.activity_food); FoodViewModel foodViewModel = new ViewModelProvider(this).get(FoodViewModel.class); //启动mvvm foodViewModel.getFood(1,10); foodViewModel.foodLiveData.observe(this, new Observer<FoodEntity>() { @Override public void onChanged(FoodEntity foodEntity) { if (foodEntity.getCode()==200){ //准备好数据源 List<FoodEntity.DataDTO> dateDTOLive = foodEntity.getData(); //定义适配器 MyFoodAdapter myFoodAdapter = new MyFoodAdapter(R.layout.item_food); myFoodAdapter.getData().addAll(dateDTOLive); myFoodAdapter.notifyDataSetChanged(); //设置适配器 activityFoodBinding.rvFood.setAdapter(myFoodAdapter); //定义布局适配器 activityFoodBinding.rvFood.setLayoutManager(new LinearLayoutManager(FoodActivity.this)); } } }); } }
后面就是baseviewmodel:
package com.bw.day1.ViewModel; import android.util.Log; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.bw.day1.Entity.FoodEntity; import com.bw.day1.Model.FoodModel; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; public class FoodViewModel extends ViewModel { public FoodModel foodModel; public MutableLiveData<FoodEntity> foodLiveData = new MutableLiveData<>(); public FoodViewModel() { foodModel = new FoodModel(); } public void getFood(int currentPage, int pageSize) { foodModel.getFoodData(currentPage, pageSize) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<FoodEntity>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(FoodEntity foodEntity) { // Log.i("--------","onNext :"+foodEntity.getData().size()); foodLiveData.postValue(foodEntity); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }