Download presentation
Presentation is loading. Please wait.
Published byClement Carter Modified over 9 years ago
1
CSCI 7010 UGA March 23 rd, 2010
2
BES/MDS TCP/IP BIS WiFi WAP 2.0 WAP 1.0
3
Blackberry Enterprise Server/Mobile Data System used if the Blackberry device is owned by a company and is set up to run through their servers lets the Blackberry device make a secure connection to corporate servers
4
Transmission Control Protocol/Internet Protocol a “regular” internet connection works with most devices
5
Blackberry Internet Service for devices that aren’t under a BES used to send email Internet connections, but less secure than BES but you need to be part of the Blackberry Alliance Program to use it
6
802.11 B/G and sometimes A allows device to connect to network via a WiFi router device user has to configure device to connect to the router Pro: better speed, lower latency, no carrier data charges Con: WiFi coverage less than wireless network coverage can write app so that it looks for WiFi first and then falls back to BES or BIS
7
Wireless Access Protocol connects through wireless carrier’s WAP gateway no Blackberry-specific infrastructure but user’s plan must support WAP 2.0 (most do) don’t need to configure as with TCP/IP
8
older version of WAP supported by all Blackberry devices but doesn’t support secure connections as do other methods
9
What should you do? If activated on a BES: use BES/MDS If not activated on a BES: use WAP 2.0 fall back to TCP/IP In either case, might want to check for WiFi
10
how the device maintains info about its configuration records about optional applications email account configuration connection methods available on a device
11
open device Options click Advanced Options Service Book Demo on the simulator
12
Two parts: CID – defines the type of record UID – a unique identifier most connection methods have a record in the service book
13
javax.microedition.io.Connector used it before to open files can also use it to open network connections Example: HttpConnection connection = (HttpConnection) Connector.open(“http://www.cnn.com”);“http://www.cnn.com or HttpConnection connection = (HttpConnection) Connector.open(“http://www.apress.com”);
14
Connection_type connectionName= (Connection_type) Connector.open(URL); Connection_type is some subclass of Connection connectionName is a variable name that you choose URL takes the form scheme://host:port/path[optional parameters] Example URLs: file://myfile.html http://www.apress.com:80/book/catalog socket://www.apress.com:80 https://www.amazon.com/gp/flex/sign-in/select.html
15
Hypertext transfer protocol protocol of the World Wide Web connectionless request-response
16
opens a connection to an http server sends a request message receives the response displays result
17
listens for a connection from client receives a request delivers a response closes the connection
18
initial line (different for request & response) header lines (zero or more) blank line optional message body
19
METHOD path http_version GET /path/to/file/index.html HTTP/1.0 METHOD: GET – “Please send this resource” POST – “Here are some details about it” HEAD – “Just checking some info about it” PATH: the part of the URL after the host name
20
also know as “status line” HTTP_version status_code reason_phrase HTTP/1.0 200 OK HTTP/1.1 404 Not Found status codes: 100s – informational 200s – success of some kind 300s – redirect to another URL 400s – client error 500s – server error
21
Let’s run it from a web browser first...
22
package com.beginningblackberry.networking; import net.rim.device.api.ui.UiApplication; public class NetworkingApplication extends UiApplication { public NetworkingApplication() { NetworkingMainScreen scr = new NetworkingMainScreen(); pushScreen(scr); } public static void main(String[] args) { NetworkingApplication app = new NetworkingApplication(); app.enterEventDispatcher(); }
23
package com.beginningblackberry.networking; import net.rim.device.api.ui.container.MainScreen; public class NetworkingMainScreen extends MainScreen { private EditField urlField; private BitmapField imageOutputField; private RichTextField textOutputField;.... methods on following slides }
24
public NetworkingMainScreen() { setTitle("Networking"); urlField = new EditField("URL:", ""); textOutputField = new RichTextField(); imageOutputField = new BitmapField(); add(urlField);add(new SeparatorField()); postDataField = new EditField("Post data:", ""); add(postDataField);add(new SeparatorField()); add(new LabelField("Image retrieved:")); add(imageOutputField);add(new SeparatorField()); add(new LabelField("Text retrieved:")); add(textOutputField); }
25
protected void makeMenu(Menu menu, int instance) { super.makeMenu(menu, instance); menu.add(new MenuItem("Get", 10, 10) { public void run() {getURL();} } ); menu.add(new MenuItem("Post", 10, 10) { public void run() {postURL();} } ); menu.add(new MenuItem("Socket Get", 10, 10) { public void run() {socketGet();} } ); }
26
http://www.purpletech.com/talks/Threads.ppt More on multi-threading (if you’re interested): http://www.cs.uga.edu/~eileen/Concurrency_tutorials
27
You can learn about any component by looking at the API documentation. See: http://www.blackberry.com/developers/docs/4.1api/index.html to learn more about the MenuItem component
28
private void getURL() { HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField.getText(), "GET", this); dispatcher.start(); } ... creates a new thread for the network- related operation ... and starts it up
29
package com.beginningblackberry.networking; /* * Class to handle creating the request, sending it off, * and receiving the response */ public class HttpRequestDispatcher extends Thread { private String url; private String method; // GET or POST private NetworkingMainScreen screen; private byte[] postData;... }
30
public HttpRequestDispatcher(String url, String method, NetworkingMainScreen screen) { this.url = url; this.method = method; this.screen = screen; } public HttpRequestDispatcher(String url, String method,NetworkingMainScreen screen, byte[] postData) { this.url = url; this.method = method; this.screen = screen; this.postData = postData; }
31
public void run(){ try{ HttpConnection connection = (HttpConnection) Connector.open(url); int responseCode = connection.getResponseCode(); if (responseCode != HttpConnection.HTTP_OK){ screen.requestFailed(“Unexpected response code: “ + responseCode); connection.close(); return; }...
32
String contentType = connection.getHeaderField(“Content-type”); ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream responseData = connection.openInputStream(); byte[] buffer = new byte[10000]; int bytesRead = responseData.read(buffer); while (bytesRead > 0){ baos.write(buffer, 0, bytesRead); bytesRead = responseData.read(buffer); } baos.close(); connection.close(); screen.requestSucceeded(baos.toByteArray(), contentType); } catch (IOException ex){ screen.requestFailed(ex.toString()); }
33
public void requestSucceeded(byte[] result, String contentType) { if (contentType.equals("image/png") || contentType.equals("image/jpeg") || contentType.equals("image/gif")) { Bitmap bitmap = Bitmap.createBitmapFromBytes(result, 0, result.length, 1); synchronized (UiApplication.getEventLock()) { imageOutputField.setBitmap(bitmap); } else if (contentType.startsWith("text/")) { String strResult = new String(result); synchronized (UiApplication.getEventLock()) { textOutputField.setText(strResult); } else { synchronized (UiApplication.getEventLock()) { Dialog.alert("Unknown content type: " + contentType); }
34
public void requestFailed(final String message) { UiApplication.getUiApplication().invokeLater (new Runnable() { public void run() { Dialog.alert("Request failed. Reason: " + message); } }); }
35
.... and we’ve skipped some gory detail for now
36
See: http://beginningblackberry.appspot.com http://beginningblackberry.appspot.com Enter some words in the form – apple berry cinnamon doughnut returns doughnut cinnamon berry apple
37
What’s in the web application? Form img/apress_logo.png
38
- defines a form that the browser uses to send data to the web application - send data to the ULR “/” (the base URL ) - using HTTP POST
39
defines the text box gives it the name “content” the application expects the content to be something like: content = ONE+TWO+THREE “+” interpreted as a space
40
defines the “Go” button as invoking POST indicates end of the form
41
private byte[] postData; - to pass the POST body to the dispatcher public HttpRequestDispatcher(String url, String method, NetworkingMainScreen screen, byte[] postData){ this.url = url; this.method = method; this.screen = screen; this.postData = postData; } - constructor to initialize
42
if (method.equals(“POST”) && postData != null){ connection.setRequestProperty(“Content-type”, “application/x-www-form-urlencoded”); OutputStream requestOutput = connection.openOutputStream(); requestOutput.write(postData); requestOutput.close(); }
43
private void postURL(){ String postString = postDataField.getText(); URLEncodedPostData encodedData = new URLEncodedPostData(null, false); encodedData.append(“content”, postString); HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField.getText(), “ POST”, this, encodedData.getBytes()); dispatcher.start(); }
45
let’s look at the code
46
explanation ... and let’s look at the code...
47
private void socketGet() { SocketConnector connector = new SocketConnector(urlField.getText(), this); connector.start(); } private void postURL() { String postString = postDataField.getText(); URLEncodedPostData encodedData = new URLEncodedPostData(null, false); encodedData.append("content", postString); HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField .getText(), "POST", this, encodedData.getBytes()); dispatcher.start(); }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.