StringRequest 存储数据 post 之后

StringRequest store data after post

我有一个问题,当我点击 button 时,第一次点击时 id 始终为 null,但在下一次点击时获得 id。 这是代码

    public class MainActivity
    extends AppCompatActivity implements  view.OnClickListener {

    private Button buttonRegister;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonRegister=(Button)findViewById(R.id.button);
        buttonRegister.setOnClickListener(this);


    }
    String userID="null";//i create user id
    final String URL = "https://aiman-king961.rhcloud.com/findID.php";//my url

    public String SimplePotRequest(){       StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
            new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {
                    userID=response;//this is how i store it
                    //  Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
                    System.out.println(response);



                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG ).show();
                }
            }){

        @Override

        protected Map<String, String> getParams() throws AuthFailureError //i know this to pass the parameter
        {
            Map<String,String> map = new HashMap<String,String>();
            map.put("username","hasanal");//this is how i try
            return map;
        }
    };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
        return userID;
    };

    @Override
    public void onClick(View v) {
        String id=SimplePotRequest();

        if(v==buttonRegister){

            Toast.makeText(MainActivity.this, id, Toast.LENGTH_LONG).show();
        }

    }
   }

关键是我想在单击时将用户 ID 存储在 id 中,因为我想在其他功能中使用它,这是我在 android

中登录系统的一部分

发生这种情况是因为您正在调用的函数可能是异步的。

第一次按下按钮时,该函数会在后台调用。显示 toast 时,id 变量仍然是 null

第二次按下按钮时,id 变量由第一个请求填充。第二次调用在后台有 运行,但 id 与之前的数据一起显示。

要解决问题,您需要等到通话结束。在你的onResponse

中做出你的行动
@Override
public void onResponse(String response) {
    userID=response;//this is how i store it
    //  Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
    System.out.println("apekk"+response);
    buttonRegister.setText(response);

    // Make your actions here
}

尝试使用下面的代码,可能会解决你的问题:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

   private static final String REGISTER_URL = "http://simplifiedcoding.16mb.com/UserRegistration/volleyRegister.php";

   public static final String KEY_USERNAME = "username";
   public static final String KEY_PASSWORD = "password";
   public static final String KEY_EMAIL = "email";

   private EditText editTextUsername;
   private EditText editTextEmail;
   private EditText editTextPassword;

   private Button buttonRegister;

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

        editTextUsername = (EditText) findViewById(R.id.editTextUsername);
        editTextPassword = (EditText) findViewById(R.id.editTextPassword);
        editTextEmail= (EditText) findViewById(R.id.editTextEmail);

        buttonRegister = (Button) findViewById(R.id.buttonRegister);

        buttonRegister.setOnClickListener(this);
}

private void registerUser(){
    final String username = editTextUsername.getText().toString().trim();
    final String password = editTextPassword.getText().toString().trim();
    final String email = editTextEmail.getText().toString().trim();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<String, String>();
            params.put(KEY_USERNAME,username);
            params.put(KEY_PASSWORD,password);
            params.put(KEY_EMAIL, email);
            return params;
        }

    };

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}

@Override
public void onClick(View v) {
    if(v == buttonRegister){
        registerUser();
     }
  }
}

注:sample source code