-2

Sorry the question was repeated but my error is different. When i am getting image from JSON String my logcat shows like this.

06-17 11:19:57.550 26687-26733/com.hotel.yasmeenshaikh.hotelyasmeen E/Posix: Posix_open return with -1, errno 2 No such file or directory

Same error show thw number of lines. And my listview contains only default image no data will fetch from server. Here is my code.

public class Events extends Activity {
// Declare Variables
private ProgressDialog pDialog;
JSONArray jsonarray = null;
String Image = "image_name";
ListView list;
ListViewAdapter adapter;
ArrayList<Product> itemlist;
ArrayList<Product> tempMenu = new ArrayList<>();
static String Array = "AllMenu";

String url = "http://app.goholidays.info/selectAllHotel.php";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.all_item_layout);
    itemlist = new ArrayList<Product>();
    new ReadJSON().execute();
    list = (ListView) findViewById(R.id.myimagelist);
}

class ReadJSON extends AsyncTask<String, Void, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... args) {
        Product tempMenu;
        try {
            JSONObject jsonobject = JSONfunctions.getJSONfromURL(url);
            jsonarray = jsonobject.optJSONArray(Array);
            //parse date for dateList
            for (int i = 0; i < jsonarray.length(); i++) {
                tempMenu = new Product();

                jsonobject = jsonarray.getJSONObject(i);

                tempMenu.setImagePath(jsonobject.getString("image_name"));

                itemlist.add(tempMenu);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        adapter = new ListViewAdapter(Events.this, itemlist);
        list.setAdapter(adapter);
    }
}
}

And my ListViewAdapter class is here.

public class ListViewAdapter extends BaseAdapter {

Context context;
LayoutInflater inflater;
ArrayList<Product> AllMenu = new ArrayList<>();
ImageLoader imageLoader;

public ListViewAdapter(Context context, ArrayList<Product> itemlist) {
    this.context=context;
    AllMenu = itemlist;
    imageLoader = new ImageLoader(context);
}

public int getCount() {
    return AllMenu.size();
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

public View getView(final int position, final View convertView, ViewGroup parent) {
    // Declare Variables
    Product tempMenu = AllMenu.get(position);
    ImageView image_path;

    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View view = inflater.inflate(R.layout.all_item_list, parent, false);
    // Get the position
    image_path = (ImageView) view.findViewById(R.id.image_all_main);

    imageLoader.DisplayImage(tempMenu.getImagePath(),image_path);
    return view;
}
}

And my imageLoader class is here

public class ImageLoader {
MemoryCache memoryCache = new MemoryCache();
FileCache fileCache;
private Map<ImageView, String> imageViews = Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
ExecutorService executorService;
Handler handler = new Handler();

public ImageLoader(Context activity) {
    fileCache = new FileCache(activity);
    executorService = Executors.newFixedThreadPool(5);
}

final int stub_id = R.drawable.gallery;

public void DisplayImage(String url, ImageView imageView) {
    imageViews.put(imageView, url);
    Bitmap bitmap = memoryCache.get(url);
    if (bitmap != null)
        imageView.setImageBitmap(bitmap);
    else {
        queuePhoto(url, imageView);
        imageView.setImageResource(stub_id);
    }
}

private void queuePhoto(String url, ImageView imageView) {
    PhotoToLoad p = new PhotoToLoad(url, imageView);
    executorService.submit(new PhotosLoader(p));
}

private Bitmap getBitmap(String url) {
    File f = fileCache.getFile(url);

    Bitmap b = decodeFile(f);
    if (b != null)
        return b;

    // Download Images from the Internet
    try {
        Bitmap bitmap = null;
        URL imageUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
        conn.setConnectTimeout(30000);
        conn.setReadTimeout(30000);
        conn.setInstanceFollowRedirects(true);
        InputStream is = conn.getInputStream();
        OutputStream os = new FileOutputStream(f);
        Utils.CopyStream(is, os);
        os.close();
        conn.disconnect();
        bitmap = decodeFile(f);
        return bitmap;
    } catch (Throwable ex) {
        ex.printStackTrace();
        if (ex instanceof OutOfMemoryError)
            memoryCache.clear();
        return null;
    }
}

// Decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f) {
    try {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        FileInputStream stream1 = new FileInputStream(f);
        BitmapFactory.decodeStream(stream1, null, o);
        stream1.close();

        // Find the correct scale value. It should be the power of 2.
        // Recommended Size 512
        final int REQUIRED_SIZE = 140;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE
                    || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        FileInputStream stream2 = new FileInputStream(f);
        Bitmap bitmap = BitmapFactory.decodeStream(stream2, null, o2);
        stream2.close();
        return bitmap;
    } catch (FileNotFoundException e) {
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

// Task for the queue
private class PhotoToLoad {
    public String url;
    public ImageView imageView;

    public PhotoToLoad(String u, ImageView i) {
        url = u;
        imageView = i;
    }
}

class PhotosLoader implements Runnable {
    PhotoToLoad photoToLoad;

    PhotosLoader(PhotoToLoad photoToLoad) {
        this.photoToLoad = photoToLoad;
    }

    @Override
    public void run() {
        try {
            if (imageViewReused(photoToLoad))
                return;
            Bitmap bmp = getBitmap(photoToLoad.url);
            memoryCache.put(photoToLoad.url, bmp);
            if (imageViewReused(photoToLoad))
                return;
            BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad);
            handler.post(bd);
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }
}

boolean imageViewReused(PhotoToLoad photoToLoad) {
    String tag = imageViews.get(photoToLoad.imageView);
    if (tag == null || !tag.equals(photoToLoad.url))
        return true;
    return false;
}

// Used to display bitmap in the UI thread
class BitmapDisplayer implements Runnable {
    Bitmap bitmap;
    PhotoToLoad photoToLoad;

    public BitmapDisplayer(Bitmap b, PhotoToLoad p) {
        bitmap = b;
        photoToLoad = p;
    }

    public void run() {
        if (imageViewReused(photoToLoad))
            return;
        if (bitmap != null)
            photoToLoad.imageView.setImageBitmap(bitmap);
        else
            photoToLoad.imageView.setImageResource(stub_id);
    }
}

public void clearCache() {
    memoryCache.clear();
    fileCache.clear();
}
}

Here i will using reference my this site. Plz help me solve this problem.

3 Answers3

0

Simply use image loading library with just one line of code

Popular lib:

1.picasso

2.fresco

You can choose between: Picasso vs Fresco vs glide vs UIL

must do caching, and threading, with image handling on Android.

It's that simple. Unless you want to write that from scratch, you simply must use Picasso.

Note that ParseImageFile essentially doesn't work - it is utterly useless about caching and so on. There are admirable alternatives to Picasso (such as Universal Image Loader, check it out), but none work as well as Picasso, for now 2014.

Note if you move to super-advanced-stuffs... The only thing better than Picasso, is to make the move to Volley. but that is a huge leap.

Note that ListView scrolling on android is much, much more problematic than table handling scrolling on iOS. You could say, Android + Picasso is MORE LIKE the situation on iOS, where all the work is already done for scrolling large table views with images.

For today, Picasso is - simply - a central part of any Android app whatsoever. Thank goodness, it is one line of code - no setup, nothing.

Again, the only thing "better than" Picasso is if you move to Volley.

From: Stakover flow link

Community
  • 1
  • 1
Smit.Satodia
  • 597
  • 4
  • 13
0

Yes I can found my answer i cant take permission into manifest file. Here is solution.

    <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
0

I don't know why you are doing this alot of stuff. I just tell you simple steps. When you insert the image to server, image will be stored in database like this:

4840d538bf389bae5bde4fe9924e5009.png

when you get image name from json object same value you will get in string like:4840d538bf389bae5bde4fe9924e5009.png

And at last you will get the one url from php developer to get the image from server, Next step is attach your image name with url:

Now you are having the image, to print it on imageview just use picasso library for example:

Picasso.with(this).load(img_url + image).placeholder(R.drawable.camera).into(imageView_spots);

That's it.

Däñish Shärmà
  • 2,891
  • 2
  • 25
  • 43
  • Sir i m new in android i don't know to fetch data from server after searching on google i will found that solution. Then i m use it on my project. But Thank you sir I will try this on code. Thank You :D – yogi puranik Jun 17 '16 at 08:34
  • @yogipuranik could you show me your Product class and just and is enough where image_name is u r column name right – Vijaya Varma Lanke Jun 22 '17 at 11:08