String in JSON Format

benj98

benj98

Neues Mitglied
0
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/textView"
android:layout_width="273dp"
android:layout_height="111dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="73dp"
android:text="Test"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="216dp"
android:layout_height="43dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="230dp" />

</RelativeLayout>
 
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:
Hallo Jogimuc
Danke für die Antwort.

jogimuc schrieb:
Eine Frage nebenbei wie Programmierst du deine MC in C, Assembler oder Basic ?
Wenn du C kannst ist ja Java nicht so weit weg.

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.

benj98 schrieb:
private void log(String qrCode) { Intent intent = new Intent("ch.appquest.intent.LOG");

lg Benj.
 
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 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:
Ja, also Ansi C in der Schule.

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

lg Benj
 

Ähnliche Themen

D
Antworten
17
Aufrufe
398
datNeMo
D
D
Antworten
23
Aufrufe
2.513
Data2006
D
W
Antworten
16
Aufrufe
843
jogimuc
J
Zurück
Oben Unten