0

我们如何将参数从 editText 传递给urlusingrequest.GET方法。实际上,我正在尝试将电子邮件地址作为参数传递给api应该附加到的 a api-url

我从这里知道 getParams() 没有在 GET 方法上调用,所以看起来你必须在发送请求之前将它添加到 URL 中。建议我完成任务的任何解决方案..

当我通过 REG_URL="http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/registeruser?email=ameer@novatoresols.com"; 它按预期返回 success=true 响应,因为是注册用户,但如果我设置 REG_URL="http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/registeruser 并传递参数(从edittext 获取值并在getparams() 方法中使用params.put)。response 始终为success=false,即params 未附加到url
这是我的代码。

    package com.example.mts3.hammadnewsapp;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.provider.SyncStateContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class RegisterActivity extends AppCompatActivity {

    Button btn_verf;
    EditText et_Email;
    String u_emails,stat;
    AlertDialog.Builder alertDialog;
    private static final String TAG = "LoginActivity";
    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;

    Context context;
//    public static String firstname, lastname, useremail, userphone, userpass;


//    String REG_URL="http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/registeruser?email=ameer@novatoresols.com";
    String REG_URL="http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/registeruser";

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

        btn_verf=findViewById(R.id.btn_reg_send_vf_code);
        et_Email=findViewById(R.id.et_reg_email);
        alertDialog =new AlertDialog.Builder(RegisterActivity.this);
//        u_emails=et_Email.getText().toString().trim();


        btn_verf.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callApi();
            }
        });
    }

    private void callApi() {
//        Log.e(TAG, "onClick: ");
        /*if (!utility.isInternetConnected()) {
            Toast.makeText(LoginActivity.this, "Please check your internet connection.", Toast.LENGTH_SHORT).show();
            return;
        }*/
//        dialog = utility.showProgressDialog(LoginActivity.this, "Please wait");
        final String email = et_Email.getText().toString().trim();

//        Log.e(TAG, "onClick: email = " + email );

//        JSONObject params = new JSONObject();
/*
        HashMap<String,String> params=new HashMap<>();
        params.put("email",email);*/
        /*try {
//            params.getString("email");
            params.put("email",email);
            Log.e(TAG, "getParams: param = " + "try of put prams");
        } catch (JSONException e){
            Log.e(TAG, "getParams: param = " + "catch of put prams");
            e.printStackTrace();
        }*/
        RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);



        StringRequest stringRequest = new StringRequest(Request.Method.GET, REG_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Toast.makeText(RegisterActivity.this, "REsponse: " + response, Toast.LENGTH_SHORT).show();
            }


        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String,String> params=new HashMap<>();
//                params.put("email",email);
                params.put("email",email);
                return params;

            }
        };        queue.add(stringRequest);


    }
}
4

2 回答 2

4

正如@Puneet 所建议的那样为我工作:

getParams仅因POST请求而被调用。GETrequests 没有正文,因此getParams永远不会被调用。对于像您这样的简单请求,只需将参数添加到您的URL并使用构造URL来向您的服务器发出该请求(REG_URL + "?email=" + email)

于 2017-12-20T14:05:36.543 回答
0

要传递参数,您需要为键值对创建一个类。

1) 创建一个KeyValuePair具有两个字段keyvalue具有适当的构造函数和 getter-setter 方法的类。

2) 现在,对于每个参数,您需要创建一个此类的对象,即,对于值为user@gmail.com的键用户名,该对象将是。new KeyValuePair("username", "user@gmail.com")

3) 现在,您需要创建一个List来存储这些参数,并使用您的基本 url 将此列表传递给以下方法,

 public static String generateUrl(String baseUrl, List<KeyValuePair> params) {
    if (params.size() > 0) {
        for (KeyValuePair parameter: params) {
            if (parameter.getKey().trim().length() > 0)
                baseUrl += "&" + parameter.getKey() + "=" + parameter.getValue();
        }
    }
    return baseUrl;
}

4) 将此baseUrl传递给您的Request.

于 2017-12-20T13:22:32.610 回答