HTTP-сообщение из приложения Android в веб-сервис в Python Flask - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно отправить строку Base64 из приложения Android в веб-сервис Python, используя сообщение HTTP. Я хочу получить строку и вернуть ее на веб-странице, но проблема в том, что я не могу получить строку.

На стороне Android я выбрал файл из хранилища и закодировал его в строку base64. Затем я использовал Volley для отправки HTTP-запроса. С другой стороны, я использовал Flask для создания веб-службы.

Это основная активность моего приложения для Android:

public class MainActivity extends AppCompatActivity {

Button button1;

Intent intent;
TextView text;
private static final int READ_REQUEST_CODE = 42;

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

    button1 = findViewById(R.id.button1);
    text = findViewById(R.id.text);

    button1.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {

            intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            intent.setType("application/vnd.android.package-archive");
            startActivityForResult(intent, READ_REQUEST_CODE);
        }

    });


}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {

        Uri uri = null;
        uri = data.getData();
        //Toast.makeText(MainActivity.this, uri.toString(), Toast.LENGTH_LONG).show();

        try {
            final String conv = readTextFromUri(uri);
            //text.setText(conv);

            ////////REQUEST////////
            RequestQueue queue = Volley.newRequestQueue(this);
            String url = "http://10.0.2.2:5000";

            StringRequest postRequest = new StringRequest(Request.Method.POST, url,
                    new Response.Listener<String>()
                    {
                        @Override
                        public void onResponse(String response) {
                            // response
                            text.setText("Response is: "+ response.substring(0,500));
                        }
                    },
                    new Response.ErrorListener()
                    {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            // error
                            text.setText("That didn't work!");
                        }
                    }
            ) {

                @Override
                protected Map<String, String> getParams()
                {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("conv", conv);

                    return params;
                }
            };
            queue.add(postRequest);
            ////////END_REQUEST////////



        }
        catch (IOException e) {

        }

    }
}


            ////////ENCODE/////////
private String readTextFromUri(Uri uri) throws IOException {

    InputStream inputStream = getContentResolver().openInputStream(uri);
    byte[] buffer = new byte[8192];
    int bytesRead;

    ByteArrayOutputStream output = new ByteArrayOutputStream();
    Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT);
    try {
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            output64.write(buffer, 0, bytesRead);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    output64.close();

    String attachedFile = output.toString();

    return attachedFile;

}
            ////////THE END OF ENCODE////////

}

Пока это мой веб-сервис на Python:

from flask import Flask, request

app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def call_cortex():
    if request.method == 'POST':
        fileb64 = request.form['conv']
        return fileb64
    else:
        return 'Errore!'

На данный момент результаты таковы:

Приложение Android показывает

Response is + (part of base64 string)

Веб-сервис показывает "Errore!" это

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