Öncelikle api.twitter.com/1/statuses/user_timeline.json?screen_name=rodrane adresinden rodrane adlı twitter adresimin json görüntüsüne bakalım.
tahminim sizde benim gibi karışık bir ekran görüyorsunuz öncelikle olup biteni daha iyi anlamak için
http://json.parser.online.fr/ adresine gidip json da gördüklerimizi buraya kopyalayalım.
- "created_at":"Wed Jan 30 11:20:19 +0000 2013",
- "id":296578584888373248,
- "id_str":"296578584888373248",
- "text":"\"Twitterda atılan son tweet'i JSON ile çeken Android Uygulaması",
- "source":"web",
- "truncated":false,
- "in_reply_to_status_id":null,
- "in_reply_to_status_id_str":null,
- "in_reply_to_user_id":null,
- "in_reply_to_user_id_str":null,
- "in_reply_to_screen_name":null,
- "user":{},
- "geo":null,
- "coordinates":null,
- "place":null,
- "contributors":null,
- "retweet_count":0,
- "favorited":false,
- "retweeted":false
Parsing işlemi tamamlandığında karşımıza ilk kısımda tipi ismi kısımda da değeri olan bir tablo çıkıyor.Bizim istediğimiz kısım olan son atılan tweet'i text adlı kısmın tuttuğunu görüyoruz.
Şimdi bu text kısmını Android uygulamamızda nasıl çekeciğimize bakalım.
- public class MainActivity extends Activity {
- TextView sonuc;
- HttpClient client;
- JSONObject json;
- // istenilen kullanıcıya göre sonuna adını yazıp işlem yapabileceğimiz değişmeyen bir string değişkeni tanımladık .
- final static String URL = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- sonuc = (TextView) findViewById(R.id.tvHttp);
- client = new DefaultHttpClient();
- // arkaplanda işlem yapmamızı sağlayacak olan Okuma adındaki inner sınıfımızdan bir nesne türettik.Bu nesneye de execute methodu ile jsonda tweet'i görmemiz sağlayan text kısmını parametre olarak girdik.
- new Okuma().execute("text");
- }
- public JSONObject lastTweet(String username)
- throws ClientProtocolException, IOException, JSONException {
- //url adında bir StringBuilder nesnesi yarattık ve URL değişkenini parametre olarak girdik.Bu sayede URL değişkenimizin sonuna username'i ekleyebileceğiz
- StringBuilder url = new StringBuilder(URL);
- //Tercih edilen username'i url nesnemizin sonuna ekledik.
- url.append(username);
- //url değişkenimiz bir http adresi olarak görüp verileri çekmemiz sağlayan HttpGet sınıfından get adında bir obje yarattık ve gelen adres bilgisini toString methodu ile String değişkenine çevirdik
- HttpGet get = new HttpGet(url.toString());
- HttpResponse r = client.execute(get);
- //status adında bir integer oluşturduk ve isteğimizin nasıl bir değer döndüreceğine baktık
- int status = r.getStatusLine().getStatusCode();
- //android api'den öğrendiğimize göre 200 StatusLine'ın düzgün olarak çalıştığında döndüreceği status değeriymiş.
- if (status == 200) {
- //bağlantı çalıştığı zaman adresteki içeriği alacak objelerimizi yarattık.
- HttpEntity e = r.getEntity();
- //içeriği String tipine çevirdik
- String data = EntityUtils.toString(e);
- //Http adresinden aldığımız içeriği bir JSONArray'ine çevirdik.
- JSONArray timeline = new JSONArray(data);
- //JsonArray'imizin son elemanını aldık JSON sayfamızda bilgilerin aşağıdan yukarıya olduğunu kabul edersek aslında Array'in ilk (0'ıncı) elemanı son tweet'imiz oluyor
- JSONObject last = timeline.getJSONObject(0);
- return last;
- } else {
- //aksi halde ekrana bir hata mesajı yazdırdık.
- Toast.makeText(MainActivity.this, "bir hata olustu",
- Toast.LENGTH_SHORT).show();
- return null;
- }
- }
- //Okuma sınıfımızıarkaplanda işlem yapmamız izin veren java sınıfı AsyncTask sınıfından extend ettik.
- public class Okuma extends AsyncTask<String, Integer, String> {
- @Override
- protected String doInBackground(String... params) {
- try {
- //yukarıda tanımladıdğımız lastTweet methoduna rodrane kullanıcısını gönderdik ve oluşabilecek Bağlantı , Input/Output ve JSON hatalarına karşı kodumuzu bir try catch blokuna aldık
- json = lastTweet("rodrane");
- return json.getString(params[0]);
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (JSONException e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- protected void onPostExecute(String sontweet) {
- //ortaya çıkan kodu sonuc adında oluşturduğumuz TextView nesnesine gönderdik.
- sonuc.setText(sontweet);
- }
- }
- }
activity_main.xml dosyamız da şu şekilde olacak.
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
- <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent">
- <TextView android:id="@+id/tvHttp" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="Loading Data"/>
- </ScrollView>
- </LinearLayout>
Son olarak AndroidManifest.xml dosyasından uygulamanın Internet'e girme yetkisini vermemiz gerekiyor.Aşağıdaki Satırı <uses-sdk şeklinde başlayan satırın hemen altına yazdığımızda işlem tamamdır.
- <uses-permission android:name="android.permission.INTERNET"/>
http://dl.dropbox.com/u/31223384/Android%20Projeler/TwitterJSON.zip
Adresinden projenin çalışan bir kopyasını indirebilirsiniz.
Kolay Gelsin..
Hiç yorum yok:
Yorum Gönder