使用MVP@post拼接参数请求数据

本文详细介绍了在MVP(Model-View-Presenter)架构中如何利用@POST注解进行网络请求,重点讲解了如何拼接请求参数,并提供了具体的代码示例,帮助开发者理解并实现数据的获取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


public class Api {
//    http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10
    public static final String UYT="http://api.tianapi.com/";
    public static final String key="71e58b5b2f930eaf1f937407acde08fe";

}

public interface ApiService {
    @POST
    Observable<News> getDatas(@Url String url, @QueryMap Map<String, String> map);


}

public interface Imodel {
    void RequestSuccess(String url,String key,int num,Onselect onselect);

}


public interface Onselect {
    void dataSuccess(List<News.NewslistBean> list);
    void dataError(String s);

}

public class model implements Imodel{
    @Override
    public void RequestSuccess(String url, String key, int num, final Onselect onselect) {

       Map<String, String> map = new HashMap<>();
        map.put("key",key);
        map.put("num",num+"");

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        ApiService apiService = retrofit.create(ApiService.class);

        Observable<News> datas = apiService.getDatas("nba/", map);

        datas.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<News>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(News news) {
                        List<News.NewslistBean> newslist = news.getNewslist();
                        onselect.dataSuccess(newslist);

                    }
                });

    }


}

public class presenter {
    Imodel imodel;
    Iview iview;

    public presenter(Iview iview) {
        this.iview = iview;
        imodel = new model();
    }

    public void getOk(String url, String key, int num) {
        imodel.RequestSuccess(url, key, num, new Onselect() {
            @Override
            public void dataSuccess(List<News.NewslistBean> list) {
                iview.showSuccess(list);
            }

            @Override
            public void dataError(String s) {

            }
        });

    }

}


public interface Iview {
    void showSuccess(List<News.NewslistBean> list);
    void showError(String s);
}


public class BaseApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

public class MyAdpater extends RecyclerView.Adapter {
    List<News.NewslistBean> list;
    Context context;

    public MyAdpater(List<News.NewslistBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);


        return new MyViewHolder(inflate);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        MyViewHolder myViewHolder = (MyViewHolder) holder;
        myViewHolder.textView.setText(list.get(position).getTitle());
        Uri imgUrl = Uri.parse(list.get(position).getPicUrl());
//        SimpleDraweeView urlImg = (SimpleDraweeView) findViewById(R.id.sdv_image_url);
        myViewHolder.simpleDraweeView.setImageURI(imgUrl);

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {


        private final TextView textView;
        private final SimpleDraweeView simpleDraweeView;

        public MyViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.text);
            simpleDraweeView = itemView.findViewById(R.id.sdv_image);

        }
    }
}

public class MainActivity extends AppCompatActivity implements Iview{

    private RecyclerView recyclerView;
    private LinearLayoutManager linearLayoutManager;
    private text.bwei.com.wuzijing1205.presenter.presenter presenter;
    int num=10;
    private MyAdpater myAdpater;
    private SwipeRefreshLayout swipeRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recycler);
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swip);
        presenter = new presenter(this);
        presenter.getOk(Api.UYT,Api.key,num);


    }


    @Override
    public void showSuccess(final List<News.NewslistBean> list) {
        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        myAdpater = new MyAdpater(list, this);
        recyclerView.setAdapter(myAdpater);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                presenter.getOk(Api.UYT,Api.key,num++);
                myAdpater.notifyDataSetChanged();
                swipeRefreshLayout.setRefreshing(false);
            }
        });

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
                if (lastVisibleItemPosition == list.size() - 1) {
                    presenter.getOk(Api.UYT,Api.key,num++);
                    myAdpater.notifyDataSetChanged();
                }


            }
        });





    }

    @Override
    public void showError(String s) {

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值