نولبونتيركسيبتيون:تعذر إدراج الملفات في دليل
-
21-12-2019 - |
سؤال
يرجى إلقاء نظرة على التعليمات البرمجية التالية
private class OpenFileEvent implements OnClickListener
{
LinearLayout openFileDialogView = (LinearLayout)findViewById(R.id.open_file_dialog);
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
final Dialog openFileDialog = new Dialog(Notes.this);
openFileDialog.setTitle("Open File");
openFileDialog.setContentView(R.layout.open_dialog);
//First, list all the available Files
File folder = new File(Environment.getExternalStorageDirectory()+"/Main Notes/Notes");
File[] fileNameList = folder.listFiles();
if(fileNameList.length>0 && fileNameList!=null)
{
for(int i=0;i<fileNameList.length;i++)
{
//Get the sub views first
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View openThisFileView = inflater.inflate(R.layout.open_dialog_file, null);
Button openThisFileButton = (Button)openThisFileView.findViewById(R.id.open_this_file_button);
Button appendThisFileButton = (Button)openThisFileView.findViewById(R.id.append_note_this_file);
TextView openThisFileNameTxt = (TextView)openThisFileView.findViewById(R.id.open_this_file_name);
//Set the Text
openThisFileNameTxt.setText(fileNameList[i].getName());
//Set the Listeners
//Add the View
openFileDialogView.addView(openThisFileView);
}
}
//Show the Dialog
openFileDialog.show();
}
}
بمجرد تشغيل هذا الرمز ، أحصل على الخطأ التالي
11-17 17:31:18.681: E/AndroidRuntime(4868): FATAL EXCEPTION: main
11-17 17:31:18.681: E/AndroidRuntime(4868): java.lang.NullPointerException
11-17 17:31:18.681: E/AndroidRuntime(4868): at com.a.Notter.Notes$OpenFileEvent.onClick(Notes.java:203)
11-17 17:31:18.681: E/AndroidRuntime(4868): at android.view.View.performClick(View.java:4204)
11-17 17:31:18.681: E/AndroidRuntime(4868): at android.view.View$PerformClick.run(View.java:17355)
11-17 17:31:18.681: E/AndroidRuntime(4868): at android.os.Handler.handleCallback(Handler.java:725)
11-17 17:31:18.681: E/AndroidRuntime(4868): at android.os.Handler.dispatchMessage(Handler.java:92)
11-17 17:31:18.681: E/AndroidRuntime(4868): at android.os.Looper.loop(Looper.java:137)
11-17 17:31:18.681: E/AndroidRuntime(4868): at android.app.ActivityThread.main(ActivityThread.java:5041)
11-17 17:31:18.681: E/AndroidRuntime(4868): at java.lang.reflect.Method.invokeNative(Native Method)
11-17 17:31:18.681: E/AndroidRuntime(4868): at java.lang.reflect.Method.invoke(Method.java:511)
11-17 17:31:18.681: E/AndroidRuntime(4868): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-17 17:31:18.681: E/AndroidRuntime(4868): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-17 17:31:18.681: E/AndroidRuntime(4868): at dalvik.system.NativeStart.main(Native Method)
يحدث هذا الخطأ هنا ، حيث تعاملت مع NULL
كذلك
if(fileNameList.length>0 && fileNameList!=null)
ماذا يحدث هنا?
المحلول
الشرط الأول الذي تم تقييمه سيكون طول fileNameList
.أو إذا fileNameList
هو null
وسوف رمي NPE
لأنك تحاول أولا الوصول إلى length
السمة.
يجب عليك عكس حالتك :
if(fineNameList != null && fileNameList.length>0)
لم؟
يظهر هؤلاء المشغلون سلوك "قصر الدائرة" ، مما يعني ذلك يتم تقييم المعامل الثاني فقط إذا لزم الأمر.
لذلك إذا fileNameList
هو null
لن يتم تقييم المعامل الثاني ، وبالتالي يمكنك تجنب رمي NPE
.
نصائح أخرى
يجب عليك استخدام
if(fileNameList!=null && fileNameList.length>0)
وإلا لديك NullPointerException
بسبب fileNameList.length
أين fileNameList
هو NULL
.
لا تنتمي إلى StackOverflow