1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # Example for the `app::http_request` main service `AsyncHttpRequest`
16 module http_request_example
is
18 app_name
"app.nit HTTP"
19 app_namespace
"org.nitlanguage.http_example"
24 import app
::http_request
25 import android
::aware
# for android_api_target
27 # Simple asynchronous HTTP request to http://example.com/ displaying feedback to the window
29 super AsyncHttpRequest
31 # Back reference to the window to show feedback to the user
32 var win
: HttpRequestClientWindow
37 redef fun uri
do return "http://example.com/"
38 redef fun deserialize_json
do return false
45 win
.label_response
.text
= "Sending request..."
47 # Disable button to prevent double requests
48 win
.button_request
.enabled
= false
51 redef fun on_load
(data
, status
)
52 do win
.label_response
.text
= "Received response code {status} with {data.as(Text).byte_length} bytes"
54 redef fun on_fail
(error
)
55 do win
.label_response
.text
= "Connection error: {error}"
57 redef fun after
do win
.button_request
.enabled
= true
60 # Simple window with a label and a button
61 class HttpRequestClientWindow
65 var layout
= new ListLayout(parent
=self)
67 # Button to send request
68 var button_request
= new Button(parent
=layout
, text
="Press to send HTTP request")
70 # Label displaying feedback to user
71 var label_response
= new Label(parent
=layout
, text
="No response yet.")
73 init do button_request
.observers
.add
self
75 redef fun on_event
(event
)
77 if event
isa ButtonPressEvent and event
.sender
== button_request
then
78 # Prepare and send request
79 var request
= new MyHttpRequest(self)
85 redef fun root_window
do return new HttpRequestClientWindow