I am trying to retrieve data from firebase, To do that I was trying to set the Address in the code. I had to give a string a value for the database location, then pass it on to the next activity and use that string as the address. However the address is not set in the code making it set the location on the Map to 0,0 (STRING IS SET IN MAINACTIVITY.JAVA and sent via intent)
I have tried to set the firebase address directly in the code and it worked. Only when I tried to pass it on in an intent it stopped setting the Firebase address
MainActivity.java
The String Value is set here
package com.manavchordia.aplparent;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private
RadioGroup route;
public static final String ARG_FROM_MAIN = "arg";
private FirebaseAuth mAuth;
private FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
private DatabaseReference mDatabaseReference = mDatabase.getReference().child("Locations");
public String someVariable;
TextView numberbs;
Button getLocationBtn;
private Button btnSignOut;
Button busb1;
Button busb2;
Button busb3;
Button busb4;
Button busb5;
Button busb6;
Button busb7;
Button busb8;
Button busb9;
Button busb10;
Button busb11;
Button busb12;
Button busb13;
Button busb14;
Button busb15;
Button busb16;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
numberbs = findViewById(R.id.busnotext);
btnSignOut = findViewById(R.id.signoutbtn);
getLocationBtn = findViewById(R.id.getLocationBtn);
numberbs = findViewById(R.id.busnotext);
busb1 = findViewById(R.id.busbtn1);
busb2 = findViewById(R.id.busbtn2);
busb3 = findViewById(R.id.busbtn3);
busb4 = findViewById(R.id.busbtn4);
busb5 = findViewById(R.id.busbtn5);
busb6 = findViewById(R.id.busbtn6);
busb7 = findViewById(R.id.busbtn7);
busb8 = findViewById(R.id.bustbtn8);
busb9 = findViewById(R.id.busbtn9);
busb10 = findViewById(R.id.busbtn10);
busb11 = findViewById(R.id.busbtn11);
busb12 = findViewById(R.id.busbtn12);
busb13 = findViewById(R.id.busbtn13);
busb14 = findViewById(R.id.busbtn14);
busb15 = findViewById(R.id.bustbtn15);
busb16 = findViewById(R.id.busbtn16);
busb1.setOnClickListener(this);
busb2.setOnClickListener(this);
busb3.setOnClickListener(this);
busb4.setOnClickListener(this);
busb5.setOnClickListener(this);
busb6.setOnClickListener(this);
busb7.setOnClickListener(this);
busb8.setOnClickListener(this);
busb9.setOnClickListener(this);
busb10.setOnClickListener(this);
busb11.setOnClickListener(this);
busb12.setOnClickListener(this);
busb13.setOnClickListener(this);
busb14.setOnClickListener(this);
busb15.setOnClickListener(this);
busb16.setOnClickListener(this);
getLocationBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//startService(new Intent(this, MyService.class));
Intent intent = new Intent(MainActivity.this, MapsActivity.class);
Bundle bundle = new Bundle();
bundle.putString("message", someVariable);
intent.putExtras(bundle);
startActivity(intent);
}
});
/**
Intent intent = new Intent(MainActivity.this, MapsActivity.class);
intent.putExtra("Ref", someVariable);
startActivity(intent);
*/
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.busbtn1:
someVariable ="BUS1";
numberbs.setText("Selected: BUS 1");
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS1");
break;
case R.id.busbtn2:
numberbs.setText("Selected: BUS 2");
someVariable ="BUS2";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS2");
break;
case R.id.busbtn3:
numberbs.setText("Selected: BUS 3");
someVariable ="BUS3";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS3");
break;
case R.id.busbtn4:
numberbs.setText("Selected: BUS 4");
someVariable ="BUS4";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS4");
break;
case R.id.busbtn5:
numberbs.setText("Selected: BUS 5");
someVariable ="BUS5";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS5");
break;
case R.id.busbtn6:
numberbs.setText("Selected: BUS 6");
someVariable ="BUS6";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS6");
break;
case R.id.busbtn7:
numberbs.setText("Selected: BUS 7");
someVariable ="BUS7";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS7");
break;
case R.id.bustbtn8:
numberbs.setText("Selected: BUS 8");
someVariable ="BUS8";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS8");
break;
case R.id.busbtn9:
numberbs.setText("Selected: BUS 9");
someVariable ="BUS9";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS9");
break;
case R.id.busbtn10:
numberbs.setText("Selected: BUS 10");
someVariable ="BUS10";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS10");
break;
case R.id.busbtn11:
numberbs.setText("Selected: BUS 11");
someVariable ="BUS11";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS11");
break;
case R.id.busbtn12:
numberbs.setText("Selected: BUS 12");
someVariable ="BUS12";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS12");
break;
case R.id.busbtn13:
numberbs.setText("Selected: BUS 13");
someVariable ="BUS13";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS13");
break;
case R.id.busbtn14:
someVariable ="BUS14";
numberbs.setText("Selected: BUS 14");
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS14");
break;
case R.id.bustbtn15:
numberbs.setText("Selected: BUS 15");
someVariable ="BUS15";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS15");
break;
case R.id.busbtn16:
numberbs.setText("Selected: BUS 16");
someVariable ="BUS16";
mDatabaseReference = mDatabase.getReference().child("Locations").child("BUS16");
break;
}
}
}
MapsActivity.java
The string is retrieved here and set as the address for the database
package com.manavchordia.aplparent;
import androidx.fragment.app.FragmentActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.database.annotations.NotNull;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, View.OnClickListener {
private GoogleMap mMap;
private FirebaseAuth mAuth;
//String value_latitude = "0";
// String value_longitue = "0";
Double longi = 0.0;
Double lati = 0.0;
// String message = "BUS1";
Button Refreshh;
Double latitude = 0.0;
Double longitude = 0.0;
String vali;
Button Backp;
TextView BusNO;
private CountDownTimer timer;
private FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
private DatabaseReference myRef = mDatabase.getReference().child("Locations").child(vali);
// private DatabaseReference mDatabaseReference = mDatabase.getReference();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
Backp = findViewById(R.id.backbuttonmap);
BusNO = findViewById(R.id.busnotext);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String str = bundle.getString("message");
vali = str;
// 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);
BusNO.setText(vali);
timer = new CountDownTimer(5000, 500) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
try {
timer.start();
Toast.makeText(MapsActivity.this, "Refreshing", Toast.LENGTH_LONG).show();
getBussGeo();
} catch (Exception e) {
Log.e("Error", "Error: " + e.toString());
}
}
}.start();
Backp.setOnClickListener(this);
Backp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MapsActivity.this, MainActivity.class);
timer.cancel();
startActivity(intent);
}
});
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
/*
if (mMap != null) {
LatLng sydney = new LatLng(lati, longi);
mMap.addMarker(new MarkerOptions().position(sydney).title(vali));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
*/
}
public void getBussGeo() {
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NotNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
double latitude = dataSnapshot.child("latitude").getValue(Double.class);
double longitude = dataSnapshot.child("longitude").getValue(Double.class);
Log.e("Long", "onDataChange: " + longitude);
Log.d("lato","onDataChange" + latitude);
lati = latitude;
longi = longitude;
if (mMap != null) {
LatLng sydney = new LatLng(lati, longi);
mMap.addMarker(new MarkerOptions().position(sydney).title(vali));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}
}
@Override
public void onCancelled(@NotNull DatabaseError error) {
// Failed to read value
Toast.makeText(getApplicationContext(), "Error!!", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onClick(View view) {
}
}
The Map is supposed to show a location when BUS11 is tapped(as there are coordinates already set).
But the map sets the location to 0,0
You are not updating the listener to the reference with new vali value, do this in getBussGeo():
myRef = mDatabase.getReference().child("Locations").child(vali);
Because the reference will hold the initial value of vali and you need to update it after getting from intent.
Also, try using Bundle for passing the data between activities.
In MainActivity:
Intent intent = new Intent(this, MapsActivity.class);
Bundle bundle = new Bundle();
bundle.putString("message", someVariable);
intent.putExtras(bundle);
startActivity(intent);
In MapsActivity:
Bundle bundle = intent.getExtras();
str = bundle.getString("message");