Solved_مشکل بسیار عجیب در اکلیپس (null بودن مقدار G.context) ! (درس عبرت)
سلام دوستان
من قصد دارم پروژه جدیدی رو ایجاد کنم و روی اون چیزی رو تست کنم < برای تست کردن نیاز به یک ListView دارم
ولی مشکل عجیب اینجا هست که وقتی خط زیر استفاده میکنم برنامه کرش میکنه !
adapter = new AdapterNote(G.tasks);
و توی LogCat علاوه بر خط بالا بعدش از خط زیر هم اررو میگیره ! که مربوط به کلاس AdapterNote هست
super(G.context, R.layout.adapter_notes, array);
خیلی دقت کردم نتونستم مشکل رو پیدا کنم < اومدم پروژه های قبلی رو که از ListView درون اونها استفاده میکنم رو کپی کردم ، ولی باز هم اررور میده ، عجیب اینجاست که خود پروژه های قبلی مشکلی ندارند < اما این جدید هارو که کپی میکنم همشون ارور میگیرن و دقیقا هم به دوتا خط بالا !!
08-29 07:51:56.725: E/AndroidRuntime(308): FATAL EXCEPTION: main
08-29 07:51:56.725: E/AndroidRuntime(308): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.freestyler.lazylistview.criss/
com.freestyler.lazylistview.criss.ActivityMain}: java.lang.NullPointerException
08-29 07:51:56.725: E/AndroidRuntime(308): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.os.Handler.dispatchMessage(Handler.java:99)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.os.Looper.loop(Looper.java:123)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-29 07:51:56.725: E/AndroidRuntime(308): at java.lang.reflect.Method.invokeNative(Native Method)
08-29 07:51:56.725: E/AndroidRuntime(308): at java.lang.reflect.Method.invoke(Method.java:521)
08-29 07:51:56.725: E/AndroidRuntime(308): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-29 07:51:56.725: E/AndroidRuntime(308): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-29 07:51:56.725: E/AndroidRuntime(308): at dalvik.system.NativeStart.main(Native Method)
08-29 07:51:56.725: E/AndroidRuntime(308): Caused by: java.lang.NullPointerException
08-29 07:51:56.725: E/AndroidRuntime(308): at android.widget.ArrayAdapter.init(ArrayAdapter.java:271)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:150)
08-29 07:51:56.725: E/AndroidRuntime(308): at com.freestyler.lazylistview.criss.AdapterNote.<init>(AdapterNote.java:20)
08-29 07:51:56.725: E/AndroidRuntime(308): at com.freestyler.lazylistview.criss.ActivityMain.onCreate(ActivityMain.java:44)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-29 07:51:56.725: E/AndroidRuntime(308): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-29 07:51:56.725: E/AndroidRuntime(308): ... 11 more
خط 20 دقیقا این هست !!
19 public AdapterNote(ArrayList<StructTask> array) {
20 super(G.context, R.layout.adapter_notes, array);
21
22 }
متاسفانه اجازه ندارم قبل از super هیچ چیزی رو استفاده کنم ! متد بالا یکی از constructor های کلاس AdapterNote هست که در کلاس ActivityMain بصورت زیر صدا زده میشه
adapter =newAdapterNote(G.tasks);
G.tasts هم بصورت زیر هست
public static ArrayList<StructTask> tasks = new ArrayList<StructTask>();
همه چیز درسته !!
ListView lstContent = (ListView) findViewById(R.id.lstContent);
for (int i = 0; i < 10; i++) {
StructTask task = new StructTask();
task.title = "title" + i;
task.desc = "desc" + i;
G.tasks.add(task);
}
adapter = new AdapterNote(G.tasks); //adapter is a Fild
lstContent.setAdapter(adapter);
خب مشکل رو پیدا کردم G.context مقدارش null هست !!
ListView lstContent =(ListView) findViewById(R.id.lstContent);
for(int i =0; i <10; i++){
StructTask task =newStructTask();
task.title ="title"+ i;
task.desc ="desc"+ i;
G.tasks.add(task);
}
Log.i("LOG", "G" + G.tasks);
Log.i("LOG", "C" + G.context);
Log.i("LOG", "L" + R.layout.adapter_notes);
adapter =newAdapterNote(G.tasks);
lstContent.setAdapter(adapter);
کل کلاس G
public class G extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .