TextView zeigt nichts

  • Antworten:3
Robbiani Renato
  • Forum-Beiträge: 602

06.01.2021, 18:11:56 via Website

Hallo zusammen

Jenachdem wo ich die TextView im Code befülle wird der Text nicht ausgegeben.

image

Wenn ich die TextView "obj_sunpolar" vor der Zeile 86 beschreibe, dann wird der Text angezeigt. Was weiter unten ist, kommt der Text nicht mehr an.
Warum?
Ich habe es mit einem einfachen String versucht. Mir ist klar, dass das die Klasse "calc" erst später berechnet werd. Trotzdem wird auf dem Display nichts ausgegeben.

package ch.robbisoft.sun_app;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import androidx.appcompat.app.AppCompatActivity;

import android.util.Log;
import android.widget.SeekBar;
import android.widget.TextView;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class BildSonne extends AppCompatActivity implements SensorEventListener, Runnable {

private Context ctx;
private final static double pi = Math.PI;
private final static double DEG = pi/180.0;
private static final double FAKTOR = 180 / pi;
private static final long START = 500;

private SensorManager manager = null;
private Sensor sensor_accels = null;
private Sensor sensor_magnet = null;
private Handler macher = new Handler();

private TextView obj_azimuth;
private TextView obj_polar;
private TextView obj_rollen;

private float accels[] = new float[3];
private float mags[] = new float[3];
private float pool_accels[][] = new float[10][3];
private float pool_mags[][] = new float[10][3];
private int n_accels = 0;
private int n_mags = 0;
private float[] f_werte = new float[3];
private float azimuth = 0.0f;
private float polar = 0.0f;
private float roll = 0.0f;

private static final String DD_MM_YYYY = "dd.MM.yyyy";
private SimpleDateFormat sdf;
private static final String DD_MM_YYYY_HH = "dd.MM.yyyy HH:mm";
private SimpleDateFormat sdf_time;
private String str_datum;
private Date dat_datum;
private Double d_breit, d_lang;
private Integer n_zone;
private boolean b_sommerz;
private Astronomy rechner = null;
private Astronomy.Coor posi = null;

//neue Berechnung
private SonnePos calc = null;
private Calendar kalender = null;

private TextView obj_sunazimut;
private TextView obj_sunpolar;

private TextView obj_zeit;
private SeekBar obj_seek;

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

    ctx = getApplicationContext();

    obj_sunazimut = (TextView) findViewById(R.id.txt_sunazimuth);
    obj_sunpolar = (TextView) findViewById(R.id.txt_sunpolar);

    //neue Berechnung
    calc = new SonnePos();
    kalender = Calendar.getInstance();
    try {
        sdf_time = new SimpleDateFormat(DD_MM_YYYY_HH);
        str_datum += " 12:00";//Sommerzeit muss noch berücksichtigt werden!
        dat_datum = sdf_time.parse(str_datum);
        kalender.setTime(dat_datum);
        calc.rechne(kalender, d_breit, d_lang);
        obj_sunazimut.setText(String.format("%.8f", (calc.getAzimuth())));
        obj_sunpolar.setText(String.format("%.8f", (calc.getPolar())));
    } catch (ParseException e) {
        e.printStackTrace();
        Log.e("BildSonne", e.getMessage());
    }

    obj_azimuth = (TextView) findViewById(R.id.txt_azimuth);
    obj_polar = (TextView) findViewById(R.id.txt_polar);
    obj_rollen = (TextView) findViewById(R.id.txt_rollen);
    obj_zeit = (TextView) findViewById(R.id.txt_zeit);
    obj_seek = (SeekBar) findViewById(R.id.seek_zeit);

    manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensor_accels = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensor_magnet = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

    macher.post(new Runnable() {
        @Override
        public void run() {
            calc_pos();
            macher.postDelayed(this, START);
        }
    });

    if (null == savedInstanceState) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, Camera2BasicFragment.newInstance())
                .commit();
    }

    //Zeitschieber
    obj_seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            obj_zeit.setText(Integer.toString(progress) + " " + getResources().getString(R.string.lbl_uhr));

            //neue Berechnung
            calc = new SonnePos();
            kalender = Calendar.getInstance();
            try {
                sdf_time = new SimpleDateFormat(DD_MM_YYYY_HH);
                str_datum += (" " + Integer.toString(progress) + ":00");//Sommerzeit muss noch berücksichtigt werden!
                dat_datum = sdf_time.parse(str_datum);
                kalender.setTime(dat_datum);
                calc.rechne(kalender, d_breit, d_lang);
                obj_sunazimut.setText(String.format("%.8f", (calc.getAzimuth())));
                obj_sunpolar.setText(String.format("%.8f", (calc.getPolar())));
            } catch (ParseException e) {
                e.printStackTrace();
                Log.e("BildSonne", e.getMessage());
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

// obj_zeit.setText(Integer.toString(obj_seek.getProgress()));
}
});
}

@Override
public void onSensorChanged(SensorEvent event) {
      switch( event.sensor.getType() ){
        case Sensor.TYPE_ACCELEROMETER : {

// accels = event.values.clone();
pool_accels[n_accels] = event.values.clone();
if( n_accels > 8 ){
accels = durchschnit( pool_accels );
n_accels = 0;
}
n_accels++;
break;
}
case Sensor.TYPE_MAGNETIC_FIELD : {
// mags = event.values.clone();
pool_mags[n_mags] = event.values.clone();
if( n_mags > 8 ){
mags = durchschnit( pool_mags );
n_mags = 0;
}
n_mags++;
}
}
}

private float[] durchschnit(float[][] pool) {
    float res[] = {0f, 0f, 0f};

    for(int i=0; i < 10 ;i++){
        res[0] += pool[i][0];
        res[1] += pool[i][1];
        res[2] += pool[i][2];
    }
    res[0] /= 10;
    res[1] /= 10;
    res[2] /= 10;

    return res;
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

private void calc_pos(){
    if (mags != null && accels != null) {
        float[] gravity = new float[9];
        float[] magnetic = new float[9];
        manager.getRotationMatrix(gravity, magnetic, accels, mags);
        float[] outGravity = new float[9];
        manager.remapCoordinateSystem(gravity, SensorManager.AXIS_X, SensorManager.AXIS_Z, outGravity);
        manager.getOrientation(outGravity, f_werte);

        azimuth = (float) (f_werte[0] * FAKTOR);
        polar = (float) (f_werte[1] * FAKTOR);
        roll = (float) (f_werte[2] * FAKTOR);

        mags = null;
        accels = null;
    }
    obj_azimuth.setText(Long.toString(Math.round(azimuth)));
    obj_polar.setText(Long.toString(Math.round(polar)));
    obj_rollen.setText(Long.toString(Math.round(roll)));
}

@Override
protected void onResume() {
    super.onResume();
    manager.registerListener(this, sensor_accels, SensorManager.SENSOR_DELAY_NORMAL);
    manager.registerListener(this, sensor_magnet, SensorManager.SENSOR_DELAY_NORMAL);
    macher.postDelayed(this, START);
}

@Override
protected void onPause() {
    manager.unregisterListener(this);
    macher.removeCallbacks(this);
    super.onPause();
}

@Override
public void run() {

}

}

Was läuft hir schief?

Gruss Renato

Kommentieren
Robbiani Renato
  • Forum-Beiträge: 602

06.01.2021, 18:39:45 via Website

Problem erkannt!
Beim parsen läuft was schief und er geht bei catch durch. Und ich dachte ich sei perfekt. Na ja so kann man sich irren.

Gruss Renato

Hilfreich?
Kommentieren
jeotalline
  • Forum-Beiträge: 14

24.03.2021, 22:39:53 via Website

thank you

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

25.03.2021, 09:31:39 via Website

Hallo
sdf_time = new SimpleDateFormat(DD_MM_YYYY_HH);
str_datum += " 12:00";
dat_datum = sdf_time.parse(str_datum);

Da sollte dein Datums String schon so aussehen wie du ihn in Simpledateformat Definiert hast.

DD_MM_YYYY_HH
25_03_2021_09 Minuten hast du ja nicht

— geändert am 25.03.2021, 15:03:04

Hilfreich?
Kommentieren