【问题标题】:API being called twice while clicking on a button unexpectedly in Android在Android中意外单击按钮时API被调用两次
【发布时间】:2021-06-24 23:42:16
【问题描述】:

当我在我的应用程序中按下上传按钮时,从字符串 URL 调用的 API 会执行两次。如何正确处理该行为,以便 API 只需单击一次即可执行?

这是活动代码:

公共类 UserLoggedInActivity 扩展 AppCompatActivity {

private static final int SELECT_PICTURE = 100;

Button logout, upload, selectImage;
ImageView imageView;
EditText productName, productPrice;
Uri uri;

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

    logout = findViewById(R.id.logout);
    upload = findViewById(R.id.upload);
    imageView = findViewById(R.id.image);
    productName = findViewById(R.id.productName);
    productPrice = findViewById(R.id.productPrice);
    selectImage = findViewById(R.id.selectImage);

    logout.setOnClickListener(v -> {
        FirebaseAuth.getInstance().signOut();
        Toast.makeText(UserLoggedInActivity.this, "Successfully Logged out", Toast.LENGTH_SHORT).show();
        startActivity(new Intent(UserLoggedInActivity.this, UserLoginActivity.class));
    });

    selectImage.setOnClickListener(v -> {

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
    });

    upload.setOnClickListener(v -> {
        String pName = productName.getText().toString();
        String pPrice = productPrice.getText().toString();
        Log.e("REAL_PATH: ", "The pseudo value is: " + uri.getPath());
        String URL = "http://192.168.1.12:8080/storeProductInfo?file=" + new File("/Users/guppranj/Desktop/download.jpeg")
                + "&&name=" + pName + "&&price=" + pPrice;
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(URL, null,
                response -> Log.e("INFO",response.toString()),
                null);
        requestQueue.add(jsonObjectRequest);
        Toast.makeText(UserLoggedInActivity.this, "Product Info saved successfully", Toast.LENGTH_SHORT).show();
        productName.getText().clear();
        productPrice.getText().clear();
        imageView.setImageResource(android.R.color.transparent);
    });
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
    super.onActivityResult(requestCode, resultCode, resultData);
    if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) {
        if (resultData != null) {
            uri = resultData.getData();
            imageView.setImageURI(uri);
        }
    }
}

【问题讨论】:

    标签: android android-intent android-volley onactivityresult


    【解决方案1】:

    您如何尝试在单击按钮后禁用该按钮,然后执行上传,一旦您收到返回结果,您就可以启用该按钮。

    upload.setOnClickListener(v -> {
            v.setEnabled(false);
            String pName = productName.getText().toString();
            String pPrice = productPrice.getText().toString();
            Log.e("REAL_PATH: ", "The pseudo value is: " + uri.getPath());
            String URL = "http://192.168.1.12:8080/storeProductInfo?file=" + new File("/Users/guppranj/Desktop/download.jpeg")
                    + "&&name=" + pName + "&&price=" + pPrice;
            RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(URL, null,
                    response -> Log.e("INFO",response.toString()),
                    null);
            requestQueue.add(jsonObjectRequest);
            Toast.makeText(UserLoggedInActivity.this, "Product Info saved successfully", Toast.LENGTH_SHORT).show();
            productName.getText().clear();
            productPrice.getText().clear();
            imageView.setImageResource(android.R.color.transparent);
            v.setEnabled(true);
        });
    

    【讨论】:

    • 没用。为什么会这样?仅禁用该按钮对 IMO 没有帮助。
    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多