2013-08-25 2 views
2

나는 페이스 북에서 내 친구 상태 업데이트를 읽을 수있는 앱을 쓰고 있습니다. 나는 전체 권한 목록을 가지고있을 때에도 "현재 사용자에 대한 정보를 쿼리하기 위해 액티브 액세스 토큰을 사용해야합니다"오류가 있습니다. 나는 지금 무엇을 해야할지 모르겠다. 고마워! 나는에서 System.out.println에 도착현재 사용자에 대한 정보를 쿼리하려면 활성 액세스 토큰을 사용해야합니다. FQL

package com.facebook.androidhive; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.util.ArrayList; 
import java.util.HashMap; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.SimpleAdapter; 
    import android.widget.TextView; 
import android.widget.Toast; 

import com.facebook.HttpMethod; 
import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
    import com.facebook.android.AsyncFacebookRunner; 
    import com.facebook.android.AsyncFacebookRunner.RequestListener; 
import com.facebook.android.DialogError; 
    import com.facebook.android.Facebook; 
    import com.facebook.android.Facebook.DialogListener; 
     import com.facebook.android.FacebookError; 
import com.facebook.model.GraphObject; 

     public class AndroidFacebookConnectActivity extends ListActivity{ 
JSONArray contacts = null; 
// APP ID 
      private static String APP_ID = "225620300920985"; 
      private String access_token; 
     // Instance of Facebook Class 
       @SuppressWarnings("deprecation") 
     private Facebook facebook = new Facebook(APP_ID); 
     @SuppressWarnings("deprecation") 
      private AsyncFacebookRunner mAsyncRunner; 
     String FILENAME = "AndroidSSO_data"; 
    private SharedPreferences mPrefs; 

// Buttons 


Button btnFbLogin; 
Button btnFbGetProfile; 
Button btnPostToWall; 
Button btnShowAccessTokens; 

private static final String TAG_CONTACTS = "contacts"; 
private static final String TAG_ID = "id"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_EMAIL = "email"; 
private static final String TAG_ADDRESS = "address"; 
private static final String TAG_GENDER = "gender"; 
private static final String TAG_PHONE = "phone"; 
private static final String TAG_PHONE_MOBILE = "mobile"; 
private static final String TAG_PHONE_HOME = "home"; 
private static final String TAG_PHONE_OFFICE = "office"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main1); 

    btnFbLogin = (Button) findViewById(R.id.btn_fblogin); 
    btnFbGetProfile = (Button) findViewById(R.id.btn_get_profile); 
    btnPostToWall = (Button) findViewById(R.id.btn_fb_post_to_wall); 
    btnShowAccessTokens = (Button) findViewById(R.id.btn_show_access_tokens); 
    mAsyncRunner = new AsyncFacebookRunner(facebook); 

    /** 
    * Login button Click event 
    * */ 
    btnFbLogin.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Log.d("Image Button", "button Clicked"); 
      loginToFacebook(); 
     } 
    }); 
    /** 
    * Getting facebook Profile info 
    * */ 
    btnFbGetProfile.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      getProfileInformation(); 
     } 
    }); 

    /** 
    * Posting to Facebook Wall 
    * */ 
    btnPostToWall.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      postToWall(); 
     } 
    }); 

    /** 
    * Showing Access Tokens 
    * */ 
    btnShowAccessTokens.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      showAccessTokens(); 
     } 
    }); 

} 

/** 
* Function to login into facebook 
* */ 
@SuppressWarnings("deprecation") 
public void loginToFacebook() { 

    mPrefs = getPreferences(MODE_PRIVATE); 
    String access_token = mPrefs.getString("access_token", null); 
    long expires = mPrefs.getLong("access_expires", 0); 

    if (access_token != null) { 
     facebook.setAccessToken(access_token); 

     btnFbLogin.setVisibility(View.INVISIBLE); 

     // Making get profile button visible 
     btnFbGetProfile.setVisibility(View.VISIBLE); 

     // Making post to wall visible 
     btnPostToWall.setVisibility(View.VISIBLE); 

     // Making show access tokens button visible 
     btnShowAccessTokens.setVisibility(View.VISIBLE); 

     Log.d("FB Sessions", "" + facebook.isSessionValid()); 
    } 

    if (expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 

    if (!facebook.isSessionValid()) { 
     facebook.authorize(this, 
       new String[] { "user_about_me","user_activities","user_birthday","user_checkins","user_education_history","user_events","user_groups","user_hometown","user_interests","user_likes","user_location","user_notes","user_online_presence","user_photo_video_tags","user_photos","user_relationships","user_relationship_details","user_religion_politics","user_status","user_videos","user_website","user_work_history","email","read_friendlists","read_insights","read_mailbox","read_requests","read_stream","xmpp_login","ads_management","create_event","manage_friendlists","manage_notifications","offline_access","publish_checkins","publish_stream","rsvp_event","sms","publish_actions","manage_pages" }, 
       new DialogListener() { 

        @Override 
        public void onCancel() { 
         // Function to handle cancel event 
        } 

        @Override 
        public void onComplete(Bundle values) { 
         // Function to handle complete event 
         // Edit Preferences and update facebook acess_token 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", 
           facebook.getAccessToken()); 
         editor.putLong("access_expires", 
           facebook.getAccessExpires()); 
         editor.commit(); 

         // Making Login button invisible 
         btnFbLogin.setVisibility(View.INVISIBLE); 

         // Making logout Button visible 
         btnFbGetProfile.setVisibility(View.VISIBLE); 

         // Making post to wall visible 
         btnPostToWall.setVisibility(View.VISIBLE); 

         // Making show access tokens button visible 
         btnShowAccessTokens.setVisibility(View.VISIBLE); 
        } 

        @Override 
        public void onError(DialogError error) { 
         // Function to handle error 

        } 

        @Override 
        public void onFacebookError(FacebookError fberror) { 
         // Function to handle Facebook errors 

        } 

       }); 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 


/** 
* Get Profile information by making request to Facebook Graph API 
* */ 
@SuppressWarnings("deprecation") 
public void getProfileInformation() { 


    String fqlQuery = "SELECT status_id, uid , message FROM status WHERE uid   IN  (SELECT uid2 FROM friend WHERE uid1 = me())"; 
     Bundle params = new Bundle(); 
     params.putString("q", fqlQuery); 
     Session session = Session.getActiveSession(); 



    Request request = new Request(session, 
       "/fql",       
       params,       
       HttpMethod.GET,     
       new Request.Callback(){ 

     @SuppressWarnings("deprecation") 
     public void onCompleted(Response response) { 

       GraphObject graphObject = response.getGraphObject(); 
       System.out.println(response); 

       if (graphObject != null) 
       { 
        if (graphObject.getProperty("data") != null) 
        { 
         try { 
          String arry = graphObject.getProperty("data").toString(); 

          JSONArray jsonNArray = new JSONArray(arry); 

          for (int i = 0; i < jsonNArray.length(); i++) { 

           JSONObject jsonObject = jsonNArray.getJSONObject(i); 

           String name = jsonObject.getString("name"); 
           String uid = jsonObject.getString("uid"); 

           String pic_square = jsonObject.getString("pic_square"); 
           String status = jsonObject.getString("status"); 

           Log.i("Entry", "uid: " + uid + ", name: " + name + ", pic_square: " + pic_square + ", status: " + status); 
          } 

         } catch (JSONException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         }          
        } 
       } 

     }     
}); 
Request.executeBatchAsync(request);     
} 


/** 
* Function to post to facebook wall 
* */ 
public void postToWall() { 
    // post on user's wall. 
    facebook.dialog(this, "feed", new DialogListener() { 

     @Override 
     public void onFacebookError(FacebookError e) { 
     } 

     @Override 
     public void onError(DialogError e) { 
     } 

     @Override 
     public void onComplete(Bundle values) { 
     } 

     @Override 
     public void onCancel() { 
     } 
    }); 

} 

/** 
* Function to show Access Tokens 
* */ 
public void showAccessTokens() { 
    access_token = facebook.getAccessToken(); 

    Toast.makeText(getApplicationContext(), 
      "Access Token: " + access_token, Toast.LENGTH_LONG).show(); 
} 

/** 
* Function to Logout user from Facebook 
* */ 

public void logoutFromFacebook() { 
    mAsyncRunner.logout(this, new RequestListener() { 
     @Override 
     public void onComplete(String response, Object state) { 
      Log.d("Logout from Facebook", response); 
      if (Boolean.parseBoolean(response) == true) { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         // make Login button visible 
         btnFbLogin.setVisibility(View.VISIBLE); 

         // making all remaining buttons invisible 
         btnFbGetProfile.setVisibility(View.INVISIBLE); 
         btnPostToWall.setVisibility(View.INVISIBLE); 
           btnShowAccessTokens.setVisibility(View.INVISIBLE); 
        } 

       }); 

      } 
     } 

     @Override 
     public void onIOException(IOException e, Object state) { 
     } 

     @Override 
     public void onFileNotFoundException(FileNotFoundException e, 
       Object state) { 
     } 

     @Override 
     public void onMalformedURLException(MalformedURLException e, 
       Object state) { 
     } 

     @Override 
     public void onFacebookError(FacebookError e, Object state) { 
     } 
    }); 
    } 

오류 (응답) ;:

{"error":{"type":"OAuthException","message":"An active access token must be used to query information about the current user.","code":2500}} 

고정 :에 의해 시도

 String fqlQuery = "SELECT status_id, uid , message FROM status WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"; 
     Bundle params = new Bundle(); 
     params.putString("q", fqlQuery); 
     params.putString("access_token", facebook.getAccessToken()); 
     Session session = Session.getActiveSession(); 



    Request request = new Request(session, 
       "/fql",       
       params,       
       HttpMethod.GET,     
+0

그런 다음 쿼리 –

+0

에 대한 액세스 토큰을 제공 할 수 있습니까? – user2710900

+0

어떻게 액세스 토큰을 얻을 수 있는지 검색하면 유용한 결과를 얻을 수 있습니다. –

답변

1

이 acesstoken지고 있지만 문제 : 단지 ACESS PARAM 토큰을 포함 이 활동에서는 세션이 유효하지 않으므로 활동에서 세션을 복원하거나 새 세션을 활성화하여이 작업을 완료하십시오.

관련 문제