Passing volley image to the next activity

风流意气都作罢 提交于 2019-12-11 16:45:48

问题


been stuck on this small problem for while now.It's simple but confuses me.I have my first activty as a listview downloaded json data using volley,on clicking you go to the details activty,like below

i'm able to send the title to the details activty but cannot resolve on the passingthe image too. Here is my first activty:

public class Movies extends ActionBarActivity{
    // Log tag
    private static final String TAG = MainActivity.class.getSimpleName();

    // Movies json url
    private static final String url = "http://api.androidhive.info/json/movies.json";
    private ProgressDialog pDialog;
    private List<Movie> movieList = new ArrayList<Movie>();
    private ListView listView;
    private CustomListAdapter adapter;
    private static String Title="title";
    private static String bitmap="thumbnailUrl";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.event);

     getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    Intent newActivity2=new Intent();
    setResult(RESULT_OK, newActivity2);

    listView = (ListView) findViewById(R.id.list);
    adapter = new CustomListAdapter(this, movieList);
    listView.setAdapter(adapter);

    pDialog = new ProgressDialog(this);
    // Showing progress dialog before making http request
    pDialog.setMessage("Loading...");
    pDialog.show();

    // changing action bar color
    getActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor("#1b1b1b")));

    // Creating volley request obj
    JsonArrayRequest movieReq = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    pDialog.dismiss();

                    // Parsing json
                    for (int i = 0; i < response.length(); i++) {
                        try {

                            JSONObject obj = response.getJSONObject(i);
                            Movie movie = new Movie();
                            movie.setTitle(obj.getString("title"));
                            movie.setThumbnailUrl(obj.getString("image"));
                            movie.setRating(((Number) obj.get("rating"))
                                    .doubleValue());
                            movie.setYear(obj.getInt("releaseYear"));

                            // Genre is json array
                            JSONArray genreArry = obj.getJSONArray("genre");
                            ArrayList<String> genre = new ArrayList<String>();
                            for (int j = 0; j < genreArry.length(); j++) {
                                genre.add((String) genreArry.get(j));
                            }
                            movie.setGenre(genre);

                            // adding movie to movies array
                            movieList.add(movie);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }

                    // notifying list adapter about data changes
                    // so that it renders the list view with updated data
                    adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (error instanceof NoConnectionError){
                    Toast.makeText(getBaseContext(), "Bummer..There's No Internet connection!", Toast.LENGTH_LONG).show();

                }};
            });

    // Adding request to request queue
ParseApplication.getInstance().addToRequestQueue(movieReq);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) { 
            String name = ((TextView) view.findViewById(R.id.title))
                    .getText().toString();

            Intent intent = new Intent(Movies.this, Detail.class);    
            intent.putExtra(Title, name);
            intent.putExtra("images", bitmap);

            startActivity(intent);
        }
        });}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}



    }

Details activity

public class Detail extends ActionBarActivity{
    private static String Title="title";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.detail);
     getSupportActionBar().hide();

    Intent i=getIntent();
    String name = i.getStringExtra(Title);
    TextView lblName = (TextView) findViewById(R.id.name_label);

    lblName.setText(name);}


    public void onClickHandler(View v){
            switch(v.getId()){
            case R.id.imageview1:
            startActivity(new Intent(this,Movies.class));
        }

}}

i'll post more code if needed.I'm a newbie at this stuff so any help will be appreciated.

CustomListAdapter:

public class CustomListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Movie> movieItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();

public CustomListAdapter(Activity activity, List<Movie> movieItems) {
    this.activity = activity;
    this.movieItems = movieItems;
}

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

@Override
public Object getItem(int location) {
    return movieItems.get(location);
}

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

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

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_row, null);

    if (imageLoader == null)
        imageLoader = AppController.getInstance().getImageLoader();
    NetworkImageView thumbNail = (NetworkImageView) convertView
            .findViewById(R.id.thumbnail);
    TextView title = (TextView) convertView.findViewById(R.id.title);
    TextView rating = (TextView) convertView.findViewById(R.id.rating);
    TextView genre = (TextView) convertView.findViewById(R.id.genre);
    TextView year = (TextView) convertView.findViewById(R.id.releaseYear);

    // getting movie data for the row
    Movie m = movieItems.get(position);

    // thumbnail image
    thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

    // title
    title.setText(m.getTitle());

    // rating
    rating.setText("Rating: " + String.valueOf(m.getRating()));

    // genre
    String genreStr = "";
    for (String str : m.getGenre()) {
        genreStr += str + ", ";
    }
    genreStr = genreStr.length() > 0 ? genreStr.substring(0,
            genreStr.length() - 2) : genreStr;
    genre.setText(genreStr);

    // release year
    year.setText(String.valueOf(m.getYear()));

    return convertView;
}

}

回答1:


You need to retrieve the thumbnail url in your details page like this

String bitmap = i.getStringExtra("images"); // Use this in details page

now you can use this bitmap to load the image in you details page.

EDIT

Use this in onItemClick() in Movies class

bitmap = ((Movie)movieList.get(position)).getThumbnailUrl();
Intent intent = new Intent(Movies.this, Detail.class);    
intent.putExtra(Title, name);
intent.putExtra("images", bitmap);

Add this in your Detail activity onCreate()

ImageLoader imageLoader = AppController.getInstance().getImageLoader();
String bitmap = i.getStringExtra("images");
thumbNail.setImageUrl(bitmap, imageLoader);



回答2:


You are not retreiving the bitmap in Details Activity:

Bitmap bitmap = (Bitmap) i.getParcelableExtra("images");

And then do whatever your need with that bitmap




回答3:


I have exactly the same code but I'm using in fragment. Some one tell how to pass a JSON value from fragment to activity. I want Lastest_fragment.java to News_Detail.java (new activity)

Lastest_Fragment.java

public class LatestFragment extends Fragment {

    private static final String TAG = LatestFragment.class.getSimpleName();

    // Movies json url
    private static final String url = "http://api.androidhive.info/json/movies.json";
    private ProgressDialog pDialog;
    private List<Movie> movieList = new ArrayList<Movie>();
    private ListView listView;
    private CustomListAdapter adapter;
    private static String Title="title";
    private static String bitmap="thumbnailUrl";


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        View v = inflater.inflate(R.layout.latest_layout, container, false);

        Intent intent2 = new Intent();
       getActivity().setResult(Activity.RESULT_OK, intent2);
       // getActivity().finish();

        listView = (ListView) v.findViewById(R.id.list);
        adapter = new CustomListAdapter(getActivity(), movieList);
        listView.setAdapter(adapter);

        pDialog = new ProgressDialog(getActivity());
        // Showing progress dialog before making http request
        pDialog.setMessage("Loading...");
        pDialog.show();

        // changing action bar color
       // getActivity().getActionBar().setBackgroundDrawable( new ColorDrawable(Color.parseColor("#1b1b1b")));

        // Creating volley request obj
        JsonArrayRequest movieReq = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());
                        hidePDialog();

                        // Parsing json
                        for (int i = 0; i < response.length(); i++) {
                            try {

                                JSONObject obj = response.getJSONObject(i);
                                Movie movie = new Movie();
                                movie.setTitle(obj.getString("title"));
                                movie.setThumbnailUrl(obj.getString("image"));
                                movie.setRating(((Number) obj.get("rating"))
                                        .doubleValue());
                                movie.setYear(obj.getInt("releaseYear"));

                                // Genre is json array
                                JSONArray genreArry = obj.getJSONArray("genre");
                                ArrayList<String> genre = new ArrayList<String>();
                                for (int j = 0; j < genreArry.length(); j++) {
                                    genre.add((String) genreArry.get(j));
                                }
                                movie.setGenre(genre);

                                // adding movie to movies array
                                movieList.add(movie);

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }

                        // notifying list adapter about data changes
                        // so that it renders the list view with updated data
                        adapter.notifyDataSetChanged();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                if (error instanceof NoConnectionError){
                    Toast.makeText(getActivity().getBaseContext(), "Bummer..There's No Internet connection!", Toast.LENGTH_LONG).show();

                }

            }
        });

        // Adding request to request queue
       AppController.getInstance().addToRequestQueue(movieReq);
        //ParseApplication.getInstance().addToRequestQueue(movieReq);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
                public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
                    // TODO Auto-generated method stub
                    String name = ((TextView) view.findViewById(R.id.title)).getText().toString();
                    bitmap = ((Movie)movieList.get(position)).getThumbnailUrl();
                    Intent intent = new Intent(getActivity(), News_Detail.class);
                    intent.putExtra(Title, name);
                    intent.putExtra("images", bitmap);

                   startActivity(intent);
                }
            });
        return v;

        }


News_detail.java

public class News_Detail extends AppCompatActivity {

    Intent intent = getIntent();
    String name = intent.getStringExtra("name");

    private static String Title="title";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_detail);
        getSupportActionBar().hide();

        Intent i = getIntent();
        ImageLoader imageLoader = AppController.getInstance().getImageLoader();
        String name = i.getStringExtra(Title);
        String bitmap = i.getStringExtra("images");
        NetworkImageView thumbNail = (NetworkImageView) findViewById(R.id.thumbnail);
        thumbNail.setImageUrl(bitmap, imageLoader);
        TextView lblname = (TextView) findViewById(R.id.name_label);

        lblname.setText(name);
    }

    public void onClickHandler(View v){
        switch(v.getId()){
            case R.id.thumbnail:startActivity(new Intent(this,LatestFragment.class));
        }
}
}



回答4:


Now paste that code in the next activity where you want to show text and image

NetworkImageView img = (NetworkImageView) findViewById(R.id.tv_ic_thumbnail);
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
String bitmap = intent.getStringExtra("logo");
img.setImageUrl(bitmap, imageLoader);



回答5:


First of all enter that code in your fragment activity ...

Intent intent = new Intent(view.getContext(), ItemContents.class);

intent.putExtra("Position", position);

ShopsModel item = (ShopsModel) adapter.getItem(position);
intent.putExtra("logo", item.getThumbnailUrl());
startActivity(intent);


来源:https://stackoverflow.com/questions/27822352/passing-volley-image-to-the-next-activity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!