Я хочу использовать openAPI в Android Studio, и я попытался с помощью команды curl с опцией -F, которая работает только отлично, поэтому я хочу знать, как использовать функцию httprequest, или любой метод http в Android Studio, которая имеет аналогичную функцию сcurl -F метод. Я не могу найти много о опции -F, так что кто-нибудь может мне помочь, что это значит ??
Я пробовал HttpURLConnection с методом POST
curl <URL> -F api_secret=<secret-key> -F image_file=@<file_path -F return_landmark=1 -F return_attributes=<some_options>
выше работает только найти вCMD. В. Что означает @ front для file_path? Я только что попробовал, не зная смысла.
Я также пытался использовать HttpURLConnection.
//HttpRequest.java
package com.jmsmart.UVchecker.util;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class HttpRequester {
HttpTask http;
public void request(String url, HashMap<String, String> param, HttpCallback callback) {
http = new HttpTask(url, param, callback);
http.execute();
}
public void cancel() {
if(http != null)
http.cancel(true);
}
private class HttpTask extends AsyncTask<Void, Void, String> {
String url;
HashMap<String, String> param;
HttpCallback callback;
public HttpTask(String url, HashMap<String, String> param, HttpCallback callback) {
this.url = url;
this.param = param;
this.callback = callback;
}
@Override
protected String doInBackground(Void... nothing) {
String response = "";
String postData = "";
PrintWriter pw = null;
BufferedReader in = null;
//네트워킹 진행
try{
URL text=new URL(url);
HttpURLConnection http=(HttpURLConnection)text.openConnection();
http.setRequestProperty("Content-type","application/x-www-form-urlencoded");//;charset=UTF-8");
http.setConnectTimeout(10*1000);
http.setReadTimeout(10*1000);
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);
if(param!=null && param.size()>0){
Iterator<Entry<String,String>> entries=param.entrySet().iterator();
int index=0;
while(entries.hasNext()){
if(index!=0){
postData=postData+"&";
}
Entry<String,String> mapEntry=(Entry<String,String>) entries.next();
postData=postData+mapEntry.getKey()+"="+mapEntry.getValue();
index++;
}
pw=new PrintWriter(new OutputStreamWriter(http.getOutputStream()));
pw.write(postData);
pw.flush();
}
int status = http.getResponseCode();
if(status != HttpURLConnection.HTTP_OK)
in = new BufferedReader(new InputStreamReader(http.getErrorStream()));
else
in = new BufferedReader(new InputStreamReader(http.getInputStream()));
StringBuffer sb=new StringBuffer();
String inputLine;
while((inputLine=in.readLine())!=null){
sb.append(inputLine);
}
response=sb.toString();
}catch (Exception e){
e.printStackTrace();
}finally {
{
try{
if(pw!=null) pw.close();
if(in!=null) in.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
return response;
}
@Override
protected void onPostExecute(String result) {
//자신에게 전달되는 callback
this.callback.onResult(result);
}
}
}
///mainactivity.java
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.singleimg_sendopenapi2://API에 정보를 보내야하는경우
buttons.setVisibility(View.INVISIBLE);
API.setVisibility(View.VISIBLE);
SendToAPI();
break;
case R.id.singleimg_recam://다시 찍는경우
API.setVisibility(View.INVISIBLE);
buttons.setVisibility(View.VISIBLE);
break;
}
}
private void SendToAPI() {
HashMap<String,String> map=new HashMap<>();
map.put("api_key","<api_key>");
map.put("api_secret","<api_secret>");
//map.put("image_file",file.getAbsolutePath());
map.put("image_file","/storage/emulated/0/Pictures/MYapp/filename.jpg");
map.put("return_landmark","1");
map.put("return_attributes","age");
HttpRequester httpRequester=new HttpRequester();
httpRequester.request("<https form url>",map, httpCallback);
}
HttpCallback httpCallback=new HttpCallback(){
@Override
public void onResult(String result) {
try{
JSONObject root = new JSONObject(result);
TextView res=findViewById(R.id.singleimg_result);
res.setText(root.getString("age"));
} catch (JSONException e) {
e.printStackTrace();
}
}
};
Проблема этого кода в том, что ответ на этот запрос http говорит, что нетimage_file, так что я подумал, что это потому, что нужно отправить файл, а не путь к файлу.