解析登录失败成功

时间:2015-09-29 11:05:40

标签: android parse-platform libgdx

我刚开始使用Parse作为我的后端解决方案。 我遇到登录/登录错误。这些方法没有任何Parse错误。但是我认为这是登录/登录屏幕上的交易失败了。

这是登录错误:

    09-29 12:52:43.521  27557-27557/com.test.MyGame.android E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread)
09-29 12:52:43.531  27557-27557/com.test.MyGame.android D/AndroidRuntime﹕ Shutting down VM
09-29 12:52:43.531  27557-27557/com.test.MyGame.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.test.MyGame.android, PID: 27557
    java.lang.IllegalArgumentException: Error compiling shader:
            at com.badlogic.gdx.graphics.g2d.SpriteBatch.createDefaultShader(SpriteBatch.java:157)
            at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:120)
            at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:73)
            at com.badlogic.gdx.scenes.scene2d.Stage.<init>(Stage.java:99)
            at com.test.MyGame.screens.MainScreen.<init>(MainScreen.java:55)
            at com.test.MyGame.screens.LogInScreen$1$1.done(LogInScreen.java:163)
            at com.test.MyGame.screens.LogInScreen$1$1.done(LogInScreen.java:153)
            at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5942)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

这是登录代码:

logInButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            //Validate data
            boolean validationError = false;
            StringBuilder validationErrorMessage =
                    new StringBuilder("Please");
            if(isEmpty(userName)){
                validationError = true;
                validationErrorMessage.append("enter a username");
            }
            if(isEmpty(password)) {
                if(validationError) {
                    validationErrorMessage.append(", and");
                }
                validationError = true;
                validationErrorMessage.append("enter a password");
            }
            validationErrorMessage.append(".");

            //If there was an validation erro display it:
            if(validationError) {
                //TODO **
                return;
            }

            //Show progress wheel

            //*******************
            //Call login
            ParseUser.logInInBackground(userName.getText().toString(), password.getText().toString(), new LogInCallback() {
                @Override
                public void done(ParseUser parseUser, ParseException e) {
                    //Dismiss progress wheel TODO**

                    //*****************************
                    if(e != null) {
                        System.out.println("LogIn" + e);
                    } else {
                        //Release app access, they are logged in:
                        game.setScreen(new MainScreen(game));
                    }
                }
            });

        }
    });

现在,我如何理解错误,它是在类MainScreen中引起的,我的应用程序将在登录完成后将其设置为屏幕。我不确定是这种情况吗?但是当我在没有登录/注册的情况下启动它时,MainScreen无故障运行。

MainScreen:

public class MainScreen implements Screen {
final MyGame game;
private int screenWidth=1000;
private int screenHeight=2000;
private OrthographicCamera camera;
private Viewport view;
public Texture background, test, testDown;
private Stage uiStage;
private Skin uiSkin;
private String header = "Home";

//UI
private ImageTextButton tombstoneButton, storeButton, memoriesButton;
private ImageTextButton.ImageTextButtonStyle textButtonStyle;
private TextureRegionDrawable tombstone_TRD, tombstone_TRD_Down;
private Table buttonTable;

public MainScreen(MyGame game) {
    game = game;
    //Set's up camera
    camera = new OrthographicCamera(screenWidth, screenHeight);
    camera.setToOrtho(false, screenWidth, screenHeight);
    //Set's up viewport

    view = new StretchViewport(screenWidth, screenHeight, camera);
    view.apply();
    loadAssets();


    uiStage = new Stage(view);
    //font = new BitmapFont();
    uiSkin = new Skin();


}

public void loadAssets() {
    background = game.getAssets().getTexture(game.getAssets().background);
    test = game.getAssets().getTexture(game.getAssets().testButton);
    testDown = game.getAssets().getTexture(game.getAssets().testButtonDown);
}

@Override
public void show() {
    //Initializing UI components

    tombstone_TRD_Down = new TextureRegionDrawable(new TextureRegion(testDown));
    tombstone_TRD = new TextureRegionDrawable(new TextureRegion(test));
    textButtonStyle = new ImageTextButton.ImageTextButtonStyle();
    textButtonStyle.font = tombstone.buttonsFont;
    textButtonStyle.up = uiSkin.newDrawable(uiSkin.newDrawable(tombstone_TRD));
    textButtonStyle.down = uiSkin.newDrawable(uiSkin.newDrawable(tombstone_TRD_Down));
    tombstoneButton = new ImageTextButton("Tombstone", textButtonStyle);


    //ButtonTable
    buttonTable = new Table();
    buttonTable.setBounds(100,700,800,500);
    buttonTable.add(tombstoneButton).size(800,200);
    buttonTable.row();
    buttonTable.add(tombstoneButton).size(395,200).pad(5);
    //Adds table of buttons to stage
    uiStage.addActor(buttonTable);


    //Process input from buttons
    Gdx.input.setInputProcessor(game.inputMultiplexer);
    game.inputMultiplexer.addProcessor(uiStage);
}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    game.batch.setProjectionMatrix(camera.combined);




    game.batch.begin();
    //Draws background
    game.batch.draw(background,0,0,screenWidth,screenHeight);
    //Draws header/topic text
    game.headerFont.draw(tombstone.batch, header, 250, 1600);
    game.batch.end();


    uiStage.act(Gdx.graphics.getDeltaTime());
    uiStage.draw();
}

@Override
public void resize(int width, int height) {
    view.update(width, height, false);
}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {

}

}

根据Parse的文档,我应该在调用done()时无错误地使用Intent进行交易。但是我使用了libgdx框架,所以如果我可以在完成后设置一个新屏幕,那将会更容易。

先谢谢。如果需要更多代码,我会提供。

1 个答案:

答案 0 :(得分:2)

第二个原因可能是线程问题,即您正在尝试从GL线程以外更新GL内容。您可能需要从GL线程内部创建一个Handler,然后使用该Handler调用setScreen方法。

尝试在成功登录的其他部分内做一些事情:

Gdx.app.postRunnable(new Runnable() {
         @Override
         public void run() {

            game.setScreen(new MainScreen(game));
         }
      });