Je sais qu'il y a d'autres questions comme celle-ci déjà posées, mais je n'arrive toujours pas à résoudre ce problème.en utilisant des méthodes statiques entre les fichiers java
J'ai deux activités dans le studio android, l'une est homePage.java et l'autre est newMessagePage.java. J'essaie d'utiliser la méthode getPermissiontoReadSMS dans l'activité newMessagePage.java. Puisque c'est dans l'activité homePage.java, je reçois la "méthode non statique ne peut pas être référencée à partir d'une erreur de contexte statique." Certaines suggestions dans d'autres publications incluaient l'ajout d'une instance de la méthode. Je suis encore un peu nouveau à ce sujet et je ne sais pas comment s'y prendre. Toute aide est appréciée.
homePage.java
public class homePage extends AppCompatActivity {
private ListView mDrawerList;
private DrawerLayout mDrawerLayout;
private ArrayAdapter<String> mAdapter;
private boolean firstResume = false;
ArrayList<String> smsMessagesList = new ArrayList<>();
ListView messages;
ArrayAdapter arrayAdapter;
private static homePage inst;
private static final int READ_SMS_PERMISSIONS_REQUEST = 1;
public static homePage instance() {
return inst;
}
public void getPermissionToReadSMS() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(
Manifest.permission.READ_SMS)) {
Toast.makeText(this, "Please allow permission", Toast.LENGTH_SHORT).show();
}
requestPermissions(new String[]{Manifest.permission.READ_SMS}, READ_SMS_PERMISSIONS_REQUEST);
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String permissions[],
@NonNull int[] grantResults) {
if(requestCode == READ_SMS_PERMISSIONS_REQUEST) {
if(grantResults.length == 1 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Read SMS permission granted", Toast.LENGTH_SHORT).show();
refreshSmsInbox();
}else {
Toast.makeText(this, "Read SMS permission denied", Toast.LENGTH_SHORT).show();
}
}else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
public void refreshSmsInbox() {
ContentResolver contentResolver = getContentResolver();
Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null);
int indexBody = smsInboxCursor.getColumnIndex("body");
int indexAddress = smsInboxCursor.getColumnIndex("address");
if(indexBody < 0 || !smsInboxCursor.moveToFirst()) return;
arrayAdapter.clear();
do {
String str = "SMS from: " + smsInboxCursor.getString(indexAddress) +
"\n" + smsInboxCursor.getString(indexBody) + "\n";
arrayAdapter.add(str);
} while(smsInboxCursor.moveToNext());
}
private void addDrawerItems() {
//side drawer things
String[] osArray = { "Sent", "Patients", "Folders", "Trash", "Settings" };
mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, osArray);
mDrawerList.setAdapter(mAdapter);
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position == 4) {
Intent settingsIntent = new Intent(homePage.this, settingsPage.class);
startActivity(settingsIntent);
}
}
});
}
private void FABListener() {
//FAB button functions
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent newMessage = new Intent(homePage.this, newMessagePage.class);
startActivity(newMessage);
}
});
}
@Override
protected void onStart() {
super.onStart();
inst = this;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);
mDrawerList = (ListView)findViewById(R.id.navList);
mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
messages = (ListView) findViewById(R.id.messages);
arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, smsMessagesList);
messages.setAdapter(arrayAdapter);
if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
getPermissionToReadSMS();
}else {
refreshSmsInbox();
}
addDrawerItems();
FABListener();
}
@Override
protected void onResume() {
super.onResume();
if(firstResume) {
mDrawerLayout.openDrawer(Gravity.START);
}
firstResume = false;
}
}
newMessagePage.java
public class newMessagePage extends AppCompatActivity {
SmsManager smsManager = SmsManager.getDefault();
EditText input;
public void onSendClick(View view) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS)
!= PackageManager.PERMISSION_GRANTED) {
//insert reference to getPermissionToReadSMS method here
}else {
smsManager.sendTextMessage("07747689961", null, input.getText().toString(), null, null);
Toast.makeText(this, "Message sent!", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_message_page);
input = (EditText) findViewById(R.id.input);
}
}
sur quelle ligne est l'erreur? –
dans le fichier newMessagePage.java. J'ai mis un commentaire où la correction devrait être. –
vous pourriez faire de getpermissiontoreads une fonction statique, mais le code-apprenti dit que c'est mauvais. Je ne suis pas un expert andriod donc je l'écoute –