簡體   English   中英

如何從Rest API將圖像資源設置為Android ImageView

[英]How To Set Image Resource To Android ImageView from Rest API

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.*******.******.app.R;
import com.*******.******.app.adapter.CustomAdapter;
import com.*******.******.app.adapter.CustomPromoAdapter;
import com.*******.******.app.pojo.Campaigns;
import com.*******.******.app.pojo.ConsumerProfile;

import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;

public class Promo extends AppCompatActivity {
    private ArrayList<String> imageurls = new ArrayList<>();
    private ArrayList<String> imgnames = new ArrayList<>();
    GridView gridview;
    Context context;
    ArrayList programName;
    String campid,campImage,campName;
    TextView name;
    ImageView images;
  //  public static String[] programNameList = {"AppleMacBook", "HP_note_Book", "LG_NEXUS", "NokiaLumia", "SamsungRT", "SONY_BRAVIA", "Sansui"};
  //  public static int[] programImages = {R.drawable.apple, R.drawable.hp, R.drawable.nexus, R.drawable.lumia, R.drawable.fridge, R.drawable.tv, R.drawable.tv1};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_promo);
        new HttpRequesrPromo().execute();
        new HttpLocationPromo().execute();
        gridview = (GridView) findViewById(R.id.gridView1);
        //gv.setAdapter(new CustomPromoAdapter(this,programNameList,programImages));
        CustomPromoAdapter adapter = new CustomPromoAdapter(this,imageurls,imgnames);
        gridview.setAdapter(adapter);
        name = (TextView) findViewById(R.id.textView1);
        images = (ImageView) findViewById(R.id.imageView1);

    }

    private class HttpRequesrPromo extends AsyncTask<Void, Void, Campaigns> {

        @Override
        protected Campaigns doInBackground(Void... params) {

            try {

                final String url = "http://myurl";


                RestTemplate restTemplate = new RestTemplate();
                Campaigns campa = restTemplate.getForObject(url, Campaigns.class);
                return campa;

            } catch (Exception e) {
                Log.e("MainActivity", e.getMessage(), e);

            }
            return null;
        }

        @Override
        protected void onPostExecute(Campaigns campa) {
            super.onPostExecute(campa);
            campid = campa.getId();
            Log.d("Campaign Idddddd~~~~~~~~", "onPostExecute: " + campid);

        }
    }

    private class HttpLocationPromo extends AsyncTask<Void, Void, Campaigns> {

        @Override
        protected Campaigns doInBackground(Void... params) {
            try {

                final String url = "http://myurl";


                RestTemplate restTemplate = new RestTemplate();
                Campaigns locationcampa = restTemplate.getForObject(url, Campaigns.class);
                return locationcampa;

            } catch (Exception e) {
                Log.e("MainActivity", e.getMessage(), e);

            }
            return null;
        }

        @Override
        protected void onPostExecute(Campaigns locationcampa) {
            super.onPostExecute(locationcampa);
            campImage=locationcampa.getImage();
            campName=locationcampa.getName();
            imgnames.add(campName);
            name.setText(campName);

            Log.d("ImageUUURRRLLL", "onPostExecute: " + campImage);
            Log.d("CampNNNAAMMEEE", "onPostExecute: " +campName);
            imageurls.add(campImage);



        }
    }
}
  1. 這是我的活動,這里我從Rest Service獲取圖像並將其添加到列表中。
  2. 我有一個帶有CustomAdapter ImageView和TextView的GridView,我想將圖像資源設置為Image View。
  3. 以下是我的適配器.......

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.app.R;
import com.app.activity.MainActivity;
import com.app.activity.Promo;

import java.util.ArrayList;

/**
 * Created by ns2 on 2/4/16.
 */
public class CustomPromoAdapter extends BaseAdapter{
    ImageView imageView;
    TextView textView;
    String [] result;
    Context context;
    int [] imageId;
    private static LayoutInflater inflater=null;
    public CustomPromoAdapter(Promo promo, ArrayList<String> imageurls, ArrayList<String> imgnames) {
        // TODO Auto-generated constructor stub
        //result=programNameList;
      //  context=promo;
      //  imageId=programImages;
        inflater = ( LayoutInflater )context.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount() {
        return result.length;
    }

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

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view;
        view=inflater.inflate(R.layout.promo_gridlist,null);
       /* textView=(TextView)view.findViewById(R.id.textView1);
        imageView=(ImageView)view.findViewById(R.id.imageView1);
        imageView.setImageResource(imageId[position]);
        textView.setText(imageId[position]);*/
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "You Clicked " + result[position], Toast.LENGTH_LONG).show();
            }
        });
        return view;
    }
}
  1. 這是我的適配器。

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_gravity="center" android:layout_width="88dp" android:layout_height="88dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" /> <TextView android:id="@+id/textView1" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:text="TextView" /> </LinearLayout> 

  1. 這是我的ImageView和TextView的布局。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".activity.Promo" > <GridView android:id="@+id/gridView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1" android:numColumns="2" > </GridView> </RelativeLayout> 

  1. 這是我的主要布局。
  2. 我現在在列表中有圖像網址,我想將這些網址設置為ImageView。
  3. 我是Android新手,有人可以幫助我如何解決此問題。
  4. 感謝他們........

最好的方法是使用畢加索庫。

Picasso.with(context).load(url).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error).into(imageView);

更多細節

嘗試這個,

URL photoUrl = new URL(imageUrl);
mIcon = BitmapFactory.decodeStream(photoUrl.openConnection() .getInputStream());

imageView.setImageBitmap(mIcon);

從服務器加載圖像的最佳方法是

Glide.with(mContext)
        .load(imageUrl)
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .placeholder(R.drawable.default)
        .error(R.drawable.default)
        .override(400, 400)
        .centerCrop()
        .into(imageView);

有關更多信息,請訪問: https : //github.com/bumptech/glide

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM