Android ProgrammingAuf das Bild klicken um zur Haupseite zurück zu keheren.


HTTP

Die Http Library erlaubt mit Web Services zu kommunizieren und Resourcen vom Web herunterzuladen.

Da Netzwerk-Verbindungen langsam und fragil sein können, behandelt diese Library die Anfragen und Antworten im Hintergrund und löst Events aus, wenn eine Aufgabe fertig ist.
Es gibt zwei Http-Beispiele die diese Library veranschaulichen:

Currency Converter englisch und Http Web Services und mehr (mit Lybraries arbeiten) deutsch.

Flickr Viewer  englisch und Http ein komplizierteres Beispiel, Flickr Viewer deutsch.

 

Die Sourcecodes der beiden Beispielprogramme befinden sich in den englischen Tutorials, die Erklärungen auf deutsch in den Deutschen.

List der Types:

HttpClient
HttpRequest
HttpResponse


HttpClient

Das Hauptobjekt der Library. Dieses Objekt kann mehrere Aufgaben simultan behandeln. Sehr wichtig, HttpClient muß als eine Process globale Variable (in Sub Process_Globals) deklariert werden.

Ein typisches Beispiel, einen String herunter zu laden:

Sub Process_Globals
    
Dim hc As HttpClient
End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
    
If FirstTime Then
        hc.Initialize(
"hc")
    
End If
    
Dim req As HttpRequest
    req.InitializeGet(
"http://www.basic4ppc.com/")
    hc.Execute(req,
1)
End Sub

Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
    
Dim resultString As String
    Result = Response.GetString(
"UTF8")
    
'Work with the result
End Sub

Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
    Log(
"Error connecting: " & Reason & " " & StatusCode)
    
If Response <> Null Then
        Log(Response.GetString(
"UTF8"))
        Response.Release
    
End If
End Sub

 

Permissions  /  Erlaubnisse:

android.permission.INTERNET

Events:

ResponseSuccess (Response As HttpResponse, TaskId As Int)
ResponseError (Reason As String, StatusCode As Int, TaskId As Int)

Members:


  Execute (HttpRequest As HttpRequest, TaskId As Int) As Boolean

  ExecuteCredentials (HttpRequest As HttpRequest, TaskId As Int, UserName As String, Password As String) As Boolean

  Initialize (EventName As String)

  InitializeAcceptAll (EventName As String)

  SetHttpParameter (Name As String, Value As Object)

  SetProxy (Host As String, Port As Int, Scheme As String)

Members Erklärungen:

Execute (HttpRequest As HttpRequest, TaskId As Int) As Boolean

Führt die HttpRequest Anfrage asynchron aus. ResponseSuccess oder ResponseError Events werden später ausgelöst.

Wenn eine Anfrage (request) mit dem gleichen TaskId bereits läuft, dann gibt diese Methode False zurück und es wird keine neue Anfrage übermittelt.

ExecuteCredentials (HttpRequest As HttpRequest, TaskId As Int, UserName As String, Password As String) As Boolean

Gleiches Verhalten wie Execute. UserName und Password werden für die Basisauthentifizierung benutzt.

Initialize (EventName As String)

Initialisiert dieses Objekt.
WICHTIG: dieses Objekt muß in Sub Process_Globals deklariert werden.
EventName – Das Prefix das für die ResponseSuccess und ResponseError Events benutzt wird.

InitializeAcceptAll (EventName As String)

Ähnlich wie Initialize, mit einem großen Unterschied. Alle SSL Certificates werden automatisch akzeptiert.
Diese Methode sollte nur für Verbindungen mit einem Server in einem gesicherten Network verwendet werden.

SetHttpParameter (Name As String, Value As Object)

Setzt den Wert des Parameters mit dem gegebenen Namen.

SetProxy (Host As String, Port As Int, Scheme As String)

Setzt den zu benutzenden Proxy für die Verbindung.
Host - Proxy Name oder IP.
Port - Proxy Schnitstelle (port).
Scheme - Schema Name. Gewöhnlich "http".

 


HttpRequest

Hält das Ziel-URL fest und andere Daten die dem Webserver gesandt wurden.
Das ursprüngliche Timeout ist auf 30000 Millisekunden (30 Sekonden) gesetzt.

Events:

None

Members:


  InitializeGet (URL As String)

  InitializePost (URL As String, InputStream As java.io.InputStream, Length As Int)

  InitializePost2 (URL As String, Data() As Byte)

  RemoveHeaders (Name As String)

  SetContentEncoding (Encoding As String)

  SetContentType (ContentType As String)

  SetHeader (Name As String, Value As String)

  Timeout As Int [write only]

Members Erklärungen:

InitializeGet (URL As String)

Initialisiert HttpRequest (Abfrage) und setzt sie als eine HttpGet Methode.

InitializePost (URL As String, InputStream As java.io.InputStream, Length As Int)

Initialisiert HttpRequest (Abfrage) und setzt sie als eine HttpPost Methode.
Der gegebene InputStream wird gelesen und dem Request angefügt.

InitializePost2 (URL As String, Data() As Byte)

Initialisiert HttpRequest (Abfrage) und setzt sie als eine HttpPost Methode.
Das gegebene Datenarray wird dem Request angefügt.

RemoveHeaders (Name As String)

Alle Header mit dem gegebenen Namen löschen.

SetContentEncoding (Encoding As String)

Setzt den Encoding Header des Requests.
Diese Methode darf nur mit Post Requests benutzt werden.

SetContentType (ContentType As String)

Setzt den Mime Header des Requests.
Diese Methode darf nur mit Post Requests benutzt werden.

SetHeader (Name As String, Value As String)

Setzt den Wert des ersten Header mit dem gegebenen Namen. Wenn so ein Header nicht existiert wird ein Neuer hinzugefügt.

Timeout As Int [write only]

Setzt das Request Timeout, in Millisekunden.


HttpResponse

Ein Objekt das die Antworten enthält die vom Server zurück gesandt wurden.
Das Objekt wird in dem ResponseSuccess Event übergeben.
Man kann wählen ob man die Antwort synchron oder asynchron lesen will.
Es ist wichtig dies Objekt freizugeben wenn es nicht mehr gebraucht wird, durch den Aufruf von Release.

Events:

StreamFinish (Success As Boolean, TaskId As Int)

Members:


  ContentEncoding As String [read only]

  ContentLength As Long [read only]

  ContentType As String [read only]

  GetAsynchronously (EventName As String, Output As java.io.OutputStream, CloseOutput As Boolean, TaskId As Int) As Boolean

  GetHeaders As Map

  GetInputStream As InputStreamWrapper

  GetString (DefaultCharset As String) As String

  Release

  StatusCode As Int [read only]

Members Erklärungen:

ContentEncoding As String [read only]

Gibt den Content Encoding Header zurück.

ContentLength As Long [read only]

Gibt den Content Length Header zurück.

ContentType As String [read only]

Gibt den Content Type Header zurück

GetAsynchronously (EventName As String, Output As java.io.OutputStream, CloseOutput As Boolean, TaskId As Int) As Boolean

Liest asynchron die Antwort und schreibt sie in den gegebenen OutputStream.

Wenn eine Anfrage (request) mit dem gleichen TaskId bereits läuft, dann gibt diese Methode False zurück und das Response Objekt wird freigegeben.

Das StreamFinish Event wird ausgelöst sobald die Antwort vollkommen gelesen ist
EventName – Der Subroutine Name der das StreamFinish Event behandelt.
Output – Die Daten vom Server werden in diesen Stream geschrieben.
CloseOutput – Definiert ob man den OutputStream am Ende schließen will oder nicht.
TaskId – Der ID der der Aufgabe (task) zugesetzt ist.
Example:

Sub Http_ResponseSuccess (Response As HttpResponse, TaskId As Int)
    Response.GetAsynchronously(
"ImageResponse", _
        File.OpenOutput(File.DirInternalCache,
"image.jpg", False), True, TaskId)
End Sub

Sub ImageResponse_StreamFinish (Success As Boolean, TaskId As Int)
    
If Success = False Then
        Msgbox(LastException.Message,
"Error")
        
Return
    
End If
    ImageView1.Bitmap = LoadBitmap(File.DirInternalCache,
"image.jpg")
End Sub

GetHeaders As Map

Gibt ein Map Objekt zurück mit den Headers der Antwort.
Jedes Elements besteht aus einem Schlüssel welcher der Header-Name ist und einem Wert der eine Liste ist welche die Werte enthält (einer oder mehrere).
Beispiel:

Dim list1 As List
list1 = response.GetHeaders.Get(
"Set-Cookie")
For i = 0 To list1.Size - 1
    Log(list1.Get(i))
Next

GetInputStream As InputStreamWrapper

Gibt den InputStream zurück den man zum lesen der Antwort benutzen kann.

GetString (DefaultCharset As String) As String

Liest die Antwort und gibt sie in einem String zurück.
Die gegebene Kodierung wird benutzt wenn die Antwort sie nicht explizit definiert.
Beispiel:

Dim result As String
result = HttpResponse1.GetString(
"UTF8")

Release

Gibt die Resourcen, die diesem Objekt zugewiesen wurden, frei.

StatusCode As Int [read only]

Gibt den HttpCode der Antwort zurück.


Top