вызывая изображение с сервера в андроид - PullRequest
0 голосов
/ 30 июня 2011

Здравствуйте, у меня есть этот вывод Json, и я звоню в моем приложении для Android.Я могу получить путь изображения, но как я могу отобразить изображение вместо пути.вот код

public class Test extends ListActivity  {
      Prefs myprefs = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listplaceholder);
        this.myprefs = new Prefs(getApplicationContext());
        // install handler for processing gui update messages
        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
       JSONObject json = JSONfunctions.getJSONfromURL("http://midsweden.gofreeserve.com/proj/androidjson.php?identifier=" + 
        Test.this.myprefs.getPersonalno());

        try{

            JSONArray  earthquakes = json.getJSONArray("services");

            for(int i=0;i<earthquakes.length();i++){                        
                HashMap<String, String> map = new HashMap<String, String>();    
                JSONObject e = earthquakes.getJSONObject(i);

                map.put("id",  String.valueOf(i));
                map.put("pic", "Picture : " + e.getString("employeepic"));
                map.put("serviceinfo", "" +  e.getString("employeename")+ " : "+ e.getString("starttime")
                        +" To " +  e.getString("endtime"));
                mylist.add(map);            
            }       
        }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
        }

        ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.test, 
                        new String[] { "pic", "serviceinfo" }, 
                        new int[] { R.id.item_title, R.id.item_subtitle });

        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                @SuppressWarnings("unchecked")
                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
                Toast.makeText(Test.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

            }
        });

    }

Это путь, который я получаю в моем приложении для Android

pictures/file83915.jpg

Здесь я называю картинку

map.put("pic", "Picture : " + e.getString("employeepic"));

1 Ответ

1 голос
/ 30 июня 2011

Я использовал этот класс для загрузки изображения с сервера Надеюсь, это поможет вам ... !! Когда вы получили список URL-адресов изображений с вашего сервера или любого другого источника, используйте его для загрузки этого конкретного изображения.

GetImage.downloadFile("pictures/file83915.jpg", new ImageDownloaded()
{
    @Override
    public void imageDownloaded(Bitmap result){
        image.setImageBitmap(result);
    }

    @Override
    public void imageDownloadedFailed(){
    }

});

Где класс GetImage:

public class GetImage
{
    public static void  downloadFile(final String fileUrl, final ImageDownloaded img)
    {
        AsyncTask<String , Void, Bitmap> task = new AsyncTask<String , Void, Bitmap>()
        {
            @Override
            protected Bitmap doInBackground(String... params) {
                Bitmap bmImg;
                URL myFileUrl =null;
                if(fileUrl.equals(""))
                {
                    return null;
                }
                try
                {
                    myFileUrl= new URL("http://yourURl/" +fileUrl.replace(" ", "%20"));
                }
                catch (MalformedURLException e)
                {
                    e.printStackTrace();
                }
                try
                {
                    HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
                    conn.setDoInput(true);
                    conn.connect(); 

                    InputStream is = conn.getInputStream();
                    bmImg = BitmapFactory.decodeStream(is);

                    return bmImg;
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
                return null;
            }
            @Override
            protected void onPostExecute(Bitmap results)
            {
                if(results != null)
                img.imageDownloaded(results);
                else
                    img.imageDownloadedFailed();
            }

        };
        task.execute("");


    }

    public static abstract class ImageDownloaded
    {
        public abstract void imageDownloaded(Bitmap result);
        public abstract void imageDownloadedFailed();
    }


}

Я использовал класс CustomAdapter для отображения данных в списке с изображениями, подобными этим. в методе getView() я использовал эту тему вот так.

public View getView(params....)
{
    View row ;//Inflataion blah blah
    Bitmap thumb = myCustomObject.getBitmap();
    final ImageView image = (ImageView) row.findViewById(R.id.image);

    if(thumb == null)
    {
        GetImage.downloadFile(myCustomObject.getImagePath(), new ImageDownloaded()
        {

            @Override
            public void imageDownloaded(Bitmap result){
                myCustomObject.setBmp(result);
                image.setImageBitmap(myCustomObject.getBitmap());
            }

            @Override
            public void imageDownloadedFailed(){
            }

        });         
    }
    else
    image.setImageBitmap(thumb);
}

MyCustomObject - это мой class, который инкапсулирует данные с сервера, а также изображение с сервера и implements Parcelable interface. Сначала я получаю данные через JSON, а затем получаю изображение в Adapter. Он также может быть передан любому DetailActivity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...