हालांकि साइमन क्रॉस का जवाब स्वीकार और सही है, मैंने सोचा कि मुझे इसका एक उदाहरण (एंड्रॉइड) के साथ थोड़ा गोमांस करना होगा, जिसे करने की आवश्यकता है। मैं इसे सामान्य रूप में रखूंगा और केवल प्रश्न पर ध्यान केंद्रित कर सकता हूं। व्यक्तिगत रूप से मैं एक डेटाबेस में चीजों को संग्रहीत करता हूं, ताकि लोडिंग सुचारू हो, लेकिन इसके लिए एक CursorAdapter और ContentProvider की आवश्यकता होती है, जो यहां से थोड़ा बाहर है।
मैं खुद यहाँ आया और फिर सोचा, अब क्या ?!
समस्या
User3594351 की तरह , मैं मित्र को सूचित कर रहा था डेटा रिक्त था। मुझे यह पता चला FriendPickerFragment का उपयोग करके। तीन महीने पहले क्या काम किया, अब काम नहीं करता। यहां तक कि फेसबुक के उदाहरण भी टूट गए। तो मेरा मुद्दा था 'मैं हाथ से फ्रेंडपिकफ्रैगमेंट कैसे बनाऊं?
क्या काम नहीं किया
साइमन क्रॉस से विकल्प # 1 ऐप को दोस्तों को आमंत्रित करने के लिए पर्याप्त मजबूत नहीं था। साइमन क्रॉस ने भी अनुरोध डायलॉग की सिफारिश की, लेकिन वह केवल एक बार में पांच अनुरोधों की अनुमति देगा। अनुरोध संवाद भी सत्र में लॉग इन किए गए किसी भी फेसबुक के दौरान समान दोस्त दिखाते हैं। उपयोगी नहीं।
क्या काम किया (सारांश)
विकल्प # 2 कुछ कड़ी मेहनत के साथ। आपको यह सुनिश्चित करना होगा कि आप फेसबुक के नए नियमों को पूरा करें: 1.) आप एक गेम हैं 2.) आपके पास एक कैनवस ऐप (वेब प्रेजेंस) 3.) आपका ऐप फेसबुक के साथ पंजीकृत है। यह सब फेसबुक डेवलपर वेबसाइट पर सेटिंग्स के तहत किया जाता है ।
मेरे app के अंदर हाथ से दोस्त पिकर का अनुकरण करने के लिए मैंने निम्नलिखित किया:
- एक टैब गतिविधि बनाएं जो दो टुकड़े दिखाती है। प्रत्येक टुकड़ा एक सूची दिखाता है। उपलब्ध दोस्त के लिए एक टुकड़ा ( / / मेरे दोस्त ) और दूसरा मित्र के लिए ( / मुझे / आक्रामक / मित्र )। दोनों टैब रेंडर करने के लिए एक ही टुकड़े कोड का उपयोग करें।
- एक AsyncTask बनाएं जिसमें फेसबुक से फ्रेंड डेटा मिलेगा। एक बार जब वह डेटा लोड हो जाता है, तो उसे एडॉप्टर पर टॉस करें, जो स्क्रीन के मानों को प्रस्तुत करेगा।
विवरण
AsynchTask
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);
}
}
}
FacebookFriend वर्ग मैंने बनाया
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());
}
}
}