2015-06-23 1 views
0

В настоящее время я разрабатываю Android-приложение с Parse. Одна часть моего приложения - это компонент социального входа. Я могу начать диалог входа в facebook просто отлично и использовать его с моими учетными данными на facebook. Как только Facebook Login заканчивается, ничего не происходит. Я посмотрел в отладчике, и я узнал, что varaible ParseUser по-прежнему недействителен после входа в Facebook. Это мой код класса.Facebook Войти с Parse возвращает ParseUser == null после входа в Facebook

import android.app.Dialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.myapp.myapp_app.NavigationDraw; 
import com.myapp.myapp_app.R; 
import com.myapp.myapp_app.Welcome; 
import com.facebook.AccessToken; 
import com.facebook.GraphRequest; 
import com.facebook.GraphResponse; 
import com.parse.LogInCallback; 
import com.parse.Parse; 
import com.parse.ParseException; 
import com.parse.ParseFacebookUtils; 
import com.parse.ParseUser; 
import com.parse.SaveCallback; 
import com.parse.SignUpCallback; 

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

import java.util.Arrays; 
import java.util.List; 

public class LoginSignupActivity extends Fragment { 

private static final String ARG_SECTION_NUMBER = "section_number"; 

public static LoginSignupActivity newInstance(int sectionNumber) { 
    LoginSignupActivity logsign = new LoginSignupActivity(); 
    Bundle args = new Bundle(); 
    args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
    return logsign; 
} 

private Dialog progressDialog; 

//Facebook-Login 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    ParseFacebookUtils.onActivityResult(requestCode, resultCode, data); 
} 
Button loginbutton; 
Button signup; 
Button facebookloginbutton; 
String usernametxt; 
String passwordtxt; 
EditText password; 
EditText username; 
ParseUser user = new ParseUser(); 


public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    View rootView = inflater.inflate(R.layout.loginsignup, container, false); 

    username = (EditText) rootView.findViewById(R.id.username); 
    password = (EditText) rootView.findViewById(R.id.password); 

    loginbutton = (Button) rootView.findViewById(R.id.login); 
    signup = (Button) rootView.findViewById(R.id.signup); 
    facebookloginbutton = (Button) rootView.findViewById(R.id.facebook_login); 

    loginbutton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 

      usernametxt = username.getText().toString(); 
      passwordtxt = password.getText().toString(); 

      ParseUser.logInInBackground(usernametxt, passwordtxt, 
        new LogInCallback() { 
         public void done(ParseUser user, ParseException e) { 
          if (user != null) { 
           // Fragmentwechsel 
           final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
           ft.replace(R.id.container, new Welcome(), "NewFragmentTag"); 
           ft.commit(); 
          } else { 

          } 
         } 
        }); 
     } 
    }); 
    signup.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      // Fragmentwechsel 
      final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.container, new SignupActivity(), "NewFragmentTag"); 
      ft.addToBackStack(null); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
      ft.commit(); 
     } 
    }); 

    facebookloginbutton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      List<String> permissions = Arrays.asList("public_profile", "email"); 

      ParseFacebookUtils.logInWithReadPermissionsInBackground(getActivity(), permissions, new LogInCallback() { 
       @Override 
       public void done(ParseUser user, ParseException err) { 
        if (user == null) { 
         Log.d("MyApp", "Uh oh. The user cancelled the Facebook login."); 
        } else if (user.isNew()) { 
         Log.d("MyApp", "User signed up and logged in through Facebook!"); 
         showUserProfile(); 
        } else { 
         Log.d("MyApp", "User logged in through Facebook!"); 
         showUserProfile(); 
        } 
       } 
      }); 
     } 
    }); 

    return rootView; 
} 

private void createFacebookUser() { 
    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), 
      new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) { 
        if (jsonObject != null) { 
         JSONObject userProfile = new JSONObject(); 

         try { 
          user.put("facebookId", jsonObject.getLong("id")); 
          user.setUsername(jsonObject.getString("name")); 

          if (jsonObject.getString("email") != null) 
           user.setEmail(jsonObject.getString("email")); 

          user.signUpInBackground(new SignUpCallback() { 
           public void done(ParseException e) { 
            if (e == null) { 
             // Fragmentwechsel 
             final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
             ft.replace(R.id.container, new Welcome(), "NewFragmentTag"); 
             ft.commit(); 
             // Infoanzeige, dass Anmeldung erfolgreich war 
             Toast.makeText(getActivity().getApplicationContext(), 
               getResources().getString(R.string.signup_success), 
               Toast.LENGTH_LONG).show(); 

            } else { 
             Toast.makeText(getActivity().getApplicationContext(), 
               getResources().getString(R.string.error), 
               Toast.LENGTH_LONG).show(); 
            } 
           } 
          }); 

          // Show the user info 
         } catch (JSONException e) { 
          Log.d(ParseApplication.TAG, 
            "Error parsing returned user data. " + e); 
         } 
        } else if (graphResponse.getError() != null) { 
         switch (graphResponse.getError().getCategory()) { 
          case LOGIN_RECOVERABLE: 
           Log.d(ParseApplication.TAG, 
             "Authentication error: " + graphResponse.getError()); 
           break; 

          case TRANSIENT: 
           Log.d(ParseApplication.TAG, 
             "Transient error. Try again. " + graphResponse.getError()); 
           break; 

          case OTHER: 
           Log.d(ParseApplication.TAG, 
             "Some other error: " + graphResponse.getError()); 
           break; 
         } 
        } 
       } 
      }); 
    request.executeAsync(); 
} 

private void showUserProfile(){ 
    final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.container, new TestProfile(), "NewFragmentTag"); 
    ft.addToBackStack(null); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.commit(); 
    } 
} 

Я также сделал все, что было предложено справочниками facebook и parse для настройки входа.

Может ли кто-нибудь мне помочь?

Благодарим за помощь!

+1

я нашел такую ​​же проблему, но не любое решение было найдено .. эта проблема стоит перед после обновления фейсбук. В моем решении простой логин с facebook, а затем войдите с синтаксисом. – Destro

ответ

Смежные вопросы