14 Şubat 2013 Perşembe

Twitter'da atılan son tweet'i Gösteren Android JSON Parsing Uygulaması

Twitter'da bir kullanıcının attığı bir tweet'i android uygulamamızda göstermek için ne yapmamız gerekiyor.

Ö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.



  1. public class MainActivity extends Activity {
  2.         TextView sonuc;
  3.         HttpClient client;
  4.         JSONObject json;
  5. // 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 .
  6.         final static String URL = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=";
  7.         @Override
  8.         protected void onCreate(Bundle savedInstanceState) {
  9.                 super.onCreate(savedInstanceState);
  10.                 setContentView(R.layout.activity_main);
  11.                 sonuc = (TextView) findViewById(R.id.tvHttp);
  12.                 client = new DefaultHttpClient();
  13.                
  14. // 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.
  15.                 new Okuma().execute("text");
  16.         }
  17.         public JSONObject lastTweet(String username)
  18.                         throws ClientProtocolException, IOException, JSONException {
  19. //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
  20.                 StringBuilder url = new StringBuilder(URL);
  21. //Tercih edilen username'i url nesnemizin sonuna ekledik.
  22.                 url.append(username);
  23. //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
  24.                 HttpGet get = new HttpGet(url.toString());
  25.                 HttpResponse r = client.execute(get);
  26.                
  27. //status adında bir integer oluşturduk ve isteğimizin nasıl bir değer döndüreceğine baktık
  28.                 int status = r.getStatusLine().getStatusCode();
  29. //android api'den öğrendiğimize göre 200  StatusLine'ın düzgün olarak çalıştığında döndüreceği status değeriymiş.
  30.                 if (status == 200) {
  31.                 //bağlantı çalıştığı zaman adresteki içeriği alacak objelerimizi yarattık.
  32.                         HttpEntity e = r.getEntity();
  33.              //içeriği String tipine çevirdik
  34.                         String data = EntityUtils.toString(e);
  35.                         //Http adresinden aldığımız içeriği bir JSONArray'ine çevirdik.
  36.                         JSONArray timeline = new JSONArray(data);
  37.                         //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
  38.                         JSONObject last = timeline.getJSONObject(0);
  39.                         return last;
  40.                 } else {
  41.                         //aksi halde ekrana bir hata mesajı yazdırdık.
  42.                         Toast.makeText(MainActivity.this"bir hata olustu",
  43.                                         Toast.LENGTH_SHORT).show();
  44.                         return null;
  45.                 }
  46.         }
  47. //Okuma sınıfımızıarkaplanda işlem yapmamız izin veren java sınıfı AsyncTask sınıfından extend ettik.
  48.         public class Okuma extends AsyncTask<StringInteger, String> {
  49.                 @Override
  50.                 protected String doInBackground(String... params) {
  51.                         try {
  52.                                 //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
  53.                                 json = lastTweet("rodrane");
  54.                                 return json.getString(params[0]);
  55.                         } catch (ClientProtocolException e) {
  56.                                 e.printStackTrace();
  57.                         } catch (IOException e) {
  58.                                 e.printStackTrace();
  59.                         } catch (JSONException e) {
  60.                                 e.printStackTrace();
  61.                         }
  62.                         return null;
  63.                 }
  64.                 @Override
  65.                 protected void onPostExecute(String sontweet) {
  66.                 //ortaya çıkan kodu sonuc adında oluşturduğumuz TextView nesnesine gönderdik.
  67.                         sonuc.setText(sontweet);
  68.                 }
  69.         }
  70. }

activity_main.xml dosyamız da şu şekilde olacak.


  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
  2. <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent">
  3. <TextView android:id="@+id/tvHttp" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="Loading Data"/>
  4. </ScrollView>
  5. </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.


  1. <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