URL átadás ImageView-nak Androidon
2017-04-19T09:52:16+02:00
2017-04-20T05:48:30+02:00
2022-08-10T15:10:31+02:00
d3ad
Sziasztok!
A problémám az lenne, hogy JSON-ön keresztül megkapom egy kép URL-jét, de nem a teljes címet csak a végét, amit eltárolok egy sztringben. Ezt egy másik sztringben összefűzöm, hogy megkapjam a teljes linket. De ha ezt nem az InitResponses-ban teszem akkor NULL-t kapok, ha pedig ott csinálom, akkor nem tudom utána betölteni a képet. 
private void InitResponses() { successResponse = new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { JSONArray jArray; try { jArray = response.getJSONArray("topimage"); for(int i = 0; i < jArray.length(); i++) { topImageArray.add(jArray.getJSONObject(i).getString("id")); topImageArray.add(jArray.getJSONObject(i).getString("mini")); topImageArray.add(jArray.getJSONObject(i).getString("score")); topImageArray.add(jArray.getJSONObject(i).getString("viewnumber")); topImageArray.add(jArray.getJSONObject(i).getString("title")); } toppic = topImageArray.get(1).toString();

 //IMAGE_URL = "http://192.168.1.79/poa/poa-server/public/"+topImageArray.get(1).toString();
 //Log.d("URL", IMAGE_URL);
 }catch (JSONException e){
 e.printStackTrace();
 }
 }
 };
Itt kérem le sok más adattal együtt a kép URL-jét is és látszik, hogy ki van kommentezve az összefűzés, mivel nem működött. Próbáltam úgy is hogy csak eltárolom egy sztringbe.
A kép betöltésére írtam egy külön LoadImageTask osztályt:

public class LoadImageTask extends AsyncTask<String, Void, Bitmap> { public LoadImageTask(Listener listener) { mListener = (Listener) listener; } public interface Listener { void onImageLoaded(Bitmap bitmap); void onError(); } private Listener mListener; @Override protected Bitmap doInBackground(String... args) { try { return BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent()); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap bitmap) { if (bitmap != null) { mListener.onImageLoaded(bitmap); } else { mListener.onError(); } } }
A MainActivityben csak felülírtam a két metódust:

@Override public void onImageLoaded(Bitmap bitmap) { mImageView.setImageBitmap(bitmap); } @Override public void onError() { Toast.makeText(this, "Error Loading Image !", Toast.LENGTH_SHORT).show(); }
Aztán onCreate-ben meghívtam az InitResponses-t, a JSONDownloadot és összefűztem a Stringeket:

InitResponses(); JSONDownload(); IMAGE_URL = "http://192.168.1.79/poa/poa-server/public/"+toppic;
Tud esetleg valaki segíteni, hogy mit rontok el és miért kapok a toppic-be mindig NULL-t? Mert ha az InitResponses-ben fűzöm össze és ott logba megnézem az értékét még jó, de azon kívül ugyanúgy null lesz.
Mutasd a teljes hozzászólást!
Szerintem azért kaptál null-t mert a kép letöltése aszinkron történik (AsyncTask), így amikor elkezdtél volna dolgozni a toppic változóval még javában azon volt egy másik szálon, hogy a kérést összeállítsa, elküldje a kérést és megvárja + feldolgozza a választ.

@szabofe: ha láthatósági probléma lenne, akkor le sem tudta volna fordítani az app-ot
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd