Steve Kamau
Steve Kamau

Reputation: 2785

Passing volley image to the next activity

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 enter image description here

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;
}

}

Upvotes: 0

Views: 4207

Answers (5)

Muhammad Shahbaz
Muhammad Shahbaz

Reputation: 1

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);

Upvotes: 0

Muhammad Shahbaz
Muhammad Shahbaz

Reputation: 1

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);

Upvotes: 0

Syed Muzzammil Mian
Syed Muzzammil Mian

Reputation: 11

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));
        }
}
}

Upvotes: 0

Rohit5k2
Rohit5k2

Reputation: 18112

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);

Upvotes: 1

You are not retreiving the bitmap in Details Activity:

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

And then do whatever your need with that bitmap

Upvotes: 1

Related Questions