[JAVA] Android Development-WEB Access (POST) Versuchen Sie, mit der Außenwelt zu kommunizieren und Daten zu senden. ~

Einführung

Hallo. Ich bin Wataku, ein serverseitiger Programmierer, der an einer bestimmten Schule Programmieren studiert. : entspannt: Lassen Sie uns auch dieses Mal Android entwickeln. Dieses Mal möchte ich mich mit Android mit einem externen Netzwerk verbinden und Daten senden. Es ist fast das gleiche wie beim letzten GET.

Zielperson

POST-Übertragung

  1. Bereiten Sie eine Zeichenfolge vor, die die zu sendenden Anforderungsparameter mit "&" verbindet.
String postData =“Parameter 1 anfordern= ” +Wert 1+ “ &Parameter 2 anfordern= ” +Wert 2
  1. Setzen Sie die Anforderungsmethode auf POST.
con.setRequestMethod(“POST”)
  1. Aktiviert die Ausgabe von Anforderungsparametern.
con.setDoOutput(true)
  1. Holen Sie sich OutputStream. → Verbinden Sie den Server und die Pipe.
OutputStream os = con.getOutputStream()
  1. Anforderungsparameter senden → Server und Pipe verbinden.
os.write(postData.getByte())
//String(String)Daten können nur gesendet werden, wenn sie in Bytes konvertiert wurden

** (Hinweis) ** * Con.connect () ist für POST nicht erforderlich. * * Progress Wenn Sie ** PublishProgress () ** in "doInBackground ()" von AsyucTask aufrufen, wird "onProgressUpdate ()" im UI-Thread ausgeführt.

private class PostAccess extends AsyucTask< String, String, String > {   
                             ...
  public String doInBackground(String ... parent) {
                         ...
    publishProgress(String);
  }

  public void onProgressUpdate(String ... values) {
    super.onProgressUpdate(values);//Schreiben Sie als Versprechen
  }
}

Beispielcode für POST an Server

public class PostActivity extends AppCompatActivity {

    private static final String ACCESS_URL = "http://xxx.xxx.xx/xx/~~~.php";

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

    public void sendButtonClick(View view) {
        EditText etName = findViewById(R.id.etName);
        EditText etComment = findViewById(R.id.etComment);
        TextView tvProcess = findViewById(R.id.tvProcess);
        TextView tvResult = findViewById(R.id.tvResult);

        tvProcess.setText("");
        tvResult.setText("");

        String name = etName.getText().toString();
        String comment = etComment.getText().toString();

        PostAccess access = new PostAccess(tvProcess, tvResult);
        access.execute(ACCESS_URL, name, comment);
    }

    private class PostAccess extends AsyncTask<String, String, String> {
        private static final String DEBUG_TAG = "PostAccess";
        private TextView _tvProcess;
        private TextView _tvResult;
        private boolean _success = false;

        public PostAccess(TextView tvProcess, TextView tvResult) {
            _tvProcess = tvProcess;
            _tvResult = tvResult;
        }

        @Override
        public String doInBackground(String... params) {
            String urlStr = params[0];
            String name = params[1];
            String comment = params[2];

            String postData = "name= " + name + "&comment=" + comment;
            HttpURLConnection con = null;
            InputStream is = null;
            String result = "";

            try {
                publishProgress(getString(R.string.msg_send_before));
                URL url = new URL(urlStr);
                con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("POST");
                con.setConnectTimeout(5000);
                con.setReadTimeout(5000);
                con.setDoOutput(true);
                OutputStream os = con.getOutputStream();
                os.write(postData.getBytes());
                os.flush();
                os.close();
                int status = con.getResponseCode();
                if (status != 200) {
                    throw new IOException("Statuscode: " + status);
                }
                publishProgress(getString(R.string.msg_send_after));
                is = con.getInputStream();

                result = is2String(is);
                _success = true;
            }
            catch(SocketTimeoutException ex) {
                publishProgress(getString(R.string.msg_err_timeout));
                Log.e(DEBUG_TAG, "Auszeit", ex);
            }
            catch(MalformedURLException ex) {
                publishProgress(getString(R.string.msg_err_send));
                Log.e(DEBUG_TAG, "Fehler bei der URL-Konvertierung", ex);
            }
            catch(IOException ex) {
                publishProgress(getString(R.string.msg_err_send));
                Log.e(DEBUG_TAG, "Kommunikationsfehler", ex);
            }
            finally {
                if (con != null) {
                    con.disconnect();
                }
                try {
                    if (is != null) {
                        is.close();
                    }
                }
                catch (IOException ex) {
                    publishProgress(getString(R.string.msg_err_parse));
                    Log.e(DEBUG_TAG, "InputStream-Analyse fehlgeschlagen", ex);
                }
            }
            return result;
        }

        @Override
        public void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            String message = _tvProcess.getText().toString();
            if (!message.equals("")) {
                message += "\n";
            }
            message += values[0];
            _tvProcess.setText(message);
        }

        @Override
        public void onPostExecute(String result) {
            if (_success) {
                String name = "";
                String comment = "";
                onProgressUpdate(getString(R.string.msg_parse_before));
                try {
                    JSONObject rootJson = new JSONObject(result);
                    name = rootJson.getString("name");
                    comment = rootJson.getString("comment");
                }
                catch (JSONException ex) {
                    onProgressUpdate(getString(R.string.msg_err_parse));
                    Log.e(DEBUG_TAG, "JSON-Analyse fehlgeschlagen", ex);
                }
                onProgressUpdate(getString(R.string.msg_parse_after));

                String message = getString(R.string.dlg_msg_name) + name + "\n" + getString(R.string.dlg_msg_comment) + comment;
                _tvResult.setText(message);
            }
        }

        private String is2String(InputStream is) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            StringBuffer sb = new StringBuffer();
            char[] b = new char[1024];
            int line;
            while(0 <= (line = reader.read(b))) {
                sb.append(b, 0, line);
            }
            return sb.toString();
        }
    }
}

das ist alles. Wenn Sie Vorschläge wie etwas falsches haben, kontaktieren Sie uns bitte. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Android Development-WEB Access (POST) Versuchen Sie, mit der Außenwelt zu kommunizieren und Daten zu senden. ~
Android-Entwicklung - WEB-Zugriff (GET) Versuchen Sie, Daten durch Kommunikation mit der Außenwelt abzurufen. ~
Zurück zum Anfang und erste Schritte mit Java ① Datentypen und Zugriffsmodifikatoren
Führen Sie logstash mit Docker aus und versuchen Sie, Daten in Elastic Cloud hochzuladen
Lesen Sie die Daten der Shizuoka Prefecture Point Cloud DB mit Java und versuchen Sie, die Baumhöhe zu ermitteln.
So ändern Sie die maximale und maximale Anzahl von POST-Daten in Spark
Senden und verarbeiten Sie Formulardaten mit FormData-Objekt und Commons File Upload an Servlet
Android App: Versuchen Sie, Ereignisse und Hörer zusammenzufassen
Versuchen Sie, das gemeinsame Layout mit Schienen zusammenzufassen
NLP4J Versuchen Sie eine Twitter-Analyse mit Twitter4J und NLP4J (Datenerfassung)
Greifen Sie mit Get on Android auf die Web-API zu und verarbeiten Sie Json (vorerst Java).
So machen Sie einen Screenshot mit dem Android Studio-Emulator
[MT] Geben Sie die Artikelkategorie von Android mit Daten-API an
Android App, die Bilder aus der Galerie auswählt und anzeigt
Erstellen Sie eine API zum Senden und Empfangen von Json-Daten mit Spring
[MT] Geben Sie die Artikelkategorie von Android mit Daten-API an
Senden Sie den Wert des Beschleunigungssensors per UDP von Android an den PC
Technische Ursachen und Gegenmaßnahmen für die Punkte, denen ich mit der ersten Android-App und Kotlin verfallen war