[TIMOB-20036] Android: HttpClient.abort() on andorid throw errors if the request is just created
GitHub Issue | n/a |
---|---|
Type | Bug |
Priority | Medium |
Status | Closed |
Resolution | Fixed |
Resolution Date | 2016-02-16T06:33:41.000+0000 |
Affected Version/s | Release 5.0.2 |
Fix Version/s | Release 5.2.0 |
Components | Android |
Labels | httpclient, httpclient.abort, module_network, qe-manualtest, qe-testadded |
Reporter | carlo |
Assignee | Hieu Pham |
Created | 2015-10-15T15:37:30.000+0000 |
Updated | 2016-02-16T06:33:47.000+0000 |
Description
If I try to cancel a just created HttpClient request (eg on a input onchange search), I got the below errors.
With SDK 3.4.1 I got this error:
{noformat}
[ERROR] : TiHttpClient: (TiHttpClient-3) [0,4790] HTTP Error (java.lang.IllegalStateException): Connection pool shut down.
[ERROR] : TiHttpClient: java.lang.IllegalStateException: Connection pool shut down.
[ERROR] : TiHttpClient: at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:289)
[ERROR] : TiHttpClient: at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:243)
[ERROR] : TiHttpClient: at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:181)
[ERROR] : TiHttpClient: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:331)
[ERROR] : TiHttpClient: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
[ERROR] : TiHttpClient: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:658)
[ERROR] : TiHttpClient: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:642)
[ERROR] : TiHttpClient: at ti.modules.titanium.network.TiHTTPClient$ClientRunnable.run(TiHTTPClient.java:1341)
[ERROR] : TiHttpClient: at java.lang.Thread.run(Thread.java:818)
{noformat}
With SDK 5.0.0 instead:
{noformat}
[ERROR] : TiHttpClient: (TiHttpClient-7) [0,9478] HTTP Error (java.lang.NullPointerException): Attempt to invoke interface method 'int org.apache.http.StatusLine.getStatusCode()' on a null object reference
[ERROR] : TiHttpClient: java.lang.NullPointerException: Attempt to invoke interface method 'int org.apache.http.StatusLine.getStatusCode()' on a null object reference
[ERROR] : TiHttpClient: at ti.modules.titanium.network.TiHTTPClient$ClientRunnable.run(TiHTTPClient.java:1354)
[ERROR] : TiHttpClient: at java.lang.Thread.run(Thread.java:818)
{noformat}
I'm pretty sure this don't happen with 3.1 or 3.2 but I can't test it at the moment.
Test apps here:
https://www.dropbox.com/sh/g7a7n9emtu36fzc/AADrFBNZ8UthezDd0vmKGjM1a?dl=0
Test code:
var win = Titanium.UI.createWindow({layout:'vertical', height:Titanium.UI.FILL, backgroundColor:"#FFF"});
var button = Titanium.UI.createButton({top:50,title:"create new request and cancel it after 50ms (will often throw error on logcat)"});
button.addEventListener('click', function(){
var n = Ti.Network.createHTTPClient();
n.open("GET", "http://www.google.com");
n.send();
setInterval(function(){
n.abort();
},50);
});
win.add(button);
win.open();
master PR: https://github.com/appcelerator/titanium_mobile/pull/7559
PR merged.
Verified the fix. No errors seen on httpClient.abort(). Closing. Environment: Appc Studio : 4.5.0.201601131150 Ti SDK : 5.2.0.v20160114021251 Ti CLI : 5.0.5 Alloy : 1.7.26 MAC Yosemite : 10.10.5 Appc NPM : 4.2.2 Appc CLI : 5.1.0 Node: v0.12.27 Nexus 6P - Android 6.0 One Plus One - Android 5.1.1