views:

53

answers:

1

Hi, i want to develop an Android application that will take the content from internet (server) and present it in the application.

(ex. i take the todays weather forecast, put the numbers in SQLite database or .txt file , put the database/txt file on internet server so when i open the application, the app connects&downloads the database via the net and presents me with todays forecast)

If you can references me to some example/video tutorial/book that deals with this issue i will be very thankful!

+1  A: 

What you want to do is developing a rest api that provides data for your android app. E.g. you website has some content that you want use in your app, then you could write a php script that just returns that data in a specific format.

E.g. mysite.net/rest/fetchAllLocations.php?maybe_some_parameters

This would return locations in e.g. json format, here is an example how that looks like:

[{"id":1,"shop_lng":8.5317153930664,"shop_lat":52.024803161621,"shop_zipcode":33602,"shop_city":"Bielefeld","shop_street":"Arndtstra\u00dfe","shop_snumber":3,"shop_name":"M\u00fcller","shop_desc":"Kaufhaus"}]

Here is an example for a rest api request:

http://shoqproject.supervisionbielefeld.de/public/gateway/gateway/get-shops-by-city/city/Bielefeld

So when you have your rest api set up you can deal with receiving that data with your android phone. I use a static method to get this data:

public class JsonGrabber{

public static JSONArray receiveData(){  
    String url = "your url";
    String result = "";

    DefaultHttpClient client = new DefaultHttpClient();
    HttpGet method = new HttpGet(url);
    HttpResponse res = null;

    try {
        res = client.execute(method);
    } catch (ClientProtocolException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    try{
        InputStream is = res.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"));
         StringBuilder sb = new StringBuilder();
         String line = null;
         while ((line = reader.readLine()) != null) {
                 sb.append(line + "\n");
         }
         is.close();
         result = sb.toString();
    }catch(Exception e){
         Log.e("log_tag", "Error converting result "+e.toString());
    }

    JSONArray jArray = null;

    try{
         jArray = new JSONArray(result);
    }catch(JSONException e){
            Log.e("log_tag", "Error parsing data "+e.toString());
    }

    return jArray;
}
}

Well thats all, once you have your data in json format you just have to parse it:

JSONArray test = (JSONArray) JsonGrabber.receiveData()

try { 
    for(int i=0;i<test.length();i++){
    JSONObject json_data = test.getJSONObject(i);
    int id = json_data.getInt("id");
    }
}

The web request should run in another thread, because it can be a time consuming process. So you need to deal with AsyncTask. Here are some resources:

Painless Threading Multithreading for performance Hello Android Tutorial

ArtWorkAD
Thanks ArtWorkAD your post help me alot!
Filip
for anyone in the future that will be dealing with the same problem as me...the method described by ArtWorkAD works perfectly but dont forget to put <uses-permission android:name="android.permission.INTERNET" /> in the AndroidManifest.xml file or else your application wont work...thanks again ArtWorkAD for your answer
Filip