在 Android 中使用 JSON 解析在图像视图中设置图像

Set Image In an Image View Using JSON Parsing in Android

我在列表视图中解析了所有文本视图和图像,但是当我尝试单击单个列表视图时,它确实显示文本视图但不显示图像视图 bdw 我不知道如何获取它。

MainActivity.java`

public class MainActivity extends Activity {

static ArrayList<Actors> actorsList;

ActorAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    actorsList = new ArrayList<Actors>();
    //final ArrayList<Actors> movieList = new ArrayList<Actors>();
    new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");

    ListView listview = (ListView)findViewById(R.id.list);
    adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);

    listview.setAdapter(adapter);

    listview.setOnItemClickListener(new OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), actorsList.get(position).getName(), Toast.LENGTH_LONG).show();  

            Actors m = actorsList.get(position);


            Intent i = new Intent(MainActivity.this, SingleView.class);
            i.putExtra("position", String.valueOf(position));
            i.putExtra("thumb", m.getImage());
            i.putExtra("name", m.getName());
            i.putExtra("dob", m.getDob());
            i.putExtra("height", m.getHeight());
            i.putExtra("country", m.getCountry());
    //      View imageView = null;
            //imageView.buildDrawingCache();

        //  Bitmap image= imageView.getDrawingCache();

            // Bundle extras = new Bundle();
        //  extras.putParcelable("imagebitmap", image);
        //  i.putExtras(extras);

            startActivity(i);
        }
    });
}


class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(MainActivity.this);
        dialog.setMessage("Loading, please wait");
        dialog.setTitle("Connecting server");
        dialog.show();
        dialog.setCancelable(false);
    }

    @Override
    protected Boolean doInBackground(String... urls) {
        try {

            //------------------>>
            HttpGet httppost = new HttpGet(urls[0]);
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = httpclient.execute(httppost);

            // StatusLine stat = response.getStatusLine();
            int status = response.getStatusLine().getStatusCode();

            if (status == 200) {
                HttpEntity entity = response.getEntity();
                String data = EntityUtils.toString(entity);


                JSONObject jsono = new JSONObject(data);
                JSONArray jarray = jsono.getJSONArray("actors");

                for (int i = 0; i < jarray.length(); i++) {
                    JSONObject object = jarray.getJSONObject(i);

                    Actors actor = new Actors();

                    actor.setName(object.getString("name"));
                    actor.setDescription(object.getString("description"));
                    actor.setDob(object.getString("dob"));
                    actor.setCountry(object.getString("country"));
                    actor.setHeight(object.getString("height"));
                    actor.setSpouse(object.getString("spouse"));
                    actor.setChildren(object.getString("children"));
                    actor.setImage(object.getString("image"));

                    actorsList.add(actor);
                }
                return true;
            }

            //------------------>>

        } catch (ParseException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return false;
    }

    protected void onPostExecute(Boolean result) {
        dialog.cancel();
        adapter.notifyDataSetChanged();
        if(result == false)
            Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();

    }
}

ActorAdapter.java

public class ActorAdapter extends ArrayAdapter<Actors> {
ArrayList<Actors> actorList;
LayoutInflater vi;
int Resource;
ViewHolder holder;
private static ActorAdapter mInstance;

public void onCreate() {
    mInstance = this;
}


public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) {
    super(context, resource, objects);
    vi = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Resource = resource;
    actorList = objects;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // convert view = design
    View v = convertView;
    if (v == null) {
        holder = new ViewHolder();
        v = vi.inflate(Resource, null);
        holder.imageview = (ImageView) v.findViewById(R.id.ivImage);
        holder.tvName = (TextView) v.findViewById(R.id.tvName);
        holder.tvDescription = (TextView) v.findViewById(R.id.tvDescriptionn);
        holder.tvDOB = (TextView) v.findViewById(R.id.tvDateOfBirth);
        holder.tvCountry = (TextView) v.findViewById(R.id.tvCountry);
        holder.tvHeight = (TextView) v.findViewById(R.id.tvHeight);
        holder.tvSpouse = (TextView) v.findViewById(R.id.tvSpouse);
        holder.tvChildren = (TextView) v.findViewById(R.id.tvChildren);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }
    holder.imageview.setImageResource(R.drawable.ic_launcher);
    new DownloadImageTask(holder.imageview).execute(actorList.get(position).getImage());
    holder.tvName.setText(actorList.get(position).getName());
    holder.tvDescription.setText(actorList.get(position).getDescription());
    holder.tvDOB.setText("B'day: " + actorList.get(position).getDob());
    holder.tvCountry.setText(actorList.get(position).getCountry());
    holder.tvHeight.setText("Height: " + actorList.get(position).getHeight());
    holder.tvSpouse.setText("Spouse: " + actorList.get(position).getSpouse());
    holder.tvChildren.setText("Children: " + actorList.get(position).getChildren());
    return v;

}

static class ViewHolder {
    public ImageView imageview;
    public TextView tvName;
    public TextView tvDescription;
    public TextView tvDOB;
    public TextView tvCountry;
    public TextView tvHeight;
    public TextView tvSpouse;
    public TextView tvChildren;

}

 class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }


}

public static ActorAdapter getInstance() {
    // TODO Auto-generated method stub
    return mInstance;
}

SingleView.Java

public class SingleView extends Activity{
TextView name,dob,height,country;
Button back,prev,nxt;
ImageView img ;

//imageLoader = ActorAdapter.getInstance().getImage();

private ArrayList<Actors> movieList_detail = new ArrayList<Actors>();

int selected = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.singleview);    

    Intent i = getIntent();

    final String image1 = i.getStringExtra("thumb");
    String name1 = i.getStringExtra("name");
    String dob1 = i.getStringExtra("dob");
    String height1 = i.getStringExtra("height");
    String country1 = i.getStringExtra("country");

    img = (ImageView)findViewById(R.id.ivImage);
    name = (TextView)findViewById(R.id.tvName);
    dob = (TextView)findViewById(R.id.tvDateOfBirth);
    height = (TextView)findViewById(R.id.tvHeight);
    country = (TextView)findViewById(R.id.tvCountry);
    back = (Button)findViewById(R.id.button1);
    prev = (Button)findViewById(R.id.button2);
    nxt = (Button)findViewById(R.id.button3);

    movieList_detail = MainActivity.actorsList;


    name.setText(name1);
    dob.setText(dob1);
    height.setText(height1);
    country.setText(country1);



    back.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
        }
    });

    prev.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if(selected>0){

                selected--;

                Actors m = movieList_detail.get(selected);
                //String image  = m.getThumbnailUrl();
                name.setText(m.getName());
                dob.setText(m.getDob());
                height.setText(m.getHeight());
                country.setText(m.getCountry());
            //  img.DisplayImage(m.getImage(), image1);


                nxt.setVisibility(View.VISIBLE);
            }else
            {
                prev.setVisibility(View.GONE);
            }
        }
    });

        nxt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
            // TODO Auto-generated method stub

                if(selected<5){

                    selected++;

                    Actors m = movieList_detail.get(selected);
                    //String image  = m.getThumbnailUrl();
                    name.setText(m.getName());
                    dob.setText(m.getDob());
                    height.setText(m.getHeight());
                    country.setText(m.getCountry());
                //  imageLoader.DisplayImage(m.getImage(), img);

            prev.setVisibility(View.VISIBLE);
            }else
            {
                nxt.setVisibility(View.GONE);
            }
        }
    });


}

}

Actors.java

public class Actors {
private String name;
private String description;
private String dob;
private String country;
private String height;
private String spouse;
private String children;
private String image;

public Actors() {
    // TODO Auto-generated constructor stub
}

public Actors(String name, String description, String dob, String country,
        String height, String spouse, String children, String image) {
    super();
    this.name = name;
    this.description = description;
    this.dob = dob;
    this.country = country;
    this.height = height;
    this.spouse = spouse;
    this.children = children;
    this.image = image;
}


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getDob() {
    return dob;
}

public void setDob(String dob) {
    this.dob = dob;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

public String getHeight() {
    return height;
}

public void setHeight(String height) {
    this.height = height;
}

public String getSpouse() {
    return spouse;
}

public void setSpouse(String spouse) {
    this.spouse = spouse;
}

public String getChildren() {
    return children;
}

public void setChildren(String children) {
    this.children = children;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}

}

我假设图像在 SingleView 中不可见 Activity。

img = (ImageView)findViewById(R.id.ivImage);

接下来您要为

设置值
    name.setText(name1);
dob.setText(dob1);
height.setText(height1);
country.setText(country1);

您错过了在 img 中加载 imgae。 请查看 Picasso 的图像加载库

试试这个

public class SingleView extends Activity{
TextView name,dob,height,country;
Button back,prev,nxt;
ImageView img ;

//imageLoader = ActorAdapter.getInstance().getImage();

private ArrayList<Actors> movieList_detail = new ArrayList<Actors>();

int selected = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.singleview);    

    Intent i = getIntent();

    final String image1 = i.getStringExtra("thumb");
    String name1 = i.getStringExtra("name");
    String dob1 = i.getStringExtra("dob");
    String height1 = i.getStringExtra("height");
    String country1 = i.getStringExtra("country");

    img = (ImageView)findViewById(R.id.ivImage);
    name = (TextView)findViewById(R.id.tvName);
    dob = (TextView)findViewById(R.id.tvDateOfBirth);
    height = (TextView)findViewById(R.id.tvHeight);
    country = (TextView)findViewById(R.id.tvCountry);
    back = (Button)findViewById(R.id.button1);
    prev = (Button)findViewById(R.id.button2);
    nxt = (Button)findViewById(R.id.button3);

    movieList_detail = MainActivity.actorsList;


    name.setText(name1);
    dob.setText(dob1);
    height.setText(height1);
    country.setText(country1);

new DownloadImageTask(img).execute(image1);


    back.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
        }
    });

    prev.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if(selected>0){

                selected--;

                Actors m = movieList_detail.get(selected);
                //String image  = m.getThumbnailUrl();
                name.setText(m.getName());
                dob.setText(m.getDob());
                height.setText(m.getHeight());
                country.setText(m.getCountry());
            //  img.DisplayImage(m.getImage(), image1);


                nxt.setVisibility(View.VISIBLE);
            }else
            {
                prev.setVisibility(View.GONE);
            }
        }
    });

        nxt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
            // TODO Auto-generated method stub

                if(selected<5){

                    selected++;

                    Actors m = movieList_detail.get(selected);
                    //String image  = m.getThumbnailUrl();
                    name.setText(m.getName());
                    dob.setText(m.getDob());
                    height.setText(m.getHeight());
                    country.setText(m.getCountry());
                //  imageLoader.DisplayImage(m.getImage(), img);

            prev.setVisibility(View.VISIBLE);
            }else
            {
                nxt.setVisibility(View.GONE);
            }
        }
    });


}