无法在VolleysResponse方法上打开新活动

时间:2019-04-22 15:50:11

标签: android android-volley

我正在开发一个基本的Android登录应用程序,我已经看了很多YouTube教程,现在我对我的代码感到困惑(因为我不是专业人士)。

当我输入错误的密码时,应用程序将按预期发送消息,但是当我根据数据库记录键入正确的密码时,它什么也没有显示。我不知道如何解决它。

我试图用另一条Toast消息替换代码“ Intent intent ...”,以便查看当我输入正确的密码时是否会有东西出现,但是即使Toast消息也没有显示。

public void onResponse(String response) {
    try {
        JSONObject obj = new JSONObject(response);
        if (!obj.getBoolean("error")) {
            SharedPrefManager.getInstance(getApplicationContext())
                    .userLogin(
                            obj.getString("username"),
                            obj.getString("email")
                    );

            Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
            startActivity(intent);
        } else {
            Toast.makeText(
                    getApplicationContext(),
                    obj.getString("message"),
                    Toast.LENGTH_LONG
            ).show();
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}  

当用户名和密码均正确时,它应该启动HomeActiviy。

2 个答案:

答案 0 :(得分:0)

我相信您需要从主线程调用startActivity ...

          public void onResponse(String response) {
                try {
                    JSONObject obj = new JSONObject(response);
                    if(!obj.getBoolean("error")){
                        SharedPrefManager.getInstance(getApplicationContext())
                                .userLogin(
                                        obj.getString("username"),
                                        obj.getString("email")
                                );

                        myActivity.runOnUiThread(new Runnable() {
                           @Override
                           public void run() {
                           //Your code to run in GUI thread here
                           }//public void run() {
                              Intent intent = new Intent(getApplicationContext(), 
                              HomeActivity.class);
                              startActivity(intent)
                           });
                    }else{
                        Toast.makeText(
                                getApplicationContext(),
                                obj.getString("message"),
                                Toast.LENGTH_LONG
                        ).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

答案 1 :(得分:0)

您的代码中的问题出在getApplicationContext()中。

尝试此解决方案

  1. 在此截击请求的方法中添加上下文参数

    Context context
    
  2. 像这样开始活动

    Intent intent = new Intent(context, HomeActivity.class);
    context.startActivity(intent);
    
  3. 在调用截击函数时将上下文设置为this