Edittext field completely empty, after using settext()

I am trying to insert the address fetched from the geocoderAPI, into my edittext field. After granting the location permission in my app, no text gets inserted in my edittext field, and even the SMS permission isn’t called too.

My code:

public class message extends AppCompatActivity {

    EditText edittext;
    Button send;
    FusedLocationProviderClient fusedLocationProviderClient;
    ArrayList<String> contacts=new ArrayList<>();

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

        send = findViewById(R.id.button);
        edittext = findViewById(R.id.msg);


        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
        contacts = getIntent().getStringArrayListExtra("contacts");


        if(ActivityCompat.checkSelfPermission(message.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

            fusedLocationProviderClient.getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {
                @Override
                public void onComplete(@NonNull Task<Location> task) {
                    Location location = task.getResult();
                    if (location != null){
                        try {
                            Geocoder geocoder = new Geocoder(message.this, Locale.getDefault());
                            List<Address> address = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                            Log.d("address", address.get(0).getAddressLine(0));
                            edittext.setText(address.get(0).getAddressLine(0));
                            
                            sos_message();

                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                }
            });

        }else
            ActivityCompat.requestPermissions(message.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);


    }

    private void sos_message() {
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(ActivityCompat.checkSelfPermission(message.this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED){
                    try {
                        SmsManager sms = SmsManager.getDefault();

                        if ((contacts != null) || (edittext.getText().toString().length() != 0)) {
                            for (int i = 0; i < contacts.size(); i++) {
                                sms.sendTextMessage(String.valueOf(contacts.get(i)), null, edittext.getText().toString(), null, null);
                            }
                            Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Message sent successfully", Snackbar.LENGTH_LONG);
                            snackbar.show();
                        } else {
                            Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Please try again", Snackbar.LENGTH_LONG);
                            snackbar.show();
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                else
                    ActivityCompat.requestPermissions(message.this, new String[]{Manifest.permission.SEND_SMS}, 44);
            }
        });
    }
} 

My AndroidManifest.xml permissions:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SEND_SMS" />

Answer

Thanks to @Kidus Tekeste, I discovered that my location object was actually showing to be null. This piece of code solves the problem:

    fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
    locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(10 * 1000); // 10 seconds
    locationRequest.setFastestInterval(5 * 1000); // 5 seconds
    locationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                if (locationResult == null) {
                    return;
                }
                for (Location location : locationResult.getLocations()) {
                    if (location != null) {
                        stringBuilder.append(location.getLatitude());
                        stringBuilder.append("-");
                        stringBuilder.append(location.getLongitude());
                        stringBuilder.append("nn");
                        Toast.makeText(message.this,stringBuilder,Toast.LENGTH_SHORT).show();
                        //txtContinueLocation.setText(stringBuilder.toString());

                        if (fusedLocationProviderClient != null) {
                            fusedLocationProviderClient.removeLocationUpdates(locationCallback);
                        }
                    }
                }
            }
        };

    if((ActivityCompat.checkSelfPermission(message.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
            && (ActivityCompat.checkSelfPermission(message.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) ){

        fusedLocationProviderClient.getLastLocation().addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if (location != null){

                    Geocoder geocoder = new Geocoder(message.this, Locale.getDefault());
                    List<Address> address = null;
                    try {
                        address = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    Log.d("address", address.get(0).getAddressLine(0));
                    edittext.setText(address.get(0).getAddressLine(0));
                    sos_message();
                }
                else{
                    Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Try again", Snackbar.LENGTH_LONG);
                    snackbar.show();
                }
            }
        });
    }else
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
                        Manifest.permission.ACCESS_COARSE_LOCATION},
                44);

Leave a Reply

Your email address will not be published. Required fields are marked *