যদিও সাইমন ক্রসের উত্তর গৃহীত হয়েছে এবং সঠিক, তবুও আমি ভেবেছিলাম যে কী করা দরকার তা একটি উদাহরণ (অ্যান্ড্রয়েড) দিয়ে আমি এটিকে কিছুটা গুটিয়ে দেব। আমি এটিকে যতটা পারি সাধারণভাবে রাখব এবং কেবলমাত্র প্রশ্নে ফোকাস করব। ব্যক্তিগতভাবে আমি একটি ডাটাবেসে জিনিসগুলি সঞ্চয় করে ফেলেছিলাম যাতে লোডিংটি মসৃণ ছিল, তবে এর জন্য একটি কর্সরএডাপ্টার এবং কন্টেন্টপ্রোভাইডার দরকার যা এখানে কিছুটা সুযোগের বাইরে নেই।
আমি নিজে এসে এখানে এসে ভাবলাম, এখন কি ?!
সমস্যাটি
শুধু user3594351 , আমি বন্ধু ডেটা ঠাহর হয় ফাঁকা ছিল। আমি ফ্রেন্ডপিকার ফ্রেগমেন্ট ব্যবহার করে এটি খুঁজে পেয়েছি। তিন মাস আগে কী কাজ করেছে, এখন আর কাজ করে না। এমনকি ফেসবুকের উদাহরণও ভেঙে যায়। সুতরাং আমার সমস্যাটি ছিল 'আমি কীভাবে হাতছাড়া করে ফ্রেন্ডপিকারফ্রেগমেন্ট তৈরি করব?
কি কাজ না
সাইমন ক্রস থেকে বিকল্প # 1 বিকল্পটিতে বন্ধুদের আমন্ত্রণ জানাতে যথেষ্ট শক্তিশালী ছিল না। সাইমন ক্রস অনুরোধ ডায়ালগেরও প্রস্তাব দিয়েছিলেন তবে এটি একবারে কেবল পাঁচটি অনুরোধের অনুমতি দেবে। অনুরোধ কথোপকথনটি কোনও ফেসবুকের লগ ইন হওয়া সেশনে একই বন্ধুদের দেখায়। দরকারী নয়।
কি কাজ (সংক্ষিপ্তসার)
কিছু কঠোর পরিশ্রমের সাথে বিকল্প # 2। আপনি অবশ্যই ফেসবুকের নতুন নিয়মগুলি পূরণ করেছেন তা নিশ্চিত করতে হবে: ১) আপনি একটি খেলা ২) আপনার কাছে একটি ক্যানভাস অ্যাপ রয়েছে (ওয়েব উপস্থিতি) ৩) আপনার অ্যাপটি ফেসবুকের সাথে নিবন্ধিত হয়েছে। এটি সমস্ত সেটিংসের অধীনে ফেসবুক বিকাশকারী ওয়েবসাইটে করা হয়েছে ।
আমার অ্যাপ্লিকেশনের অভ্যন্তরে বন্ধু চয়নকারীকে অনুকরণ করতে আমি নিম্নলিখিতগুলি করেছি:
- একটি ট্যাব ক্রিয়াকলাপ তৈরি করুন যা দুটি টুকরোগুলি দেখায়। প্রতিটি খণ্ড একটি তালিকা দেখায়। উপলভ্য বন্ধুর ( / আমি / বন্ধুরা ) এবং অন্য আমন্ত্রিত বন্ধুদের ( / আমি / আমন্ত্রিত_ বন্ধুরা ) জন্য একটি টুকরা । উভয় ট্যাব রেন্ডার করতে একই টুকরা কোড ব্যবহার করুন।
- একটি অ্যাসিঙ্কটাস্ক তৈরি করুন যা ফেসবুক থেকে বন্ধুর ডেটা পাবে। সেই ডেটাটি লোড হয়ে গেলে অ্যাডাপ্টারে টস করুন যা স্ক্রিনে মানগুলি রেন্ডার করবে।
বিস্তারিত
অ্যাসিঙ্কটাস্ক
private class DownloadFacebookFriendsTask extends AsyncTask<FacebookFriend.Type, Boolean, Boolean> {
private final String TAG = DownloadFacebookFriendsTask.class.getSimpleName();
GraphObject graphObject;
ArrayList<FacebookFriend> myList = new ArrayList<FacebookFriend>();
@Override
protected Boolean doInBackground(FacebookFriend.Type... pickType) {
//
// Determine Type
//
String facebookRequest;
if (pickType[0] == FacebookFriend.Type.AVAILABLE) {
facebookRequest = "/me/friends";
} else {
facebookRequest = "/me/invitable_friends";
}
//
// Launch Facebook request and WAIT.
//
new Request(
Session.getActiveSession(),
facebookRequest,
null,
HttpMethod.GET,
new Request.Callback() {
public void onCompleted(Response response) {
FacebookRequestError error = response.getError();
if (error != null && response != null) {
Log.e(TAG, error.toString());
} else {
graphObject = response.getGraphObject();
}
}
}
).executeAndWait();
//
// Process Facebook response
//
//
if (graphObject == null) {
return false;
}
int numberOfRecords = 0;
JSONArray dataArray = (JSONArray) graphObject.getProperty("data");
if (dataArray.length() > 0) {
// Ensure the user has at least one friend ...
for (int i = 0; i < dataArray.length(); i++) {
JSONObject jsonObject = dataArray.optJSONObject(i);
FacebookFriend facebookFriend = new FacebookFriend(jsonObject, pickType[0]);
if (facebookFriend.isValid()) {
numberOfRecords++;
myList.add(facebookFriend);
}
}
}
// Make sure there are records to process
if (numberOfRecords > 0){
return true;
} else {
return false;
}
}
@Override
protected void onProgressUpdate(Boolean... booleans) {
// No need to update this, wait until the whole thread finishes.
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
/*
User the array "myList" to create the adapter which will control showing items in the list.
*/
} else {
Log.i(TAG, "Facebook Thread unable to Get/Parse friend data. Type = " + pickType);
}
}
}
আমি তৈরি ফেসবুক ফ্রেন্ড ক্লাস
public class FacebookFriend {
String facebookId;
String name;
String pictureUrl;
boolean invitable;
boolean available;
boolean isValid;
public enum Type {AVAILABLE, INVITABLE};
public FacebookFriend(JSONObject jsonObject, Type type) {
//
//Parse the Facebook Data from the JSON object.
//
try {
if (type == Type.INVITABLE) {
//parse /me/invitable_friend
this.facebookId = jsonObject.getString("id");
this.name = jsonObject.getString("name");
// Handle the picture data.
JSONObject pictureJsonObject = jsonObject.getJSONObject("picture").getJSONObject("data");
boolean isSilhouette = pictureJsonObject.getBoolean("is_silhouette");
if (!isSilhouette) {
this.pictureUrl = pictureJsonObject.getString("url");
} else {
this.pictureUrl = "";
}
this.invitable = true;
} else {
// Parse /me/friends
this.facebookId = jsonObject.getString("id");
this.name = jsonObject.getString("name");
this.available = true;
this.pictureUrl = "";
}
isValid = true;
} catch (JSONException e) {
Log.w("#", "Warnings - unable to process Facebook JSON: " + e.getLocalizedMessage());
}
}
}