当前位置: 首页 > 面试题库 >

如何在MovieAdapter的Viewholder中加载图像?

宇文弘懿
2023-03-14
问题内容

主要代号

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.movie);
        lv =(ListView)findViewById(R.id.lstMovieData);
          moviename.clear();


      //  tv = (TextView) findViewById(R.id.tv);


        Bundle b = getIntent().getExtras();
        try {
            Title = b.getString("MOVIE");
            t = replace(Title);

        } catch (Exception e) {

        }

        String API = "https://api.cinemalytics.com/v1/movie/title/?value=" + t + "&auth_token=<token>";
        Toast.makeText(getApplicationContext(), Title, Toast.LENGTH_LONG).show();
        OkHttpClient Client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(API).build();
        Call call = Client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {

            }

            @Override
            public void onResponse(final Response response) throws IOException {
                try {


                    String json = response.body().string();
                    Log.v(TAG, json);
                    if (response.isSuccessful()) {

                        getDATA(json);

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {


                                mAdapter = new MovieAdapter(getApplicationContext(),moviename);
                                lv.setAdapter(mAdapter);
                            }

                        });

                    } else {

                    }
                } catch (Exception e) {

                }


            }
        });



    }



      public String replace(String str) {
        return str.replaceAll(" ", "%20");
    }

    private void getDATA(String json) throws JSONException {
           try {

    moviename = new ArrayList<>();
    Currentmovie c = new Currentmovie();
    String story = "About The Story";

    JSONArray values = new JSONArray(json);
    for(int i = 0; i < values.length(); i++) {
        JSONObject jsonObject = values.getJSONObject(i);

        String movieTitle = jsonObject.getString("Title");
        String disc = jsonObject.getString("Description");
        Log.e(TAG,"GIRISH"+movieTitle);
        c= new Currentmovie();
        c.setTitle("Movie Name::"+movieTitle);
        c.setDesc(story+"::\n"+disc);
        if(jsonObject.getString("Description")==null)
        {

            c.setDesc(story+"::Not Available");
        }
        moviename.add(c);

                 } 
                 }
                 catch (Exception e)
                {
           System.out.println("Error in Result as " + e.toString());
            }

               }

2.MovieAdapter.java

           public class MovieAdapter extends BaseAdapter {

        Context context;
        private List<Currentmovie> movieData;
        private static LayoutInflater inflater = null;


        public MovieAdapter( Context context,List<Currentmovie> movieData)
        {
            this.context = context;
            this.movieData = movieData;
           inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return movieData.size();
        }

        @Override
        public Object getItem(int position) {
            return movieData.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }


        public static class ViewHolder{
            public TextView movieTitle,movieDesc;
            public ImageView movieImage;


        }

        public View getView(int position, View convertView, ViewGroup parent)
        {


            View vi = convertView;
            ViewHolder holder;

            if(convertView==null){
                vi = inflater.inflate(R.layout.row, null);

                holder = new ViewHolder();
                holder.movieTitle = (TextView) vi.findViewById(R.id.tv);
                holder.movieDesc=(TextView)vi.findViewById(R.id.tv1);


             vi.setTag( holder );
            }
            else
                holder=(ViewHolder)vi.getTag();



            holder.movieTitle.setText(movieData.get(position).getTitle());
            holder.movieDesc.setText(movieData.get(position).getDesc());



            return vi;
        }

        }

//我可以成功显示除图片以外的所有数据

//图片链接带有“ posterpath”键

//告诉我如何在MovieAdapter的Viewholder中加载图像

// currentmovie只是一个getter和setter类

3.当前电影

public class Currentmovie {

     private String mTitle;
   private String Description;


    public String getDesc() {
        return Description;
    }

   public void setDesc(String desc) {
       Description = desc;
    }
    public String getTitle() {
        return mTitle;
    }

    public void setTitle(String title) {
        mTitle = title;
    }
}

问题答案:

我正在使用该库并通过以下方式加载图像

首先通过创建显示选项对象

    DisplayImageOptions builder = new DisplayImageOptions.Builder()
                                .cacheOnDisk(true)
                                .showImageOnLoading(R.drawable.empty_photo)        
                                .showImageForEmptyUri(R.drawable.empty_photo)
                                .build();

然后通过以下方式初始化图像加载器

  ImageLoader imageLoader = ImageLoader.getInstance();

并通过加载图像

 imageLoader.displayImage(url, imageView, builder);

希望这会有所帮助..也将此添加到您的gradle

  compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

首先参考这个

编辑: 添加到onCreate()活动

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
        ...
        .build();
    ImageLoader.getInstance().init(config);

或这个

   ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(Activity.this‌​));


 类似资料:
  • 问题内容: 我需要以简单的Java独立应用程序从Web加载图像。有任何想法吗? 问题答案: 这足以启动您吗?不知道您要从那里做什么。

  • 我想通过传递一个网址来加载多个图像。与本教程不同http://www.learn2crack.com/2014/06/android-load-image-from-internet.html其中只有一个图像被下载并使用img.setImageBitmap(图像)查看;我的问题是如何将url发送到一个方法以加载该url的图像,该方法返回一个图像,然后我在图像视图中显示它。

  • 我想做一个reactjs页面懒惰加载图像。因此,我调用lazyLoadImages()内部的组件didMount()。我发现位于浏览器选项卡的浏览器加载指示器仍然一路旋转,直到加载所有图像。这让我认为我所做的并没有提供真正的懒惰加载图像体验。 有趣的是,如果我在setTimeout中用一个不太短的timeout参数包装lazyLoadImages(),例如100ms(不是0或甚至50ms),那么页

  • 问题内容: 我正在使用ListView来显示一些图像和与这些图像相关的标题。我正在从互联网上获取图像。有没有一种方法可以延迟加载图像,以便在显示文本时不阻止UI并在下载图像时显示它们? 图像总数不固定。 问题答案: 这是我创建的用于保存应用程序当前正在显示的图像的内容。请注意,此处使用的“ Log”对象是我在Android内部最终Log类周围的自定义包装。

  • 问题内容: 我有一个panel.java文件,看起来像下面的代码: 我想显示test.gif文件。我该如何完成?因为当我在Eclipse中运行它时,我只会得到其中没有图像的jframe。 问题答案: 用这个

  • 问题内容: 我使用图片插件( image:^ 2.0.4 ),以便可以在图片上写一些内容,然后将其保存为新图片到设备或通过邮件发送。我尝试使用“ new File ” 加载图像,但Flutter出现错误。我询问并搜索,并得到一个提示,我可以使用rootBundle在Flutter中加载图像。我做到了,我得到以下错误。 [错误:topaz / lib / tonic / logging / dart