My customers running Android 4.3 are having a whole bunch of issues with network connections. I saw a couple threads about it, and it was recommended that you retry network requests because Android 4.3 is failing often, but when I tried that I was getting even more bizarre behavior.
It seems like if you call network.request with a POST it isn’t passing the parameters. So instead of getting a failure in the callback. I am getting a response from my php server saying the parameters are undefined indexes.
l attached a sphp server file for a test app that demonstrates the issues if you run it on Android 4.3. If you only click on the Get Test Sets button everything works just fine. If you click on the Post Test Sets then some requests work fine, but others seem to lose the parameters, and the ones that do work come back out of order (which I know order isn’t guaranteed but it is still weird) and if you go back to the Get Test Sets, those lose parameters as well.
local widget = require "widget" function network.requestWithRetry(url, postOrGet, networkListener, params) print("URL " .. url) if(params ~= nil) then print("PARAMS " .. params.body) end local count = 0 local function localListener( event ) print("in retry listener") print(event.phase) if(event.phase == "ended") then if ( event.isError ) then if(count \< 5) then count = count + 1 print("try " .. tostring(count)) doRequest() else print("Network error " .. tostring(event.errorMessage)) end else print("response " .. event.response) networkListener(event) end end end local function doRequest() if(postOrGet == "GET") then network.request(url, postOrGet, localListener) else network.request(url, postOrGet, localListener, params) end end doRequest() end local function handler(event) print("IN REAL HANDLER") print("IS ERROR " .. tostring(event.isError)) print("RESPONSE " .. tostring(event.response)) end local function testSet1() postData = "test1=yes&test2=no" local params = {} params.body = postData print("POST TEST") network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php", "POST", handler, params) print("POST TEST2") params.body = "test1=boo&test2=hoo" network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php", "POST", handler, params) print("POST TEST3") params.body = "test1=high&test2=low" network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php", "POST", handler, params) print("GET TEST") network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php?test1=red&test2=green", "GET", handler, nil) end local function testSet2() print("GET TEST") network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php?test1=yes&test2=no", "GET", handler, nil) print("GET TEST2") network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php?test1=boo&test2=hoo", "GET", handler, nil) print("GET TEST3") network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php?test1=high&test2=low", "GET", handler, nil) print("GET TEST") network.requestWithRetry("http://192.168.1.6:5723/testNetwork.php?test1=red&test2=green", "GET", handler, nil) end local button1 = widget.newButton{ label = "Post Test Sets", onPress = function(event)testSet1() return true end } button1.y = display.contentHeight \* .3 button1.x = display.contentWidth \* .5 local button2 = widget.newButton{ label = "Get Test Sets", onPress = function(event)testSet2() return true end } button2.y = display.contentHeight \* .6 button2.x = display.contentWidth \* .5
Here is the output from logcat:
Running just the Get Test Sets Button:
12-11 17:58:01.589: I/Corona(11656): GET TEST
12-11 17:58:01.589: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=yes&test2=no
12-11 17:58:01.609: I/Corona(11656): GET TEST2
12-11 17:58:01.609: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=boo&test2=hoo
12-11 17:58:01.639: I/Corona(11656): GET TEST3
12-11 17:58:01.639: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=high&test2=low
12-11 17:58:01.681: I/Corona(11656): GET TEST
12-11 17:58:01.681: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=red&test2=green
12-11 17:58:02.089: I/Corona(11656): in retry listener
12-11 17:58:02.089: I/Corona(11656): ended
12-11 17:58:02.089: I/Corona(11656): response boo hoo
12-11 17:58:02.089: I/Corona(11656): IN REAL HANDLER
12-11 17:58:02.089: I/Corona(11656): IS ERROR false
12-11 17:58:02.089: I/Corona(11656): RESPONSE boo hoo
12-11 17:58:02.109: I/Corona(11656): in retry listener
12-11 17:58:02.109: I/Corona(11656): ended
12-11 17:58:02.109: I/Corona(11656): response high low
12-11 17:58:02.109: I/Corona(11656): IN REAL HANDLER
12-11 17:58:02.109: I/Corona(11656): IS ERROR false
12-11 17:58:02.109: I/Corona(11656): RESPONSE high low
12-11 17:58:02.129: I/Corona(11656): in retry listener
12-11 17:58:02.129: I/Corona(11656): ended
12-11 17:58:02.129: I/Corona(11656): response yes no
12-11 17:58:02.129: I/Corona(11656): IN REAL HANDLER
12-11 17:58:02.129: I/Corona(11656): IS ERROR false
12-11 17:58:02.129: I/Corona(11656): RESPONSE yes no
12-11 17:58:02.149: I/Corona(11656): in retry listener
12-11 17:58:02.149: I/Corona(11656): ended
12-11 17:58:02.149: I/Corona(11656): response red green
12-11 17:58:02.149: I/Corona(11656): IN REAL HANDLER
12-11 17:58:02.149: I/Corona(11656): IS ERROR false
12-11 17:58:02.149: I/Corona(11656): RESPONSE red green
Running the Post Test Sets
12-11 17:58:04.598: I/Corona(11656): POST TEST
12-11 17:58:04.598: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php
12-11 17:58:04.598: I/Corona(11656): PARAMS test1=yes&test2=no
12-11 17:58:04.608: I/Corona(11656): POST TEST2
12-11 17:58:04.608: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php
12-11 17:58:04.618: I/Corona(11656): PARAMS test1=boo&test2=hoo
12-11 17:58:04.648: I/Corona(11656): POST TEST3
12-11 17:58:04.648: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php
12-11 17:58:04.648: I/Corona(11656): PARAMS test1=high&test2=low
12-11 17:58:04.668: I/Corona(11656): GET TEST
12-11 17:58:04.679: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=red&test2=green
12-11 17:58:04.758: I/Corona(11656): in retry listener
12-11 17:58:04.758: I/Corona(11656): ended
12-11 17:58:04.768: I/Corona(11656): response yes no
12-11 17:58:04.788: I/Corona(11656): IN REAL HANDLER
12-11 17:58:04.788: I/Corona(11656): IS ERROR false
12-11 17:58:04.788: I/Corona(11656): RESPONSE yes no
12-11 17:58:04.868: I/Corona(11656): in retry listener
12-11 17:58:04.868: I/Corona(11656): ended
12-11 17:58:04.878: I/Corona(11656): response
12-11 17:58:04.878: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:04.878: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:04.878: I/Corona(11656):
12-11 17:58:04.878: I/Corona(11656): IN REAL HANDLER
12-11 17:58:04.878: I/Corona(11656): IS ERROR false
12-11 17:58:04.878: I/Corona(11656): RESPONSE
12-11 17:58:04.878: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:04.878: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:04.878: I/Corona(11656):
12-11 17:58:04.898: I/Corona(11656): in retry listener
12-11 17:58:04.898: I/Corona(11656): ended
12-11 17:58:04.898: I/Corona(11656): response high low
12-11 17:58:04.898: I/Corona(11656): IN REAL HANDLER
12-11 17:58:04.898: I/Corona(11656): IS ERROR false
12-11 17:58:04.898: I/Corona(11656): RESPONSE high low
12-11 17:58:04.918: I/Corona(11656): in retry listener
12-11 17:58:04.918: I/Corona(11656): ended
12-11 17:58:04.918: I/Corona(11656): response
12-11 17:58:04.918: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:04.918: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:04.918: I/Corona(11656):
12-11 17:58:04.918: I/Corona(11656): IN REAL HANDLER
12-11 17:58:04.918: I/Corona(11656): IS ERROR false
12-11 17:58:04.928: I/Corona(11656): RESPONSE
12-11 17:58:04.928: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:04.928: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:04.928: I/Corona(11656):
Running the Get Test Sets again
12-11 17:58:09.898: I/Corona(11656): GET TEST
12-11 17:58:09.898: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=yes&test2=no
12-11 17:58:09.910: I/Corona(11656): GET TEST2
12-11 17:58:09.910: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=boo&test2=hoo
12-11 17:58:09.918: I/Corona(11656): GET TEST3
12-11 17:58:09.918: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=high&test2=low
12-11 17:58:09.948: I/Corona(11656): GET TEST
12-11 17:58:09.948: I/Corona(11656): URL http://192.168.1.6:5723/testNetwork.php?test1=red&test2=green
12-11 17:58:10.068: I/Corona(11656): in retry listener
12-11 17:58:10.068: I/Corona(11656): ended
12-11 17:58:10.068: I/Corona(11656): response
12-11 17:58:10.068: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:10.068: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:10.068: I/Corona(11656):
12-11 17:58:10.068: I/Corona(11656): IN REAL HANDLER
12-11 17:58:10.068: I/Corona(11656): IS ERROR false
12-11 17:58:10.068: I/Corona(11656): RESPONSE
12-11 17:58:10.068: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:10.068: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:10.068: I/Corona(11656):
12-11 17:58:10.191: I/Corona(11656): in retry listener
12-11 17:58:10.198: I/Corona(11656): ended
12-11 17:58:10.198: I/Corona(11656): response
12-11 17:58:10.198: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:10.198: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:10.198: I/Corona(11656):
12-11 17:58:10.198: I/Corona(11656): IN REAL HANDLER
12-11 17:58:10.198: I/Corona(11656): IS ERROR false
12-11 17:58:10.198: I/Corona(11656): RESPONSE
12-11 17:58:10.198: I/Corona(11656): Notice: Undefined index: test1 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 4
12-11 17:58:10.198: I/Corona(11656): Notice: Undefined index: test2 in C:\app_dev\app_dev\chinesePoker\web\testNetwork.php on line 5
12-11 17:58:10.198: I/Corona(11656):
12-11 17:58:10.229: I/Corona(11656): in retry listener
12-11 17:58:10.229: I/Corona(11656): ended
12-11 17:58:10.229: I/Corona(11656): response high low
12-11 17:58:10.229: I/Corona(11656): IN REAL HANDLER
12-11 17:58:10.229: I/Corona(11656): IS ERROR false
12-11 17:58:10.229: I/Corona(11656): RESPONSE high low
12-11 17:58:10.248: I/Corona(11656): in retry listener
12-11 17:58:10.248: I/Corona(11656): ended
12-11 17:58:10.258: I/Corona(11656): response red green
12-11 17:58:10.258: I/Corona(11656): IN REAL HANDLER
12-11 17:58:10.258: I/Corona(11656): IS ERROR false
12-11 17:58:10.258: I/Corona(11656): RESPONSE red green
Am I doing something fundamentally wrong in my network.requests with “POST”? Is it a bug in Android? Is some corona code not returning the right response from an event handler, or not closing a connection down correctly?