Невозможно использовать намерение для перемещения данных в другой вид деятельности - PullRequest
0 голосов
/ 01 мая 2020

Это мое первое занятие, и всякий раз, когда я пытаюсь передать удвоенные значения "широта и долгота", используя Intent, происходит сбой приложения, я не знаю, что еще делать.

Я видел, что если я не добавлю startActivity (Intent) ii, то не сделаю sh.

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


    //
    requestPermission();
    //
    client = LocationServices.getFusedLocationProviderClient(this);
    Button button = findViewById(R.id.getLocation);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

                    if(ActivityCompat.checkSelfPermission(MainActivity.this, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
                        return;
                    }

                client.getLastLocation().addOnSuccessListener(MainActivity.this, new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        if (location != null) {
                            TextView textView = findViewById(R.id.location);
                            textView.setText(location.toString());


                        }
                    double latitude = location.getLatitude();
                    double longitude = location.getLongitude();


                    Intent intent = new Intent(getApplicationContext(), MapsActivity.class);
                    intent.putExtra("Lat",latitude);
                    intent.putExtra("Lon",longitude);
                    startActivity(intent);

                     }


                });
        }
    });

Это еще одно занятие

надеюсь, оно поможет найти ошибка, я не знаю, почему эта строка может вызвать такое большое число

спасибо в advaced

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {

private GoogleMap mMap;

public static final String FILENAME = "filename";

private ArrayList<Entity> selectedSat;

String fileName;
MenuItem favItem;




private DecimalFormat df = new DecimalFormat("#.00");

private Frame earthFixedFrame;
private OneAxisEllipsoid earth;
protected GeodeticPoint pointPlot = null;
protected Marker currentMarker = null;
protected Polyline line = null;
protected Polyline pastLine = null;
public static final int PATTERN_DASH_LENGTH_PX = 20;
public static final int PATTERN_GAP_LENGTH_PX = 20;
public static final PatternItem DOT = new Dot();
public static final PatternItem DASH = new Dash(PATTERN_DASH_LENGTH_PX);
public static final PatternItem GAP = new Gap(PATTERN_GAP_LENGTH_PX);
public static final List<PatternItem> PATTERN_POLYGON_ALPHA = Arrays.asList(GAP, DASH);
protected ArrayList<Marker> markers = new ArrayList<>();

boolean initial = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_ACTION_BAR);

    Drawable fav = getDrawable(R.drawable.favoritesicon);
    fav.setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.MULTIPLY);

    selectedSat = SatelliteSelectActivity.getSelectedSat(); //Pulls a list of selected satellites from the previous activity
    System.out.println(selectedSat.get(0).getName());

    setContentView(R.layout.activity_maps);


    ActionBar ab = getSupportActionBar();
    if (ab != null) {
        ab.setTitle(selectedSat.get(0).getName().trim());
    }

    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    fileName = getIntent().getStringExtra(FILENAME);

    int i = 0;

    System.out.println(selectedSat.get(i).getName());   //Prints Entity Name to the Console

    try {
        System.out.println("Velocidad:");
        System.out.println(selectedSat.get(i).getVelocity());       //Prints the velocity of the entity
    } catch (OrekitException e) {
        e.printStackTrace();
    }
}

public void onBackPressed() {       //Runs when you exit the activity
    selectedSat.clear();            //Clears the satellite list
    System.out.println("Terminar con el mapa");        //Prints to the console that we are done with the Maps activity
    initial = false;                //Boolean variable specifying we are dealing with the first satellite
    Intent intent = new Intent(getApplicationContext(), SatelliteSelectActivity.class);
    startActivity(intent);
    this.finish();                  //Closes the activity
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {     //Creates action bar in the MapsActivity UI

    MenuInflater item = getMenuInflater();     //Specifies the item fit
    item.inflate(R.menu.actionbar, menu);   //Fits the menu to the item fit
    setTitle("SatFun");                  //Sets the action bar title
    favItem = menu.findItem(R.id.actionbar_fav);
    checkifFavorite(); // see if sat is favorite
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {       //Called when icon in the action bar is selected

    switch (item.getItemId()) {


        case R.id.actionbar_fav:
            selectedSat = SatelliteSelectActivity.getSelectedSat();
            String fileName = getIntent().getStringExtra(FILENAME);

            if (!Favorites.contains(selectedSat.get(0).getName(), fileName, getApplicationContext())) {
                item.setIcon(R.drawable.favoritesicon_filled);
                for (int i = 0; i < selectedSat.size(); i++)
                    try {
                        Favorites.addFavorite(selectedSat.get(i).getName(), selectedSat.get(i).getLine1(), selectedSat.get(i).getLine2(), fileName, getApplicationContext());
                        return true;
                    } catch (OrekitException e) {
                        e.printStackTrace();
                    }
            } else {
                item.setIcon(R.drawable.favoritesicon);
                for (int i = 0; i < selectedSat.size(); i++) {
                    try {
                        boolean removed = Favorites.removeFavorite(selectedSat.get(i).getName(), selectedSat.get(i).getLine1(), selectedSat.get(i).getLine2(), fileName, getApplicationContext());
                        System.out.print(removed);
                    } catch (OrekitException e) {
                        e.printStackTrace();
                    }
                }
                return true;
            }

        case R.id.actionbar_info:
            ConstraintLayout satInfo = findViewById(R.id.satelliteInfo);
            if (satInfo.getVisibility() == View.INVISIBLE) {
                satInfo.setVisibility(View.VISIBLE);
            } else {
                satInfo.setVisibility(View.INVISIBLE);
            }
    }
    return super.onOptionsItemSelected(item);
}




@Override
public void onMapReady(final GoogleMap googleMap) {
    mMap = googleMap;


    mapUpdater(getCreatedTime());

}

private int incr = 0;


public void mapUpdater(Date date) {

    if (date == null) {
        dateTime = getCreatedTime();
    } else {
        dateTime = date;
    }

    new Thread() {
        public void run() {
            System.out.println("Nueva");
            while (incr++ < 1000) {
                try {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            try {
                                updateMap();
                            } catch (OrekitException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }.start();

}

private void setPastLine(AbsoluteDate date, double satPeriod) {
    ArrayList<LatLng> plotPoints = new ArrayList<>();
    for (int k = 0; k < 50; k++) {
        int period = (int) Math.round(satPeriod);
        int periodMin = (period / 100);
        System.out.println("DATE: " + date);
        pointPlot = updatePosition(date, 0);
        System.out.println("FRAGMENT (width, height): " + findViewById(R.id.map).getWidth() + "   " + findViewById(R.id.map).getHeight());
        double longitude = pointPlot.getLongitude() * 180 / Math.PI;
        double latitude = pointPlot.getLatitude() * 180 / Math.PI;

        //Creates map objects
        LatLng point_a = new LatLng(latitude, longitude);
        MarkerOptions point = new MarkerOptions().position(point_a);

        plotPoints.add(point_a);
        date = new AbsoluteDate(date, -periodMin);
    }

    pastLine = mMap.addPolyline(new PolylineOptions().addAll(plotPoints));
    pastLine.setWidth(5);//Sets width of polyline
    pastLine.setPattern(PATTERN_POLYGON_ALPHA);
    pastLine.setColor(Color.RED);
}

private Date getCreatedTime() {  //Creates a new date with the current time and returns it
    return new Date();
}

private Date dateTime = null;



private void updateMap() throws OrekitException {

    System.out.println("Entering update map");
    if (dateTime == null) {
        dateTime = getCreatedTime();
    }
    AbsoluteDate date;

    for (int i = 0; i < selectedSat.size(); i++) {

        double satNum = selectedSat.get(i).getSatNum();
        TextView satNumberText = findViewById(R.id.satelliteNumber);







        String satelliteNumberString = "Número De Satelite: " + Math.round(satNum);
        satNumberText.setText(satelliteNumberString);


        TimeScale utc = TimeScalesFactory.getUTC();




        ArrayList<LatLng> plotPoints = new ArrayList<>();
        Calendar calendar = GregorianCalendar.getInstance();

        double satPeriod = selectedSat.get(i).getPeriod();
        int period = (int) Math.round(satPeriod);
        int periodMin = (period / 100);
        System.out.println("Interval: " + periodMin);
        calendar.setTime(dateTime);

        System.out.println(calendar.get(Calendar.YEAR));
        calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        date = new AbsoluteDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), utc); //creates orekit absolute date from calender

        this.initializeFrames();

        pointPlot = updatePosition(date, 0);

        String velocityString = df.format(selectedSat.get(i).getVelocity() * 3.6);

        velocityString = "Velocidad: " + velocityString + "km/h";

        TextView satVelocity = findViewById(R.id.velocity);
        satVelocity.setText(velocityString);


        //Finds longitude
        double longitude = pointPlot.getLongitude() * 180 / Math.PI;
        String longitudeString = "Longitud: " + df.format(longitude);
        TextView satLongitude = findViewById(R.id.satLongitude);
        satLongitude.setText(longitudeString);


        //Finds latitude
        double latitude = pointPlot.getLatitude() * 180 / Math.PI;
        String latitudeString = "Latitud: " + df.format(latitude);
        TextView satLatitude = findViewById(R.id.satLatitude);
        satLatitude.setText(latitudeString);


        double altitude = pointPlot.getAltitude() / 1000;
        TextView satAltitude = findViewById(R.id.satAltitude);
        String altitudeString = "Altitud: " + df.format(altitude) + "km";
        satAltitude.setText(altitudeString);



        //CALCULOS
        double longi= 78.5082717;
        double lati=0.245496;
        double delta1 = Math.abs(longitude);
        double delta = Math.abs(delta1-longi);

        double elev=Math.atan(((Math.cos(lati)*Math.cos(delta))-(6378/42164))/Math.sin(Math.acos(Math.cos(lati)*Math.cos(delta))));
        double az1 = Math.tan(Math.toDegrees(delta));
        double az2 = Math.sin(Math.toDegrees(lati));
        double az3 = Math.toDegrees(az1/az2);
        double az = Math.abs(Math.toDegrees(Math.atan(az3)));

        double dis1 = (Math.cos(Math.toRadians(lati)));
        double dis2 = (Math.cos(Math.toRadians(delta)));
        double dis3 = (dis1*dis2);
        double dis4 = (1-dis3);
        double dis5 = (0.41999*dis4);
        double dis6 = (1+dis5);
        double dis = (35786.04*(Math.sqrt(dis6)));




        TextView satdelta = findViewById(R.id.satdelta);
        String deltaString = "Delta: " + df.format(delta);
        satdelta.setText(deltaString);

        TextView azimuts = findViewById(R.id.azimut);
        String AzimutString = "Azimut: " + df.format(az);
        azimuts.setText(AzimutString);

        TextView disf = findViewById(R.id.distancia);
        String disString = "Distancia: " + df.format(dis) + "Km";
        disf.setText(disString);




        //////////////////////////////////////////////////////////



        System.out.println("Latitud: " + latitude);
        System.out.println("Longitud: " + longitude);
        System.out.println("PERIODO: " + periodMin);




        for (int k = 0; k < 300; k++) {

            System.out.println("DATE: " + date);
            pointPlot = updatePosition(date, i);
            System.out.println("FRAGMENT (width, height): " + findViewById(R.id.map).getWidth() + "   " + findViewById(R.id.map).getHeight());
            longitude = pointPlot.getLongitude() * 180 / Math.PI;
            latitude = pointPlot.getLatitude() * 180 / Math.PI;

            //Creates map objects
            LatLng point_a = new LatLng(latitude, longitude);
            MarkerOptions pointA = new MarkerOptions().position(point_a);

            if (k == 0) {
                if(currentMarker != null) {
                    currentMarker.remove();
                }
                if(line != null) {
                    line.remove();
                }
                if(pastLine != null) {
                    pastLine.remove();
                }
             }
                pointA.title(selectedSat.get(i).getName().trim() + "Poscicion Actual");
                if (initial) {
                    initial = false;
                    mMap.moveCamera(CameraUpdateFactory.newLatLng(point_a));
                }
            }
            plotPoints.add(point_a);
            date = new AbsoluteDate(date, periodMin);
        }
        date = new AbsoluteDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), utc); //creates orekit absolute date from calender
        setPastLine(date, satPeriod);

        line = mMap.addPolyline(new PolylineOptions().addAll(plotPoints));
        line.setWidth(5);
        line.setColor(Color.RED);
    }
}

    private void initializeFrames() {

    try {
        Frame f;
        f = CelestialBodyFactory.getEarth().getBodyOrientedFrame();

        earthFixedFrame = FramesFactory.getTEME();

        earth = new OneAxisEllipsoid(
                Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
                Constants.WGS84_EARTH_FLATTENING,
                f);
    } catch (OrekitException e) {
        System.out.println("ERROR");
        e.printStackTrace();
    }
}


private GeodeticPoint updatePosition(AbsoluteDate date, int i) {
    GeodeticPoint point = null;

    SpacecraftState scs = selectedSat.get(i).updateState(date);
    System.out.println(scs);
    System.out.println(scs.getPVCoordinates().getPosition());
    System.out.println(scs.getDate());
    System.out.println(earthFixedFrame);

    try {
        point = earth.transform(selectedSat.get(i).getVector(date), earthFixedFrame, date);
    } catch (OrekitException e) {
        System.out.println("Fallo al realizar la conversion cartesiana");
        e.printStackTrace();
    }
    return point;
}


private void checkifFavorite() {

    if (fileName.contains("favorites_")) {
        fileName = fileName.replace("favorites_", "");
    }


    File test1 = new File(this.getFilesDir(), "favorites_" + fileName);


    if (test1.exists()) {
        System.out.println("file exists");
        try {
            ArrayList<String> favs = celestrakData.getNames("favorites_" + fileName, this);


            if (favs.contains(selectedSat.get(0).getName())) {
                System.out.println("already is a favorite");
                favItem.setIcon(R.drawable.favoritesicon_filled);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("file doesnt exist");
    }


}

}

1 Ответ

0 голосов
/ 01 мая 2020

вместо использования getApplicationContext () по своему усмотрению. Можете ли вы попробовать передать контекст действия, в котором вы находитесь.

 Intent intent = new Intent(yourActivityName.this, MapsActivity.class);

надеюсь, это поможет!

Кроме того, это будет будь добр, если ты тоже сможешь поделиться идеей sh. Это поможет вам уточнить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...