Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌游戏服务登录/退出按钮_Java_Android_Android Layout_Adt_Google Play Games - Fatal编程技术网

Java 谷歌游戏服务登录/退出按钮

Java 谷歌游戏服务登录/退出按钮,java,android,android-layout,adt,google-play-games,Java,Android,Android Layout,Adt,Google Play Games,我正在尝试按照此处的建议实施google play game services登录/退出按钮: 但无论何时 findViewById(R.id.sign_in_button).setVisibility(View.GONE); 或 调用-我的应用程序崩溃 问题是-我不太明白如何在我的主布局上正确添加这些按钮,然后使用它们 所以,我不明白。。。我是否没有正确添加这些登录/退出按钮,或者我的布局是否有问题?如何将这些按钮添加到主布局中?我在互联网上找不到任何提供这些按钮完整实现的源代码,只有几段

我正在尝试按照此处的建议实施google play game services登录/退出按钮:

但无论何时

findViewById(R.id.sign_in_button).setVisibility(View.GONE); 

调用-我的应用程序崩溃

问题是-我不太明白如何在我的主布局上正确添加这些按钮,然后使用它们

所以,我不明白。。。我是否没有正确添加这些登录/退出按钮,或者我的布局是否有问题?如何将这些按钮添加到主布局中?我在互联网上找不到任何提供这些按钮完整实现的源代码,只有几段代码

这可能和风景有关吗?我不明白-如果我实现View.OnClickListener,那么这些按钮如何知道它们被分配到哪个视图。。。我为广告创建了另一个视图,但这是一个特殊的视图。我只是迷路了:(

这是我的主要布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<!-- sign-in button -->
<com.google.android.gms.common.SignInButton
android:id="@+id/sign_in_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<!-- sign-out button -->
<Button
android:id="@+id/sign_out_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sign Out"
android:visibility="gone" />

</LinearLayout>
public class AndroidLauncher extends AndroidApplication implements AdInterface, GameHelperListener, ActionResolver, View.OnClickListener {

int launched = 0;

Intent intent;

private final String AD_UNIT_ID = "------";

private final int SHOW_ADS = 1;
private final int HIDE_ADS = 0;

protected AdView adView;

private GameHelper gameHelper;

ConnectivityManager cm;

NetworkInfo ni;

protected Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch(msg.what) {
        case SHOW_ADS:
            adView.setVisibility(View.VISIBLE);
            //AdRequest adRequest = new AdRequest.Builder().build();
            //adView.loadAd(adRequest);
            break;
        case HIDE_ADS:
            adView.setVisibility(View.GONE);
            break;
        }
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (launched == 0){


    setContentView(R.layout.main);

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    findViewById(R.id.sign_out_button).setOnClickListener(this);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    intent = new Intent(this, VideoActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();

    initialize(new Game(this, this), cfg);

    if (gameHelper == null) {

        gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
        gameHelper.enableDebugLog(true);

        }
    gameHelper.setup(this);


    adView = new AdView(this);
    adView.setAdSize(AdSize.BANNER);
    adView.setAdUnitId(AD_UNIT_ID);
    adView.setId(12345); // this is an arbitrary id, allows for relative positioning in createGameView()

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, 
            FrameLayout.LayoutParams.WRAP_CONTENT, 
            Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);

    adView.setLayoutParams(params);
    adView.setBackgroundColor(Color.BLACK);


    addContentView(adView, params);


    startAdvertising(adView);

    launched = 1;
    }


//*@Override
//*public void onStart(){
//* super.onStart();
//* gameHelper.onStart(this);
//*}

@Override
public void onStop(){
    super.onStop();
    gameHelper.onStop();
}

@Override
public void onActivityResult(int request, int response, Intent data) {
    super.onActivityResult(request, response, data);
    gameHelper.onActivityResult(request, response, data);
}

private void startAdvertising(AdView adView) {
    AdRequest adRequest = new AdRequest.Builder().build();
    adView.loadAd(adRequest);
  }

@Override
public void showAds(boolean show) {
    // TODO Auto-generated method stub
    handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS);
}

@Override
public boolean getSignedInGPGS() {
    // TODO Auto-generated method stub
    //return false;
    return gameHelper.isSignedIn();
}

@Override
public void loginGPGS() {
    // TODO Auto-generated method stub
    try {
        runOnUiThread(new Runnable(){
            public void run() {
                gameHelper.beginUserInitiatedSignIn();
            }
        });
    } catch (final Exception ex) {
    }

}

@Override
public void submitScoreGPGS(int score) {
    // TODO Auto-generated method stub

}

@Override
public void unlockAchievementGPGS(String achievementId) {
    // TODO Auto-generated method stub

    Games.Achievements.unlock(gameHelper.getApiClient(), achievementId);
    //Games.Achievements.

}

//@Override
public void revealAchievementGPGS(String achievementId) {
    // TODO Auto-generated method stub

    Games.Achievements.reveal(gameHelper.getApiClient(), achievementId);
    //Games.Achievements.

}

@Override
public void getLeaderboardGPGS() {
    // TODO Auto-generated method stub

}

@Override
public void getAchievementsGPGS() {
    // TODO Auto-generated method stub

    if (gameHelper.isSignedIn()) {
             startActivityForResult(Games.Achievements.getAchievementsIntent(gameHelper.getApiClient()), 101);
        }
        else if (!gameHelper.isConnecting()) {
        loginGPGS();
        }

}

@Override
public void onSignInFailed() {
    // TODO Auto-generated method stub

    // Sign in has failed. So show the user the sign-in button.
    findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
    findViewById(R.id.sign_out_button).setVisibility(View.GONE);

}

@Override
public void onSignInSucceeded() {
    // TODO Auto-generated method stub
    //loginGPGS();

    // show sign-out button, hide the sign-in button
    findViewById(R.id.sign_in_button).setVisibility(View.GONE);
    findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);

    // (your code here: update UI, enable functionality that depends on sign in, etc)

}

public boolean isNetworkConnected() {
      cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
      ni = cm.getActiveNetworkInfo();
      if (ni == null) {
       // There are no active networks.
       return false;
      } else
       return true;
     }

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

    if (v.getId() == R.id.sign_in_button) {
        // start the asynchronous sign in flow
        gameHelper.beginUserInitiatedSignIn();
    }
    else if (v.getId() == R.id.sign_out_button) {
        // sign out.
        gameHelper.signOut();

        // show sign-in button, hide the sign-out button
        findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
        findViewById(R.id.sign_out_button).setVisibility(View.GONE);
    }

}

}

应用程序正在崩溃,因为您没有与LinearLayout关联的android:id(在这种情况下,您需要添加android:id=“@+id/main”)


当您试图引用这些按钮来隐藏它们时,它们实际上不会显示,因为正在创建的布局不是您期望的布局,它将崩溃。

而且这些按钮根本不会显示。我只是不了解如何正确地将它们添加到布局中,并在主活动中使用它们…:(嗯,我猜我的公共类AndroidLauncher扩展了AndroidApplication,而不是活动。这应该是原因,就像我调用setContentView(R.layout.main)时一样);它工作得很好,但是当我添加按钮并试图调用它们时,它崩溃了。它不是从布局文件的名称中获取Id吗?在我的例子中是main.xml,所以我调用setContentView(R.layout.main);where“.main”是一个ID,不是吗?还是需要在.xml中设置一个ID来添加按钮?不能检查你的答案BTW,因为我决定不在Android特定代码中添加按钮…所以我会把它当作答案,因为它听起来合法XD。
public class AndroidLauncher extends AndroidApplication implements AdInterface, GameHelperListener, ActionResolver, View.OnClickListener {

int launched = 0;

Intent intent;

private final String AD_UNIT_ID = "------";

private final int SHOW_ADS = 1;
private final int HIDE_ADS = 0;

protected AdView adView;

private GameHelper gameHelper;

ConnectivityManager cm;

NetworkInfo ni;

protected Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch(msg.what) {
        case SHOW_ADS:
            adView.setVisibility(View.VISIBLE);
            //AdRequest adRequest = new AdRequest.Builder().build();
            //adView.loadAd(adRequest);
            break;
        case HIDE_ADS:
            adView.setVisibility(View.GONE);
            break;
        }
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (launched == 0){


    setContentView(R.layout.main);

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    findViewById(R.id.sign_out_button).setOnClickListener(this);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    intent = new Intent(this, VideoActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();

    initialize(new Game(this, this), cfg);

    if (gameHelper == null) {

        gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
        gameHelper.enableDebugLog(true);

        }
    gameHelper.setup(this);


    adView = new AdView(this);
    adView.setAdSize(AdSize.BANNER);
    adView.setAdUnitId(AD_UNIT_ID);
    adView.setId(12345); // this is an arbitrary id, allows for relative positioning in createGameView()

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, 
            FrameLayout.LayoutParams.WRAP_CONTENT, 
            Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);

    adView.setLayoutParams(params);
    adView.setBackgroundColor(Color.BLACK);


    addContentView(adView, params);


    startAdvertising(adView);

    launched = 1;
    }


//*@Override
//*public void onStart(){
//* super.onStart();
//* gameHelper.onStart(this);
//*}

@Override
public void onStop(){
    super.onStop();
    gameHelper.onStop();
}

@Override
public void onActivityResult(int request, int response, Intent data) {
    super.onActivityResult(request, response, data);
    gameHelper.onActivityResult(request, response, data);
}

private void startAdvertising(AdView adView) {
    AdRequest adRequest = new AdRequest.Builder().build();
    adView.loadAd(adRequest);
  }

@Override
public void showAds(boolean show) {
    // TODO Auto-generated method stub
    handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS);
}

@Override
public boolean getSignedInGPGS() {
    // TODO Auto-generated method stub
    //return false;
    return gameHelper.isSignedIn();
}

@Override
public void loginGPGS() {
    // TODO Auto-generated method stub
    try {
        runOnUiThread(new Runnable(){
            public void run() {
                gameHelper.beginUserInitiatedSignIn();
            }
        });
    } catch (final Exception ex) {
    }

}

@Override
public void submitScoreGPGS(int score) {
    // TODO Auto-generated method stub

}

@Override
public void unlockAchievementGPGS(String achievementId) {
    // TODO Auto-generated method stub

    Games.Achievements.unlock(gameHelper.getApiClient(), achievementId);
    //Games.Achievements.

}

//@Override
public void revealAchievementGPGS(String achievementId) {
    // TODO Auto-generated method stub

    Games.Achievements.reveal(gameHelper.getApiClient(), achievementId);
    //Games.Achievements.

}

@Override
public void getLeaderboardGPGS() {
    // TODO Auto-generated method stub

}

@Override
public void getAchievementsGPGS() {
    // TODO Auto-generated method stub

    if (gameHelper.isSignedIn()) {
             startActivityForResult(Games.Achievements.getAchievementsIntent(gameHelper.getApiClient()), 101);
        }
        else if (!gameHelper.isConnecting()) {
        loginGPGS();
        }

}

@Override
public void onSignInFailed() {
    // TODO Auto-generated method stub

    // Sign in has failed. So show the user the sign-in button.
    findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
    findViewById(R.id.sign_out_button).setVisibility(View.GONE);

}

@Override
public void onSignInSucceeded() {
    // TODO Auto-generated method stub
    //loginGPGS();

    // show sign-out button, hide the sign-in button
    findViewById(R.id.sign_in_button).setVisibility(View.GONE);
    findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);

    // (your code here: update UI, enable functionality that depends on sign in, etc)

}

public boolean isNetworkConnected() {
      cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
      ni = cm.getActiveNetworkInfo();
      if (ni == null) {
       // There are no active networks.
       return false;
      } else
       return true;
     }

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

    if (v.getId() == R.id.sign_in_button) {
        // start the asynchronous sign in flow
        gameHelper.beginUserInitiatedSignIn();
    }
    else if (v.getId() == R.id.sign_out_button) {
        // sign out.
        gameHelper.signOut();

        // show sign-in button, hide the sign-out button
        findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
        findViewById(R.id.sign_out_button).setVisibility(View.GONE);
    }

}

}