- Forum-Beiträge: 602
06.01.2021, 18:11:56 via Website
06.01.2021 18:11:56 via Website
Hallo zusammen
Jenachdem wo ich die TextView im Code befülle wird der Text nicht ausgegeben.
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
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.