android - java.lang.NullPointerException 与 Google +1 按钮集成

标签 android google-plus google-plus-one

我尝试在我的应用中实现 Google +1 按钮,但在这部分中收到此错误:

@Override
    protected void onStart() {
        super.onStart();
        mPlusClient.connect();
    }

上线:

mPlusClient.connect();

这是我的代码:

public class Menu extends Activity implements OnClickListener,ConnectionCallbacks,
OnConnectionFailedListener{

    ImageButton exit;

    private static final int REQUEST_CODE_RESOLVE_ERR = 9000;

    private ProgressDialog mConnectionProgressDialog;
    private PlusClient mPlusClient;
    private ConnectionResult mConnectionResult;
    private PlusOneButton mPlusOneButton;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.menu);

        inicijalizujVars();

    }

    private void inicijalizujVars() {

        exit = (ImageButton) findViewById(R.id.imageButtonExit);

            mPlusOneButton = (PlusOneButton) findViewById(R.id.plus);

        exit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();
            }
        });
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onResume(){
    super.onResume();

    mPlusClient = new PlusClient.Builder(this, this, this).clearScopes()
    .build();
  mPlusOneButton.initialize(mPlusClient,
    "https://market.android.com/details?id=" + getPackageName(),
    new OnPlusOneClickListener() {
        @Override
        public void onPlusOneClick(Intent intent) {
            mPlusOneButton.setVisibility(View.INVISIBLE);
            startActivityForResult(intent, 0);
        }
    });

    startAppAd.onResume();
    }


    @Override
    public void onBackPressed()
    {
    super.onBackPressed();
    }

    @Override
    protected void onStart() {
        super.onStart();
        mPlusClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mPlusClient.disconnect();
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        if (mConnectionProgressDialog.isShowing()) {
            if (result.hasResolution()) {
                try {
                    result.startResolutionForResult(this,
                            REQUEST_CODE_RESOLVE_ERR);
                } catch (SendIntentException e) {
                    mPlusClient.connect();
                }
            }
        }
        mConnectionResult = result;
    }

    @Override
    protected void onActivityResult(int requestCode, int responseCode,
            Intent intent) {
        if (requestCode == REQUEST_CODE_RESOLVE_ERR
                && responseCode == RESULT_OK) {
            mConnectionResult = null;
            mPlusClient.connect();
        }
    }

    public void onDisconnected() {
    }

    public void onConnected() {

    }
}

和 logcat:

02-01 18:26:50.164: E/AndroidRuntime(2375): FATAL EXCEPTION: main
02-01 18:26:50.164: E/AndroidRuntime(2375): java.lang.RuntimeException: Unable to start activity ComponentInfo{us.candycrushsaga.candycrushsagacompleteguide/us.candycrushsaga.candycrushsagacompleteguide.Menu}: java.lang.NullPointerException
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.os.Looper.loop(Looper.java:137)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at java.lang.reflect.Method.invokeNative(Native Method)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at java.lang.reflect.Method.invoke(Method.java:511)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at dalvik.system.NativeStart.main(Native Method)
02-01 18:26:50.164: E/AndroidRuntime(2375): Caused by: java.lang.NullPointerException
02-01 18:26:50.164: E/AndroidRuntime(2375):     at us.candycrushsaga.candycrushsagacompleteguide.Menu.onStart(Menu.java:169)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.Activity.performStart(Activity.java:5018)
02-01 18:26:50.164: E/AndroidRuntime(2375):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2032)
02-01 18:26:50.164: E/AndroidRuntime(2375):     ... 11 more

最佳答案

查看 Activity 的生命周期

http://developer.android.com/training/basics/activity-lifecycle/starting.html

onCreate --> onStart--> onResume--> onPaused--> onStopped--> onDestoryed

您可以在 onStart 中调用 mPlusClient.connect(),同时在 onResume 中对其进行初始化。因此,mPlusClient 尚未初始化,导致 NUllPointerException

因此请确保在 mPlusClient.connect() 之前初始化 mPlusClient

关于android - java.lang.NullPointerException 与 Google +1 按钮集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501998/

相关文章:

google-plus-one - 谷歌加一按钮不显示

javascript - 社交媒体按钮会减慢网站加载时间

javascript - 社交分享 - 将结果发布到 Twitter/Facebook/Google

ios - 在 iOS 中的应用原生共享对话框和 google+ 登录

java - 如何使用 Java 代码在框架布局底部添加 TextView

java - 我的应用程序没有显示在最近的应用程序列表中 android

javascript - 我可以将gapi.hangout.onair 命名空间用于常规的非直播/非播出的Google Hangouts 应用程序吗?

api - 可以自定义 Google +1 图标吗?

android - 如何在以编程方式滚动时将 scrollview 滚动条边缘设置为不可见

android - 带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets