2013-05-14 7 views
17

Chcę pobrać dane z serwera WWW w aplikacji na Androida i nie wiem od czego zacząć. Czy powinienem korzystać z usług internetowych?Jak mogę pobrać dane z serwera WWW w aplikacji na Androida?

+1

ów pytanie bardzo ogólne, ale napisali odpowiedź, która zawiera linki do trzech ćwiczeń obejmujących od początku do końca dokładnie ten proces – o0rebelious0o

+1

Hmm, chodziło o zadać pytanie z dokładnym brzmieniem. Wydaje mi się jasne i użyteczne! –

+2

"zamknięte, ponieważ nie jest to prawdziwe pytanie Charlesa, Bill the Lizard" ta strona internetowa staje się coraz bardziej absurdalna ... – AlwaysConfused

Odpowiedz

24

Polecam te tutoriale:

Connect android with PHP and MySql, JSON in android i PHP and MySQLi

Kiedyś te tutoriale i udało się uzyskać to, co staramy się robić pracuje bez większych trudności .

Pomiędzy nimi opisują każdy krok, jak wykonać to, czego próbujesz na każdym etapie, aplikację na Androida, bazę danych i stronę serwera WWW oraz zawierają dodatkowe informacje na temat tego, co możesz zrobić, aby przetworzyć i użyć otrzymanego informacje

Jedyna rzecz, którą chciałbym dodać to, że samouczek Connect android z PHP i MySql wykorzystuje mysql_ w php, który jest przestarzały. Znacznie lepiej jest używać MySqli, dlatego dodałem trzeci link.

Podstawowy zarys tego, co chcesz zrobić to:

1) w aplikacji na Androida złożyć wniosek do skryptu serwer PHP przy użyciu klasy tak:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.util.List; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.utils.URLEncodedUtils; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.util.Log; 

public class JSONParser { 

    // Response from the HTTP Request 
    static InputStream httpResponseStream = null; 
    // JSON Response String to create JSON Object 
    static String jsonString = ""; 

    // Method to issue HTTP request, parse JSON result and return JSON Object 
    public JSONObject makeHttpRequest(String url, String method, 
      List<NameValuePair> params) { 

     try { 
      // get a Http client 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 

      // If required HTTP method is POST 
      if (method == "POST") { 
       // Create a Http POST object 
       HttpPost httpPost = new HttpPost(url); 
       // Encode the passed parameters into the Http request 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 
       // Execute the request and fetch Http response 
       HttpResponse httpResponse = httpClient.execute(httpPost); 
       // Extract the result from the response 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       // Open the result as an input stream for parsing 
       httpResponseStream = httpEntity.getContent(); 
      } 
      // Else if it is GET 
      else if (method == "GET") { 
       // Format the parameters correctly for HTTP transmission 
       String paramString = URLEncodedUtils.format(params, "utf-8"); 
       // Add parameters to url in GET format 
       url += "?" + paramString; 
       // Execute the request 
       HttpGet httpGet = new HttpGet(url); 
       // Execute the request and fetch Http response 
       HttpResponse httpResponse = httpClient.execute(httpGet); 
       // Extract the result from the response 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       // Open the result as an input stream for parsing 
       httpResponseStream = httpEntity.getContent(); 
      } 
      // Catch Possible Exceptions 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      // Create buffered reader for the httpResponceStream 
      BufferedReader httpResponseReader = new BufferedReader(
        new InputStreamReader(httpResponseStream, "iso-8859-1"), 8); 
      // String to hold current line from httpResponseReader 
      String line = null; 
      // Clear jsonString 
      jsonString = ""; 
      // While there is still more response to read 
      while ((line = httpResponseReader.readLine()) != null) { 
       // Add line to jsonString 
       jsonString += (line + "\n"); 
      } 
      // Close Response Stream 
      httpResponseStream.close(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     try { 
      // Create jsonObject from the jsonString and return it 
      return new JSONObject(jsonString); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      // Return null if in error 
      return null; 
     } 
    } 
} 

który obsługuje komunikację , otwiera połączenie i odbiera ciąg JSON, który następnie przetwarza w obiekt JSON.

2) na serwerze php mysqli otworzyć połączenie z bazą danych SQL, uruchomić mysqli-> zapytanie() i zrobić coś jak następuje w wyniku:

if (mysqli_num_rows($result) > 0) { 
     // looping through all results 
     $response["apps"] = array(); 

     while ($row = mysqli_fetch_array($result)) { 

      $apps = array(); 

      $apps["name"] = $row["name"]; 
      $apps["package"] = $row["package"]; 
      $apps["version"] = $row["version"]; 
      $apps["dateversion"] = $row["dateversion"]; 
      $apps["sdkver"] = $row["sdkver"]; 
      $apps["pathroot"] = $row["pathroot"]; 
      $apps["rootname"] = $row["rootname"]; 
      $apps["apkmd5"] = $row["apkmd5"]; 
      $apps["extraapkmd5"] = $row["extraapkmd5"]; 
      $apps["instructionsmd5"] = $row["instructionsmd5"]; 
      $apps["assetsmd5"] = $row["assetsmd5"]; 
      $apps["root"] = $row["root"]; 
      $apps["current"] = $row["current"]; 

      // push single product into final response array 
      array_push($response["apps"], $apps); 
     } 
     // success 
     $response["success"] = 1; 

     // echoing JSON response 
     echo json_encode($response); 

tej iteracji bazy Odpowiedź i koduje go do łańcucha JSON, który jest wysyłany z powrotem do aplikacji na Androida, które mogą go przetworzyć.

Jak stworzyć coś takiego jest wszystko wyjaśnione w tutoriali połączoną

0

To nie bezpośrednio odpowiedzieć na pytanie, ale od ciebie” ve zapytał, od czego zacząć, powinieneś zacząć poprawnie, budując swoje żądania internetowe w AsyncTask. Umożliwi to tworzenie żądań w osobnym wątku i ustawianie danych w interfejsie użytkownika.

AsyncTasks używać puli wątków i kolejki pracy również ułatwiają aktualizację użytkownika postępu. Istnieje kilka dobrych przykładów tutaj: AsyncTask Android example

Powiązane problemy