CopyPastor

Detecting plagiarism made easy.

Score: -1; Reported for: Open both answers

Possible Plagiarism

Reposted on 2018-01-12

Original Post

Original - Posted on 2013-03-06



            
Present in both answers; Present only in the new answer; Present only in the old answer;

This is not the best answer but probably fits into your case :)
public void method(){ final Activity activity = getCurrentActivity(); activity.runOnUiThread(new Runnable() { @Override public void run() { int counter = sources.size(); for (int i = 0; i < sources.size(); i++) { final ReadableMap source = sources.getMap(i); final GlideUrl glideUrl = FastImageViewConverter.glideUrl(source); final Priority priority = FastImageViewConverter.priority(source); Glide .with(activity.getApplicationContext()) .load(glideUrl) .priority(priority) .placeholder(TRANSPARENT_DRAWABLE) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .preload() .listener(new RequestListener<Uri, GlideDrawable>() { @Override public boolean onException(Exception e, Uri model, Target<GlideDrawable> target, boolean isFirstResource) { counter--; if counter == 0 { return your result here } return false; } @Override public boolean onResourceReady(GlideDrawable resource, Uri model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { counter--; if counter == 0 { return your result here } return false; // impossible? } }); } } }); }
We just had to work around this problem and tested three different solution approaches.
1. does cancel the request as suggested by @meouw 2. execute all request but only processes the result of the last submit 3. prevents new requests as long as another one is still pending
<!-- language: lang-js -->

<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-html -->
<!DOCTYPE html> <html>
<head> <title>AJAX Test</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> var Ajax1 = { call: function() { if (typeof this.xhr !== 'undefined') this.xhr.abort(); this.xhr = $.ajax({ url: 'your/long/running/request/path', type: 'GET', success: function(data) { //process response } }); } }; var Ajax2 = { counter: 0, call: function() { var self = this, seq = ++this.counter; $.ajax({ url: 'your/long/running/request/path', type: 'GET', success: function(data) { if (seq === self.counter) { //process response } } }); } }; var Ajax3 = { active: false, call: function() { if (this.active === false) { this.active = true; var self = this; $.ajax({ url: 'your/long/running/request/path', type: 'GET', success: function(data) { //process response }, complete: function() { self.active = false; } }); } } }; $(function() { $('#button').click(function(e) { Ajax3.call(); }); }) </script> </head>
<body> <input id="button" type="button" value="click" /> </body>
</html>
<!-- end snippet -->
ur case we decided to use approach #3 as it produces less load for the server. But I am not 100% sure if jQuery guarantees the call of the .complete()-method, this could produce a deadlock situation. In our tests we could not reproduce such a situation.

        
Present in both answers; Present only in the new answer; Present only in the old answer;