错误:意外转换为SignInButton。布局标签是Button

时间:2016-12-14 19:00:22

标签: android android-layout

我试图在我的应用中整合google和facebook注册。我得到的错误是:"意外转换为SignInButton。布局标签是Button"

我更愿意在不对布局文件进行太多更改的情况下解决播放问题。我也不想在我的布局中使用普通的登录按钮,因为它看起来不太吸引人。

我的主要活动代码:

   public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener  {

    private LoginButton loginButton;
    private TextView info;
    private CallbackManager callbackManager;
    private String UserID;
    private SQLiteDatabase db,db1,db2;
    private String name;
    private String email;
    public String classtext1,sectiontext1;
    Button sign_in;
    EditText emaileditext,nameedittext;
    private Cursor cursor;
    Boolean does_user_exist = Boolean.FALSE;
    private GoogleApiClient mGoogleApiClient;
    private TextView mStatusTextView;
    private ProgressDialog mProgressDialog;
    private static final String TAG = "SignInActivity";
    private static final int RC_SIGN_IN = 9001;
    private GoogleSignInOptions googleSignInOptions;

    //my own variables
    private String google_email;
    private String google_name;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());  //Register with dashboard

        setContentView(R.layout.activity_login);


        googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestId().build();
        mGoogleApiClient  = new GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_SIGN_IN_API,googleSignInOptions).build();

        SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); //google Integration
        signInButton.setSize(SignInButton.SIZE_WIDE);  //ERROR #1


        signInButton.setScopes(googleSignInOptions.getScopeArray());


        signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
                startActivityForResult(signInIntent, RC_SIGN_IN);
            }
        });




        AppEventsLogger.activateApp(this);
        callbackManager = CallbackManager.Factory.create(); //For Facebook Integration

        loginButton = (LoginButton) findViewById(R.id.login_button); //ERROR #2

       LoginManager.getInstance().logInWithReadPermissions(this,Arrays.asList("email","public_profile"));
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

                //----------------
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object,GraphResponse response) {
                                try {
                                    TimeTableDatabaseHelper timetabledatabasehelper = new TimeTableDatabaseHelper(LoginActivity.this);
                                    db = timetabledatabasehelper.getReadableDatabase();

                                    AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                                    builder.setTitle("Some More Information...");
                                    builder.setMessage("Why Don't You Enter your Class And Section so You Don't have to Enter them again?");
                                    final EditText classtext  = new EditText(LoginActivity.this);
                                    classtext.setHint("Enter Your class");
                                    final EditText sectiontext  = new EditText(LoginActivity.this);
                                    sectiontext.setHint("Enter Your Section");

                                    builder.setPositiveButton("Go!", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialogInterface, int i) {
                                            classtext1 = classtext.getText().toString();
                                            sectiontext1 = sectiontext.getText().toString();



                                        }
                                    });

                                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.cancel();
                                        }
                                    });

                                    builder.show();

                                    email = object.getString("email");
                                    name = object.getString("name");

                                    if(email.equals("")){
                                        email = "None";
                                    }

                                    ContentValues values1 = new ContentValues();
                                    values1.put("NAME",name);
                                    values1.put("EMAIL",email);
                                    values1.put("CLASS",classtext1);
                                    values1.put("SECTION",sectiontext1);

                                    db.insert("LOGIN",null,values1);




                                } catch(JSONException ex) {
                                    ex.printStackTrace();
                                }
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender, birthday");
                request.setParameters(parameters);
                request.executeAsync();



                AlertDialog.Builder alertdialog = new AlertDialog.Builder(LoginActivity.this);
                alertdialog.setTitle("Successfully Authenticated!");
                alertdialog.setMessage("You're all set To Start Using Bulletin! Click OK to Begin");
                alertdialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                        startActivity(intent);
                    }
                });
                alertdialog.show();



            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException e) {

            }
        });




    }

这是我的布局代码:

   <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_login"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.arjunrao.bulletin.LoginActivity"
    android:background="@drawable/bookshelf">


    <Button
        android:text="SIGN UP WITH GOOGLE"
        android:paddingLeft="34dp"
        android:paddingRight="34dp"
        android:layout_width="300dp"
        android:layout_height="40dp"
        android:textColor="#E0E0E0"
        android:drawablePadding="24dp"
        android:layout_marginBottom="43dp"

        android:fontFamily="sans-serif"
        android:textSize="14dp"

        android:background="#d34836"
        android:id = "@+id/sign_in_button"
        android:elevation="24dp"
        android:layout_above="@+id/login_button"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="SIGN UP WITH FACEBOOK"
        android:paddingLeft="34dp"
        android:paddingRight="34dp"
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:textColor="#E0E0E0"
        android:drawablePadding="24dp"
        android:layout_marginBottom="90dp"

        android:fontFamily="sans-serif"
        android:textSize="14dp"

        android:background="#3b5998"
        android:id = "@+id/login_button"

        android:elevation="24dp"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/sign_in_button"
        android:layout_alignEnd="@+id/sign_in_button" />

    <TextView
        android:text="@string/intro_message"
        android:textColor="#E0E0E0"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="17dp"
        android:id="@+id/textView3"
        android:fontFamily="sans-serif"
        android:textStyle="normal|bold"
        android:textAlignment="center"
        android:layout_below="@+id/textView2"
        android:layout_alignParentStart="true" />

    <TextView
        android:text="Bulletin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fontFamily="casual"
        android:textStyle="bold|italic"

        android:textSize="90sp"
        android:layout_marginTop="24dp"
        android:id="@+id/textView2"
        android:textAlignment="center"
        android:textColor="#FFFFFF"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

ClassCastException很明显。只需使用Facebook / Google登录按钮即可。 基本上,解决此问题的一种简单方法是自定义按钮样式。

<style name="CustomStyle">
    <item name="android:background">@drawable/whatever</item>
    <item name="android:layout_marginTop">10dp</item>
    <item name="android:layout_marginBottom">10dp</item>
    <item name="android:layout_gravity">center_horizontal</item>
    <item name="android:textSize">@dimen/whatever</item>
</style>

然后将样式设置为按钮

<com.facebook.widget.LoginButton
        xmlns:fb="http://schemas.android.com/apk/res-auto"
        android:id="@+id/loginFacebookButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        fb:login_text="@string/loginFacebookButton"
        fb:logout_text=""
        style="@style/CustomStyle"/>

查看customize Android Facebook Login button了解更多详情/意见。