Как использовать curl -F в андроид студии? (с помощью httprequest все в порядке) - PullRequest
0 голосов
/ 21 октября 2019

Я хочу использовать 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, так что я подумал, что это потому, что нужно отправить файл, а не путь к файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...