在 Android Studio 中向 Api 发出 POST 请求
Make POST request to Api in Android Studio
我正在尝试向我在 Visual Studio 中创建的 api 发出 POST 请求。 api 有效,我终于找到了一些允许我连接到它的代码(并且它没有被弃用)。问题是这段代码是为 GET 请求制作的,而我需要制作 POST。我创建了两个框,在其中插入我想要传递的数据(utente、密码),我创建了一个按钮,从 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 对象吗
keys = 用户,密码
values = utente, password(值来自前面提到的两个框)
感谢所有愿意帮助我的人,我希望寻求如此多的帮助不会违反网站规则。
我正在使用 Volley,因为它不是那么复杂,而且它似乎有效。
使用 GET 方法它告诉我现有 json 消息无法转换为 JSON 对象(我不关心这个,它只是确认它连接到 api)
使用 POST 方法,它在最后抛出 ErrorResponse(食物源没有响应)
编辑:添加了 OnCreate 方法,因为我需要一个 StringRequest return
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;
}
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);
}
这是一个很好的教程,我已经试过了,效果很好。
Android Login and Registration with PHP, MySQL and SQLite
您可以跳过 sqlite 和 phpMyAdmin 部分。
它正在解决这个问题:
感谢大家的关注。
我正在尝试向我在 Visual Studio 中创建的 api 发出 POST 请求。 api 有效,我终于找到了一些允许我连接到它的代码(并且它没有被弃用)。问题是这段代码是为 GET 请求制作的,而我需要制作 POST。我创建了两个框,在其中插入我想要传递的数据(utente、密码),我创建了一个按钮,从 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 对象吗keys = 用户,密码
values = utente, password(值来自前面提到的两个框)
感谢所有愿意帮助我的人,我希望寻求如此多的帮助不会违反网站规则。
我正在使用 Volley,因为它不是那么复杂,而且它似乎有效。
使用 GET 方法它告诉我现有 json 消息无法转换为 JSON 对象(我不关心这个,它只是确认它连接到 api)
使用 POST 方法,它在最后抛出 ErrorResponse(食物源没有响应)
编辑:添加了 OnCreate 方法,因为我需要一个 StringRequest return
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;
}
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);
}
这是一个很好的教程,我已经试过了,效果很好。
Android Login and Registration with PHP, MySQL and SQLite
您可以跳过 sqlite 和 phpMyAdmin 部分。
它正在解决这个问题:
感谢大家的关注。