使用 settext() 后,Edittext 字段完全为空

问题描述

我正在尝试将从 ../../poreC/include/c1.h: Fatal error: a1.h,no such file or directory #include "a1.h" API 获取的地址插入到我的 geocoder 字段中。在我的应用中授予位置权限后,我的 edittext 字段中不会插入任何文本,甚至也不会调用 SMS 权限。

我的代码

edittext

我的AndroidManifest.xml权限:

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);
                            }
                            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);
            }
        });
    }
} 

解决方法

感谢@Kidus Tekeste,我发现我的 location 对象实际上显示为空。这段代码解决了问题:

    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("\n\n");
                        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);