[英]Exception: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
[英]JPE: Attempt to invoke virtual method 'android.content.res.Resources' on a null object reference
好吧好吧,我已經閱讀了這些不同的帖子: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' and this What is a NullPointerException, and how我要修嗎? 而這個java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()已經嘗試了很多東西。 但我的問題還是一樣。 也許我錯過了一些東西,我是新人,我正在盡力而為,請保持友善。
我在片段“DataSetFragment1”中調用了 SMS 類的方法
有人可以幫助我嗎,並提前致謝
這是我的 SMS 類的代碼:
public class Sms extends AppCompatActivity {
private String contact;
private String content;
private int type;
private int read;
private String date;
public void addSMS()
{
List<Sms> mesSms= new ArrayList<>();
InputStream is = getResources().openRawResource(R.raw.sms1);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8"))
);
}
}
這是我的 Fragment 的代碼:
public class Dataset1Fragment extends Fragment {
private void createOnClicBtnEnreg(){
Sms mesSms = new Sms();
mesSms.addSMS();
}
@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.btnEnreg).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnEnreg = view.findViewById(R.id.btnEnreg);
Context myContext = getContext();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
RoleManager roleManager = myContext.getSystemService(RoleManager.class);
// check if the app is having permission to be as default SMS app
assert roleManager != null;
boolean isRoleAvailable = roleManager.isRoleAvailable(RoleManager.ROLE_SMS);
if (isRoleAvailable){
// check whether your app is already holding the default SMS app role.
boolean isRoleHeld = roleManager.isRoleHeld(RoleManager.ROLE_SMS);
if (!isRoleHeld){
Intent roleRequestIntent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS);
startActivityForResult(roleRequestIntent,5);
}
}
} else {
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myContext.getPackageName());
startActivityForResult(intent, 5);
}
if (hasPermissions(getContext(),Permissions)){
createOnClicBtnEnreg();
Toast.makeText(getContext(), "Insertion OK", Toast.LENGTH_SHORT).show();
}
}
這是我的日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.data.myApp, PID: 12080
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at android.content.ContextWrapper.getResources(ContextWrapper.java:93)
at android.view.ContextThemeWrapper.getResourcesInternal(ContextThemeWrapper.java:134)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:128)
at androidx.appcompat.app.AppCompatActivity.getResources(AppCompatActivity.java:566)
at com.example.testbackup.Sms.addSMS(Sms.java:36)
at com.example.testbackup.ui.dataset1.Dataset1Fragment.createOnClicBtnEnreg(Dataset1Fragment.java:321)
at com.example.testbackup.ui.dataset1.Dataset1Fragment.access$100(Dataset1Fragment.java:61)
at com.example.testbackup.ui.dataset1.Dataset1Fragment$2.onClick(Dataset1Fragment.java:251)
編輯:這段代碼很好,按照響應 Hata 然后是 Ivo Beckers
public class Sms{
private String contact;
private String contenu;
private int type;
private int read;
private String date;
public void addSMS(Context myContext)
{
List<Sms> mesSms= new ArrayList<>();
InputStream is = myContext.getResources().openRawResource(R.raw.sms1);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8"))
);
修改addSMS如下:
public void addSMS(Context context) {
List<Sms> mesSms= new ArrayList<>();
InputStream is = context.getResources().openRawResource(R.raw.sms1);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8"))
);
}
並在您從 createOnClicBtnEnreg 使用它時傳遞 Context 實例:
private void createOnClicBtnEnreg(){
Sms mesSms = new Sms();
mesSms.addSMS(getContext());
}
注意:此答案僅適用於顯示的錯誤。 如果錯誤被清除,即使另一個錯誤出現並仍然存在(應作為另一個問題發布),也應關閉此問答。
您不能將任何類擴展到AppCompatActivity
。
我假設您的SMS
對象不是Activity
。 我認為你只是這樣做了,所以它在你的類中公開了getResources()
方法,但這不是它的工作原理。
您需要一種方法來訪問您想要執行getResources()
任何地方的Context
對象,然后在該對象上調用它。 @hata 的回答給出了一個如何做到這一點的例子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.