安卓开发Volley实现请求豆瓣接口仿电影列表浏览

安卓开发Volley实现请求豆瓣接口仿电影列表浏览,第1张

安卓开发Volley实现请求豆瓣接口仿电影列表浏览

豆瓣Api接口放在这:https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=100&page_start=0
在博客找了好久,好不容易找到一个可以用的,特别感谢接口作者与搬运者!
实现结果如下,目前还比较简陋,后续会进一步完善UI界面

下面放代码,写的过程有参考B站上代码

//Movie类
public class Movie {

    private String title;
    private String imgUrl;
    private String id;
    private String rate;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getRate() {
        return rate;
    }

    public void setRate(String rate) {
        this.rate = rate;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getImgUrl() {
        return imgUrl;
    }

    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl;
    }

    public Movie(String title, String imgUrl, String id, String rate) {
        this.title = title;
        this.imgUrl = imgUrl;
        this.id = id;
        this.rate = rate;
    }
}

//item_movie.xml



    
    
    
    
        
    



    

    


//用于展示界面的布局activity_movie.xml

//适配器MyRecyclerAdapter类
import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

import java.util.ArrayList;
import java.util.List;

public class MyRecyclerAdapter extends RecyclerView.Adapter {
    private List pdata = new ArrayList();
    private Context context;
    private void loadImage(String url, ImageView img){
      RequestQueue requestQueue = Volley.newRequestQueue(context);
        ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
            private LruCache cache = new LruCache(10*1024*1024);
            @Override
            public Bitmap getBitmap(String url) {
                return cache.get(url);
            }

            @Override
            public void putBitmap(String url, Bitmap bitmap) {
                cache.put(url,bitmap);
            }
        });
        ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(img,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
        imageLoader.get(url,imageListener);
    }

    public MyRecyclerAdapter(List pdata, Context context) {
        this.pdata = pdata;
        this.context = context;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_movie,parent,false);
      MyViewHolder myViewHolder = new MyViewHolder(view);
      return  myViewHolder;

    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        Movie movie = pdata.get(position);
        holder.title.setText(movie.getTitle());
        holder.rate.setText( movie.getRate());
        loadImage(movie.getImgUrl(),holder.img);
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder{
        private  ImageView img;
        private TextView title;
        private TextView rate;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.item_img);
            title = itemView.findViewById(R.id.item_title);
            rate = itemView.findViewById(R.id.item_rate);
        }
    }
}

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class MovieActivity extends AppCompatActivity {
    private RecyclerView recyclerView
    private MyRecyclerAdapter myRecyclerAdapter;
    private RequestQueue requestQueue;
    private List movieList = new ArrayList();
    private void initData(){
        requestQueue = Volley.newRequestQueue(MovieActivity.this);
        String url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=100&page_start=0";
        final JsonObjectRequest jsonObjectRequest =new JsonObjectRequest(url, null, new Response.Listener() {
            @Override
            public void onResponse(JSonObject response) {
                try {
                    JSonArray subjects = response.getJSonArray("subjects");
                    for (int i = 0; i < subjects.length(); i++) {
                        JSonObject subject = subjects.getJSonObject(i);
                        String title = subject.getString("title");
                     //   JSonObject images = subject.getJSonObject("images");
                        String imgUrl = subject.getString("cover");
                        String id = subject.getString("id");
                        String rate = subject.getString("rate");
                        Movie movie = new Movie(title, imgUrl,id,rate);
                        movieList.add(movie);

                    }
                    myRecyclerAdapter.notifyDataSetChanged();
                } catch (JSonException e) {
                    e.printStackTrace();
                    Log.d("Movie1",e.toString());
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("Movie2",error.toString());
            }
        });
        requestQueue.add(jsonObjectRequest);
    }
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.activity_movie);
        
        initData();
    
        recyclerView = findViewById(R.id.list_movie);
       
        recyclerView.setLayoutManager(new LinearLayoutManager(MovieActivity.this,LinearLayoutManager.VERTICAL,false));
      
        myRecyclerAdapter = new MyRecyclerAdapter(movieList,MovieActivity.this);
      
        recyclerView.setItemAnimator(new DefaultItemAnimator());
       
        recyclerView.setAdapter(myRecyclerAdapter);
     
    }

}

大功告成!
记得添加Volley依赖和网络权限!

    implementation 'com.android.volley:volley:1.1.1'

如果有问题欢迎指出,交流与讨论,您的建议是我进步的动力,万分感谢!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5712779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存