Android实现Google plus登录-Android

Android实现Google plus登录-Android,android,google-plus,Android,Google Plus,我正在尝试创建一个应用程序,其中用户尝试使用Google plus登录,我收到以下toast错误:发生内部错误,这是来自logCat的: 10-17 11:28:13.456: W/dalvikvm(18602): threadid=1: thread exiting with uncaught exception (group=0x2b542210) 10-17 11:28:13.486: E/AndroidRuntime(18602): FATAL EXCEPTION: main 10-17

我正在尝试创建一个应用程序,其中用户尝试使用Google plus登录,我收到以下toast错误:
发生内部错误
,这是来自logCat的:

10-17 11:28:13.456: W/dalvikvm(18602): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
10-17 11:28:13.486: E/AndroidRuntime(18602): FATAL EXCEPTION: main
10-17 11:28:13.486: E/AndroidRuntime(18602): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=9000, result=0, data=null} to activity {com.myapp.gamers/com.myapp.gamers.activities.SignUp}: java.lang.NullPointerException
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3000)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3043)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.app.ActivityThread.access$1100(ActivityThread.java:127)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1188)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.os.Looper.loop(Looper.java:137)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.app.ActivityThread.main(ActivityThread.java:4441)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at java.lang.reflect.Method.invokeNative(Native Method)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at java.lang.reflect.Method.invoke(Method.java:511)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at dalvik.system.NativeStart.main(Native Method)
10-17 11:28:13.486: E/AndroidRuntime(18602): Caused by: java.lang.NullPointerException
10-17 11:28:13.486: E/AndroidRuntime(18602):    at com.myapp.gamers.activities.SignUp.onActivityResult(SignUp.java:411)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.app.Activity.dispatchActivityResult(Activity.java:4649)
10-17 11:28:13.486: E/AndroidRuntime(18602):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2996)
10-17 11:28:13.486: E/AndroidRuntime(18602):    ... 11 more
这是我的完整代码(很抱歉代码太长,但我认为这是最好的描述方式):

private按钮facebookBtn,注册;
私有图像视图菜单;
专用FBLoginManager FBLoginManager;
//私人编辑文本电子邮件网,密码网;
私人滑动菜单滑动菜单;
私人用户;
//私人牌照;
私有int用户id;
串试验;
私有静态最终整数请求\代码\解析\错误=9000;
private ProgressDialog mConnectionProgressDialog;
私有多客户端mPlusClient;
私有连接结果mConnectionResult;
私人登录按钮signupButtonPlus;
公共最终字符串KODEFUNFBAPP_ID=“736233383069948”;
静态最终字符串[]范围=新字符串[]{SCOPES.PLUS_PROFILE};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.signup);
mpluclient=new PlusClient.Builder(this,this,this)
.setVisibleActivities(“http://schemas.google.com/AddActivity",
"http://schemas.google.com/BuyActivity")
.setScopes(范围)//以空格分隔的范围列表
.build();
initWidgets();
}
私有void initWidgets(){
//许可=(复选框)findViewById(R.id.signup\u复选框);
mConnectionProgressDialog=新建ProgressDialog(此);
设置消息(“登录…”);
signupButtonPlus=(SignInButton)findViewById(R.id.sign_in_button_plus);
signupButtonPlus.setOnClickListener(此);
facebookBtn=(按钮)findViewById(R.id.signup\u fb);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
连接到Facebook();
}
});
/*emailEt=(EditText)findViewById(R.id.signup\u email\u et);
passwordEt=(EditText)findViewById(R.id.signup\u pass\u et)*/
/*注册=(按钮)findViewById(R.id.signUp\u new\u user);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
最后一个字符串email=emailEt.getText().toString();
最终字符串传递=passwordEt.getText().toString();
if(验证输入(电子邮件,通过)){
试一试{
保存用户数据(“,”,电子邮件,“,通行证);
}捕获(IOE1异常){
e1.printStackTrace();
}
}
}
});*/
菜单=(ImageView)findViewById(R.id.signup\u菜单);
显示菜单();
}
专用无效注册服务器(最终字符串电子邮件、最终字符串传递、,
最终字符串用户名、最终字符串imgURL、最终字符串名称、,
final int userId)引发IOException{
最终字符串注册表URL=”http://myurl.com/gamer/admin2/mobile/user.php?action=register&email="
+电子邮件
+“&用户名=”
+用户名
+“&密码=”
+通过
+“&img_url=“+imgURL;
新建异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(注册表URL);
//setHeader(“接受”、“应用程序/json”);
setHeader(“接受”,
“application/x-www-form-urlencoded”);
//setHeader(“内容类型”、“应用程序/json”);
setHeader(“内容类型”,
“application/x-www-form-urlencoded”);
List name valuepairs=new ArrayList(
4);
添加(新的BasicNameValuePair(“email”,email));
nameValuePairs
.添加(新的BasicNameValuePair(“用户名”,用户名));
添加(新的BasicNameValuePair(“密码”,pass));
添加(新的BasicNameValuePair(“img_url”,imgURL));
试一试{
httppost.setEntity(新的UrlEncodedFormEntity(nameValuePairs,
“UTF-8”);
}捕获(不支持DencodingException e1){
e1.printStackTrace();
}
试一试{
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
测试=EntityUtils.toString(实体);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
试一试{
JSONObject jObject=新的JSONObject(test.substring(38,
测试长度()-1);
Log.v(“--”,jObject.toString());
userID=jObject.getInt(“id”);
SharedPreferences=getSharedPreferences(
getString(R.string.app_包),
上下文。模式(私人);
prefs.edit().putin(“user_id”,userID).commit();
}捕获(JSONException e){
e、 printStackTrace();
}
}
}.execute();
}
私有布尔验证输入(字符串em)
private Button facebookBtn, signUp;
    private ImageView menu;
    private FBLoginManager fbLoginManager;
//  private EditText emailEt, passwordEt;
    private SlidingMenu slidingMenu;
    private User user;
//  private CheckBox licence;
    private int userID;
    String test;

    private static final int REQUEST_CODE_RESOLVE_ERR = 9000;

    private ProgressDialog mConnectionProgressDialog;
    private PlusClient mPlusClient;
    private ConnectionResult mConnectionResult;
    private SignInButton signupButtonPlus;

    public final String KODEFUNFBAPP_ID = "736233383069948";

    static final String[] SCOPES = new String[] { Scopes.PLUS_PROFILE };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.signup);

        mPlusClient = new PlusClient.Builder(this, this, this)
                .setVisibleActivities("http://schemas.google.com/AddActivity",
                        "http://schemas.google.com/BuyActivity")
                .setScopes(SCOPES) // Space separated list of scopes
                .build();
        initWidgets();
    }

    private void initWidgets() {
//      licence = (CheckBox) findViewById(R.id.signup_checkbox);
        mConnectionProgressDialog = new ProgressDialog(this);
        mConnectionProgressDialog.setMessage("Signing in...");
        signupButtonPlus = (SignInButton) findViewById(R.id.sign_in_button_plus);
        signupButtonPlus.setOnClickListener(this);
        facebookBtn = (Button) findViewById(R.id.signup_fb);
        facebookBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                connectToFacebook();

            }
        });

    /*  emailEt = (EditText) findViewById(R.id.signup_email_et);
        passwordEt = (EditText) findViewById(R.id.signup_pass_et);*/
        /*signUp = (Button) findViewById(R.id.signup_new_user);
        signUp.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                final String email = emailEt.getText().toString();
                final String pass = passwordEt.getText().toString();
                if (validateInput(email, pass)) {
                    try {
                        saveUserData("", "", email, "", pass);
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }

                }
            }
        });*/

        menu = (ImageView) findViewById(R.id.signup_menu);
        displayMenu();
    }

    private void registerNewUser(final String email, final String pass,
            final String username, final String imgURL, final String name,
            final int userId) throws IOException {
        final String registerURL = "http://myurl.com/gamer/admin2/mobile/user.php?action=register&email="
                + email
                + "&username="
                + username
                + "&password="
                + pass
                + "&img_url=" + imgURL;
        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(registerURL);

                // httppost.setHeader("Accept", "application/json");
                httppost.setHeader("Accept",
                        "application/x-www-form-urlencoded");
                // httppost.setHeader("Content-type", "application/json");
                httppost.setHeader("Content-Type",
                        "application/x-www-form-urlencoded");

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                        4);

                nameValuePairs.add(new BasicNameValuePair("email", email));
                nameValuePairs
                        .add(new BasicNameValuePair("username", username));
                nameValuePairs.add(new BasicNameValuePair("password", pass));
                nameValuePairs.add(new BasicNameValuePair("img_url", imgURL));
                try {
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,
                            "UTF-8"));
                } catch (UnsupportedEncodingException e1) {
                    e1.printStackTrace();
                }

                try {
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    test = EntityUtils.toString(entity);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                try {
                    JSONObject jObject = new JSONObject(test.substring(38,
                            test.length() - 1));
                    Log.v("--", jObject.toString());
                    userID = jObject.getInt("id");
                    SharedPreferences prefs = getSharedPreferences(
                            getString(R.string.app_package),
                            Context.MODE_PRIVATE);
                    prefs.edit().putInt("user_id", userID).commit();
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }.execute();

    }

    private boolean validateInput(String email, String password) {
        if (email.length() <= 6) {
            Toast.makeText(this, "Password must be at least 6 characters long",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
        if (!isValidEmailAddress(email)) {
            Toast.makeText(this, "Enter valid email address",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
        /*if (!licence.isChecked()) {
            Toast.makeText(this, "Do you accept the license agreement",
                    Toast.LENGTH_SHORT).show();
            return false;
        }*/
        else
            return true;
    }

    public boolean isValidEmailAddress(String email) {
        java.util.regex.Pattern p = java.util.regex.Pattern
                .compile(".+@.+\\.[a-z]+");
        java.util.regex.Matcher m = p.matcher(email);
        return m.matches();
    }

    private void displayMenu() {
        slidingMenu = new SlidingMenu(this);
        slidingMenu.setMode(SlidingMenu.RIGHT);
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        slidingMenu.setShadowWidthRes(R.dimen.slidingmenu_shadow_width);
        slidingMenu.setShadowDrawable(R.drawable.slidingmenu_shadow);
        slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        slidingMenu.setFadeDegree(0.35f);
        slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
        slidingMenu.setMenu(R.layout.slidingmenu);
        menu.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                slidingMenu.toggle();
            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU) {
            slidingMenu.toggle();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onBackPressed() {
        if (slidingMenu.isMenuShowing()) {
            slidingMenu.toggle();
        } else {
            super.onBackPressed();
        }
    }

    public void connectToFacebook() {

        // read about Facebook Permissions here:
        // http://developers.facebook.com/docs/reference/api/permissions/
        String permissions[] = { "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"

        };

        fbLoginManager = new FBLoginManager(this, R.layout.signup,
                KODEFUNFBAPP_ID, permissions);

        if (fbLoginManager.existsSavedFacebook()) {
            fbLoginManager.loadFacebook();
        } else {
            fbLoginManager.login();
        }
    }

    @Override
    public void loginSuccess(final Facebook facebook) {
        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                GraphApi graphApi = new GraphApi(facebook);
                user = new User();
                try {
                    user = graphApi.getMyAccountInfo();

                    // update your status if logged in / post on wall
                    // graphApi.setStatus("Hello, world!");
                } catch (EasyFacebookError e) {
                    Log.d("TAG: ", e.toString());
                }

                return null;
            }

            protected void onPostExecute(Void result) {
                try {
                    saveUserData(user.getFirst_name(), user.getName(),
                            user.getEmail(), "https://graph.facebook.com/"
                                    + user.getId() + "/picture?type=large",
                            hash(user.getId()).toString());
                    registerNewUser(user.getEmail(), hash(user.getId())
                            .toString(), user.getFirst_name(),
                            "https://graph.facebook.com/" + user.getId()
                                    + "/picture?type=large", user.getName(),
                            userID);
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            };

        }.execute();

    }

    public byte[] hash(String password) throws NoSuchAlgorithmException {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
        byte[] passBytes = password.getBytes();
        byte[] passHash = sha256.digest(passBytes);
        Log.v("--", "pass " + passHash.toString());
        return passHash;
    }

    private void saveUserData(String username, String name, String email,
            String imageURL, String pass) throws IOException {
        registerNewUser(email, pass, username, imageURL, name, userID);
        SharedPreferences prefs = getSharedPreferences(
                getString(R.string.app_package), Context.MODE_PRIVATE);
        prefs.edit().putString("user_fullname", name).commit();
        prefs.edit().putString("user_username", username).commit();
        prefs.edit().putString("user_email", email).commit();
        prefs.edit().putInt("user_id", userID).commit();
        prefs.edit().putString("user_picture", imageURL).commit();
        prefs.edit().putBoolean("user_logedin", true).commit();
        Intent i = new Intent(SignUp.this, Profile.class);
        startActivity(i);
        finish();
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // TODO Auto-generated method stub
        if (result.hasResolution()) {
            // The user clicked the sign-in button already. Start to resolve
            // connection errors. Wait until onConnected() to dismiss the
            // connection dialog.
            try {
                result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
            } catch (SendIntentException e) {
                mPlusClient.disconnect();
                mPlusClient.connect();
            }
        }
    }

    @Override
    public void logoutSuccess() {
        fbLoginManager.displayToast("Logout Success!");
    }

    @Override
    public void loginFail() {
        fbLoginManager.displayToast("Login Epic Failed!");

    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.sign_in_button_plus) {
            Log.v("--", "gplus");
            if (!mPlusClient.isConnected()) {
                mPlusClient.connect();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode,
            android.content.Intent data) {
        Log.v("--", resultCode + " fb");
        Log.v("--", "req code "+requestCode);

        if (requestCode == REQUEST_CODE_RESOLVE_ERR && resultCode == RESULT_OK) {
            mConnectionResult = null;
            Log.v("--", resultCode + " G+");
            mPlusClient.connect();
        } else
            fbLoginManager.loginSuccess(data);
    }

    @Override
    public void onDisconnected() {
        Log.e("gPlus", "disconnected");
    }

    @Override
    public void onConnected(Bundle b) {
        String accountName = mPlusClient.getAccountName();
        Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG)
                .show();
    }
10-17 11:28:13.486: E/AndroidRuntime(18602): Caused by: java.lang.NullPointerException
10-17 11:28:13.486: E/AndroidRuntime(18602):    at com.myapp.gamers.activities.SignUp.onActivityResult(SignUp.java:411)