1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
Schlagworte:
  1. benj98, 17.09.2018 #1
    benj98

    benj98 Threadstarter Neuer Benutzer

    Hallo Zusammen, also kurz mal etwas zu mir:

    Ich heiße Benjamin und wohne in Zürich. Ich bin 20 Jahre alt und manchmal übernehme ich mich sehr gerne bei Projekte :biggrin: Mit Modellbau, Kamera und Arduino aufgewachsen mache ich nun eine Elektroniker Lehre.
    Erfahrungen habe ich vor allem in der Mikrocontroller Programmierung. Sehr wenig bis keine in Java.

    Soviel zu mir.

    Nun Zum Projekt: (Was viel interessanter ist :winki:)
    Es ist eine Aufgabe von einem Wettbewerb bei dem ich mich einfach mal angemeldeten habe :) Mit Beispielcodes habe ich nun auch die APP erstellen können und kompilieren. Nun stehe ich jedoch beim Logbuch Eintrag fest. Aber zuerst mal langsam von vorne:

    Die APP misst die Magnetfeldstärke und detektiert so ein Metallgegenstand in einer Box. Der Wert wird als TextView ausgegeben und mit einer progressBar dargestellt. Soweit so gut.


    Mit dieser Funktion bestimme ich erst die Entsprechende "Schatztruhe" mit einem QR-Code drauf. Dieser Scanne ich mit der Activity aus der ZXing Barcode Scanner APP. (com.google.zxing.client.android.SCAN) Danach habe ich der größten Teil des Code kopiert, da ich ein Anfänger bin und so alles schön präsentiert wurde. :biggrin:

    Ich muss schlussendlich, das was ich eingescannt habe auf den Server des Veranstalters Speichern. Und zwar in der folgender Form:
    Code:
    {
      "task": "Metalldetektor",
      "solution": "$Lösungswort"
    }
    Also als String in JSON-Format. Nun ist es für mich nicht mehr ganz klar, wie das umzusetzen ist. Also wie ich die Daten aufarbeite soll.


    Nun am besten stelle ich mal den Code hier rein, evtl. kann mir jemanden helfen. Mit der Dokumentation bin ich selbst nicht weiter gekommen, da mein Englisch eingerostet ist und meine Java Erfahrungen... naja

    MainActivity
    Code:
    package ch.brandt_art.metallv3;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    import android.widget.Toast;
    
    
    
    public class MainActivity extends AppCompatActivity implements SensorEventListener {
    
        private SensorManager sensorManager;
        private Sensor magnetic_fieldSensor;
        private TextView textView;
        private ProgressBar progressBar;
    
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView (R.layout.activity_main);
            textView=(TextView) findViewById(R.id.textView);
    
            progressBar = (ProgressBar) findViewById(R.id.progressBar);
            progressBar.setMax (15000);
    
            sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            magnetic_fieldSensor = sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD).get(0);
    
        }
    
    
        protected void onResume(){
            super.onResume();
            sensorManager.registerListener(this,magnetic_fieldSensor,SensorManager.SENSOR_DELAY_NORMAL);
        }
    
        protected void onPause(){
            super.onPause();
            sensorManager.unregisterListener(this);
        }
    
        public void onSensorChanged(SensorEvent event){
    
            float[] mag = event.values;
            double abs = Math.sqrt(mag[0]*mag[0]+mag[1]*mag[1]+mag[2]*mag[2]);
    
            if(abs<0)
            {
                abs=abs*-1;
            }
    
            textView.setText(("Magnetstärke: "+ String.format("%.2f", abs) ));
            progressBar.setProgress((int) abs* 100);
    
    
        }
    
    
    
        //                      Logbuch _Eintrag                              //
        //--------------------------------------------------------------------//
        private static final int SCAN_QR_CODE_REQUEST_CODE = 0;
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuItem menuItem = menu.add("Log");
            menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
    
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                    intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                    startActivityForResult(intent, SCAN_QR_CODE_REQUEST_CODE);
                    return false;
                }
            });
    
            return super.onCreateOptionsMenu(menu);
        }
    
        private void log(String qrCode) {
            Intent intent = new Intent("ch.appquest.intent.LOG");
    
            if (getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
                Toast.makeText(this, "Logbook App not Installed", Toast.LENGTH_LONG).show();
                return;
            }
    
            // Achtung, je nach App wird etwas anderes eingetragen
            String logmessage  = ("task: Metallsetektor, solution: sqrCode");
            intent.putExtra("ch.appquest.logmessage", logmessage);
            startActivity(intent);
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent intent) {
            if (requestCode == SCAN_QR_CODE_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    String logMsg = intent.getStringExtra("SCAN_RESULT");
                    // Weiterverarbeitung..
    
    
                }
            }
        }
    
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
        }
    
    }
    
    Entsprechend XML
     
  2. jogimuc, 18.09.2018 #2
    jogimuc

    jogimuc Erfahrener Benutzer

    Hallo willkommen hier im Forum.

    Schön das du auch persönliche dinge hier erzählst macht nicht jeder.

    So zu Thema.

    Deinen Json String kannst du so zB. Erstellen. Wobei für "Metalldetektor" und "$Lösungswort" sicherlich Variablen benutzt werden sollen.

    Anschließend kannst du daraus einen String erstellen ob nun in der Kompakten Form, ohne Zeilenumbruch und Einrücken, oder in einer für Menschen besser Lesbaren Form, mit Einrücken und Zeilenumbruch ist dir überlassen. Hier habe ich zwei Zeichen zum Einrücken gewählt.

    Wie soll denn der String an den Server geschickt werden?

    Code:
    String buildJsonString(){
            JSONObject obj = new JSONObject();
            String st = "";
            try {
                obj.put("task","Metalldetektor");
                obj.put("solution","$Lösungswort");
                // einen String aus dem Objekt erstellen
                st = obj.toString(2); // mit Zeilenumpruch und Einrücken
    
                // Kompakter String ohne Einrücken und Zeilenumbruch
                //   st = obj.toString();
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
           return st;
        }
    Eine Frage nebenbei wie Programmierst du deine MC in C, Assembler oder Basic ?
    Wenn du C kannst ist ja Java nicht so weit weg.

    lg J.
     
    Zuletzt bearbeitet: 18.09.2018
  3. benj98, 19.09.2018 #3
    benj98

    benj98 Threadstarter Neuer Benutzer

    Hallo Jogimuc
    Danke für die Antwort.

    Ja das meiste habe ich mir jedoch durch Forums selbst bei gebracht und in der Lehre sind wir noch an der Basics dran. (Also if, switch......)

    Also "Metalldetektor" ist der Name der Aufgabe, da schlussendlich 5 verschiedene Aufgaben gestellt werden.
    Auf dem Smartphone ist noch ein zusätzliches App, die das Upladen und das Sammeln der Punkte übernimmt. Das Logg App liest den intent ch.appquest.intetn.Log aus und schreibt nur die richtig formatierten Daten auf den Server. Darum ist es auch so wichtig, dass das Format stimmt.

    lg Benj.
     
  4. jogimuc, 19.09.2018 #4
    jogimuc

    jogimuc Erfahrener Benutzer

    Also gehe ich davon aus das es C- ist. Denn Java für einen MC kenne ich nicht. Da kommt normalerweise strukturierte Programmierung zum Einsatz und nicht OOP.

    Ok das mit der zweiten App habe ich mir schon gedacht. das hast du auch schon vorbereitet in deiner App.
    Nun solte es kein Problem mehr sein.

    Arber so einen einfachen String kann man auch mit den normalen String Operationen erstellen.
    Für Große Komplexe Strings ist das über ein Json Objekt einfacher.
    Der Lehrer dachte bestimmt das ihr das von Hand macht den String zu erzeugen.
     
    Zuletzt bearbeitet: 19.09.2018
  5. benj98, 20.09.2018 #5
    benj98

    benj98 Threadstarter Neuer Benutzer

    Ja, also Ansi C in der Schule.

    Als Feedback: Das App funktioniert nun. :biggrin:
    Danke viel Mal für die Hilfe.

    lg Benj
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
String als Datei (eigene Dateiendung) sharen Android App Entwicklung 09.08.2018
Abfrage editText-Felder TextUtils Android App Entwicklung 29.01.2018
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.