【问题标题】:Android Volley- How to send raw text and get json responseAndroid Volley-如何发送原始文本并获取 json 响应
【发布时间】:2017-12-06 18:31:48
【问题描述】:

我是 android 新手,使用 volley 与 Web 服务进行通信。 Postman details

我发现将原始文本发送到 Web 服务仅适用于邮递员。我尝试使用 grant_type=password&username=myusername&password=mypassowrd 从我的 mainActivity 的两个 editText 中获取 myusername 和 mypassword,. 有没有更好的方法来实现这一点?

public class MainActivity extends AppCompatActivity {

Button btnLogin,btnFetch,btnExit;
EditText editTxtUsr,editTxtPass;
TextView txtView;
String uRL ="****";


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

    btnLogin=findViewById(R.id.buttonLogin);
    btnFetch=findViewById(R.id.buttonFetch);
    btnExit=findViewById(R.id.buttonExit);
    editTxtUsr=findViewById(R.id.editTextUsrname);
    editTxtPass=findViewById(R.id.editTextPassword);
    txtView=findViewById(R.id.textViewData);


    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String wsURL = uRL + "/authtoken";
            //final String appData = "grant_type=password&username=" + editTxtUsr + "&password=" + editTxtPass;

            StringRequest request = new StringRequest(Request.Method.POST, wsURL, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    if (response.equals("true")) {
                        Toast.makeText(MainActivity.this, "Login Successful", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "Incorrect ", Toast.LENGTH_SHORT).show();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    Toast.makeText(MainActivity.this, "Some error occured" + volleyError, Toast.LENGTH_SHORT).show();
                }
            }) {
                @Override
                public Map<String,String> getHeaders() throws AuthFailureError {
                    Map<String, String> headers = new HashMap<>();
                    headers.put("Content-Type", "application/text");
                    headers.put("charset", "TYPE_UTF8_CHARSET");
                    return headers;

                }

                @Override
                protected Map<String,String> getParams() throws AuthFailureError {
                    Map<String, String> parameters = new HashMap<>();
                    parameters.put("grand_type", "SET_VALUE");
                    parameters.put("Username", editTxtUsr.getText().toString());
                    parameters.put("Password", editTxtPass.getText().toString());
                    return parameters;

                }
            };

            RequestQueue rQueue= Volley.newRequestQueue(MainActivity.this);
            rQueue.add(request);
        }
    });

    btnExit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            finish();
        }
    });
}
}

我尝试了各种方法来实现这一点,但没有运气。这是我用来尝试连接到 Web 服务的代码示例。

我得到 [253] BasicNetwork.performRequest: Unexpected response code 400 for...

我彻底搜索了 StackOverflow,但似乎找不到我的问题的正确答案。 任何帮助将不胜感激。

【问题讨论】:

    标签: java android android-volley


    【解决方案1】:

    这几天我一直在研究这个问题,但是在我发布我的问题之后,经过一些尝试,我找到了解决方案。 答案比我想象的要简单。 您需要做的是提出一个对象请求并用您要发布的文本覆盖正文。标题或参数无需更改。 我仍然无法使用 Stringrequest 找到答案。

                    @Override
                    public byte[] getBody() {
                        try {
                            return requestBody.getBytes("utf-8");
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                            return null;
                        }
                    }
    

    其中 requestBody 是您要作为字符串发送的原始文本。

    【讨论】:

      猜你喜欢
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多