我正在尝试向我在Visual Studio中创建的api发出POST请求。该api有效,最终我找到了一些可以连接到它的代码(并且不推荐使用)。问题是此代码是为GET请求而编写的,而我需要进行POST。我创建了两个框,在其中插入要传递的数据(密码,密码),并创建了一个按钮,该按钮从boxex中获取数据并将其转换为字符串。
我已经尝试搜索了很多示例和教程,这些示例和教程显示了如何发出POST请求,但是大多数示例已经很老了,无法在Android Studio中正常工作,或者至少我无法使它们正常工作。
现在,这是应该发送数据的函数,因为我除了请求方法之外真的不知道要修改什么,所以我没有触及代码。
private StringRequest searchNameStringRequest(String utente, String password)
{
String url = "http://192.168.1.11:57279/api/utente";
return new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
try
{
JSONObject result = new JSONObject(response).getJSONObject("list");
int maxItems = result.getInt("end");
JSONArray resultList = result.getJSONArray("item");
}
catch (JSONException e)
{
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
Toast.makeText(MainActivity.this, "Food source is not responding (USDA API)", Toast.LENGTH_LONG).show();
}
});
}
有人可以向我解释如何获取数据并像具有
的JSON对象一样发送数据键=用户,密码
values = utente,密码(这些值来自前面提到的两个框中)
感谢任何愿意帮助我的人,我希望寻求如此多的帮助不会违反站点规则。
我正在使用Volley,因为它并不那么复杂,并且因为它似乎可以工作。
使用GET方法可以向我显示现有的带消息的json无法转换为JSON对象(我不在乎,这只是确认它已连接到api)
使用POST方法,它会在最后抛出ErrorResponse(食物来源没有响应)
编辑:添加了OnCreate方法,因为我需要StringRequest返回
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue = Volley.newRequestQueue(this);
Button invia = findViewById(R.id.submit);
final EditText utenteInserito = findViewById(R.id.utente);
final EditText passwordInserito = findViewById(R.id.password);
invia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String utente = utenteInserito.getText().toString();
String password = passwordInserito.getText().toString();
queue.cancelAll(R.id.submit);
StringRequest stringRequest = searchNameStringRequest(utente, password);
stringRequest.setTag(R.id.submit);
queue.add(stringRequest);
}
});
}
编辑:我已经按照给出的建议答案进行了操作,但它似乎不起作用
结果代码如下所示,但是我得到了OnErrorResponse,我认为这不是api的问题,因为尝试使用GET响应会给我退出的json数组,所以我认为这是代码的问题。
private StringRequest searchNameStringRequest(final String utente, final String password)
{
String url = "http://192.168.1.11:57279/api/utente";
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
System.out.println(response);
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
Toast.makeText(MainActivity.this,"Service Unavailable",Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
})
{
@Override
protected Map<String, String> getParams()
{
Map<String,String> map = new HashMap<>();
map.put("user", utente.trim());
map.put("password",password.trim());
return map;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(request);
return request;
}
答案 0 :(得分:0)
String url = "your url";
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println(response);
dialog.dismiss();
try {
// your logic when API sends your some data
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
dialog.dismiss();
Toast.makeText(context,"Service Unavailable",Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
}){
//This is how you will send the data to API
@Override
protected Map<String, String> getParams(){
Map<String,String> map = new HashMap<>();
map.put("name",username.getText().toString());
map.put("password",password.getText().toString());
return map;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(request);
}
答案 1 :(得分:0)
这是一个很好的教程,我已经尝试过并且可以无缝地工作。
Android Login and Registration with PHP, MySQL and SQLite
您可以跳过sqlite和phpMyAdmin部分。
答案 2 :(得分:0)