Bu yıl aldığım ders projelerinden birinde, Android üzerinde göreceli şekilde işleyecek bir twitter istemcisine ihtiyacım vardı. Hazırı kullanmak yerine, üşenmeyip bana yetecek kadarını yazdım.
Şu anda, kullanıcı adına dair bilgileri public api ile gelen json üzerinden parse ediyor. Sonraki aşamalarda oAuth ile devam edebilirim (Bkz: api limitleri).
JSON parse etmek için java’nın standart çözümü yerine gson sınıfını tercih ettim. Çok daha performanslı ve kullanışlı. Gereksiz birçok detayla uğraşmaktan kurtarıyor. Java ile json parse edeceksiniz mutlaka göz atın.
Arayüz için çok fazla detaya girmedim, bir buton, dört textview ve kullanıcı adını almak için edittext ekledim.
Activity sınıfı bileşenlerin erişimini sağlıyor ve butonun tıklama olayını yakalıyor:
[code lang=”java”]public class JSONParseActivity extends Activity {
String username;
TextView name;
TextView frcount;
TextView flcount;
TextView stcount;
TextView lstweet;
Button btn;
EditText edt;
ImageView img;
GetJson getJ;
TwitterUser twUser;
private OnClickListener lstn = new OnClickListener() {
@Override
public void onClick(View v) {
if(!edt.getText().equals("")){
username = edt.getText().toString();
init();
} else {
Toast.makeText(getApplicationContext(), "Bir kullanıcı adı girin", Toast.LENGTH_SHORT).show();
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
name = (TextView)findViewById(R.id.twName);
frcount = (TextView)findViewById(R.id.twFollowing);
flcount = (TextView)findViewById(R.id.twFollowers);
stcount = (TextView)findViewById(R.id.twStCount);
edt = (EditText)findViewById(R.id.username);
btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(lstn);
}
public void init() {
getJ = new GetJson(username);
twUser = getJ.parser();
name.setText(name.getText().toString()+": "+twUser.getName());
frcount.setText(frcount.getText()+": "+twUser.getFriends_count());
flcount.setText(flcount.getText()+": "+twUser.getFollowers_count());
stcount.setText(stcount.getText()+": "+twUser.getStatuses_count());
}
}
HttpGet ile Twitter’dan json getiren ve object olarak parse eden (gson kullanarak) GetJson sınıfı:
[code lang=”java”]public class GetJson {
private String username;
StringBuilder jsonBuilder;
TwitterUser twUser;
public GetJson(String username) {
this.username = username;
}
public TwitterUser parser() {
this.getTwitterUser();
GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
try {
JSONObject jsonObj = new JSONObject(jsonBuilder.toString());
twUser = gson.fromJson(jsonObj.toString(), TwitterUser.class);
} catch (JSONException e) {
//logging
e.printStackTrace();
}
return twUser;
}
private void getTwitterUser() {
jsonBuilder = new StringBuilder();
String line;
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://twitter.com/users/show.json?screen_name="+this.username+"&include_entities=false");
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
while ((line = reader.readLine()) != null) {
jsonBuilder.append(line);
}
} else {
//logging
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[/code]Son olarak da gson’ın json’ı parse ederken ihtiyaç duyduğu sınıf yapısı:
[code lang=”java”]public class TwitterUser {
private String username;
private String name;
private String statuses_count;
private String friends_count;
private String followers_count;
private String profile_image_url_https;
//getters & setters
}
Not: Gson gelen bilgileri birebir sınıf üzerine yerleştiriyor.
Gson sınıfı, Play Framework’le birlikte geldiği için bu projeye özel bir jar eklemesi yapmadım (Eclipse dahil etti). Gson kullanacaksanız son sürümü yukarıdaki linki kullanarak edinebilirsiniz.
Son olarak, uygulamayı tam çalışır hale getirmek için internet erişim iznini manifest’e eklemeyi unutmayın.
Merhaba, yazı gayet açıklayıcı olmuş. Çorbada benimde tuzum olsun 🙂
İnternet erişim izni için, manifest.xml dosyanıza:
uses -permission=”android.permission.INTERNET”
eklemelisiniz.
Merhaba, get ve set methodlarini yazabilir misin?
bide layoutun icini yazabilir misin sana zahmet?
@husnu;
get ve set’i generate eden bir ide ile halledebilirsin. Layoutun içinde de hiçbir düzenleme yok, sürükle bırak dizaynı.
Hocam eline sağlık. projeyi gönderebilme şansın varmı acaba?