Я успешно вошел в facebook без каких-либо проблем. После получения данных из facebook мне нужно перенести эти данные в другое действие, как только я успешно вошел в систему. Вот мой код.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
loginButton = (LoginButton) findViewById(R.id.login_button);
signUpWithFaceBook = (Button) findViewById(R.id.signUpUsingFaceBook);
callbackManager = CallbackManager.Factory.create();
signUpWithFaceBook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loginButton.performClick();
}
});
loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday", "user_friends"));
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("onSuccess");
token = loginResult.getAccessToken().getToken();
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest
.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.d("response", response.toString());
getData(object);
}
});
//Graph API
Bundle parameter = new Bundle();
parameter.putString("fields", "id,first_name,last_name");
request.setParameters(parameter);
request.executeAsync();
try {
Intent intent = new Intent();
intent.putExtra("firstName", firstname);
intent.putExtra("lastName", lastname);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
А в onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
И, Этот код старый, все еще такой же способ интеграции FB в Android?
Свяжите свои данные в Bundle и поместите их в putExtras для намерения.
Вы получаете Bundle в новом Activity.
While put data into
Bundle.
Bundle bundle = new Bundle();
bundle.putString("firstName",firstname);
bundle.putString("lastName",lastname);
Intent i = new Intent(SignUpActivity.this,RegistrationActivity.class);
i.putExtras(bundle);
startActivity(i);
Get
Bundleat yourRegistrationActivity.java
Bundle b = getIntent().getExtras();
String fName = b.getString("firstName");
String lName = b.getString("lastName");
Also your
putExtras()code ingetData()after yourGraphRequestCall
Обновлять
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("onSuccess");
token = loginResult.getAccessToken().getToken();
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest
.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.d("response", response.toString());
getData(object);
try {
Bundle bundle = new Bundle();
bundle.putString("firstName",object.getString("first_name"));
bundle.putString("lastName",object.getString("lastName"));
Intent i = new Intent(SignUpActivity.this,RegistrationActivity.class);
i.putExtras(bundle);
startActivity(i);
} catch (Exception e) {
e.printStackTrace();
}
}
});
//Graph API
Bundle parameter = new Bundle();
parameter.putString("fields", "id,first_name,last_name");
request.setParameters(parameter);
request.executeAsync();
}
}
Он несет нулевые данные. Я сделал degub и увидел данные, которые показывают null `Bundle bundle = new Bundle (); bundle.putString ("firstName", имя); bundle.putString ("lastName", фамилия); Intent i = новое намерение (SignUpActivity.this, RegistrationActivity.class); i.putExtras (комплект); startActivity (я); `
Ваш ответ правильный. Я получаю данные сейчас, но изначально, когда я установил приложение и вошел в систему с помощью facebook, я не получаю никаких данных. потому что bundle.putString("firstName",firstname); запущен и изначально равен нулю. Затем он запускает firstname = object.getString("first_name"); в getData (), где я получаю свои данные из FB. Любое решение для этого.
Теперь я получаю данные в правильной последовательности, но не могу начать другое действие.
Kabari Я отслеживаю проблему по отладке. В своем ответе вы изменили last_name на lastName. что дает исключение json lastName not found. в любом случае спасибо за ответ. моя проблема решена.
Ого, извините за мою ошибку.
Попробуй это
GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
String userID = (String) object.get("id");
String firstname = (String) object.get("first_name");
String lastname = (String) object.get("last_name");
Intent intent = new Intent(MainActivity.this,NextActivity.class); //MainActivity is current activity & NextActivity is any activity that is destination activity.
intent.putExtra("firstName", firstname);
intent.putExtra("lastName", lastname);
startActivity(intent);
} catch (JSONException|Exception e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,first_name,last_name");
request.setParameters(parameters);
request.executeAsync();
Вы начали деятельность, но собираетесь заниматься какой-либо деятельностью. Я не знаю, что здесь происходит. Я начинающий
@sugiz, извини, я не могу тебя достать. Я поместил ваш код намерения в метод onCompleted для graphrequest. Bcoz graphrequest выполняет async, поэтому при запуске действия в одно и то же время значение данных остается нулевым.
Есть проблема, как начать другое действие, вы можете проверить здесь developer.android.com/training/basics/firstapp/… и просто изменить свое намерение на Intent i = new Intent(Mainactivity.this,NextActivity.class) ...
Вызовите свой метод startactivity после метода запроса графа
onCompleted.