آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

Solved_مشکل بسیار عجیب در اکلیپس (null بودن مقدار G.context) ! (درس عبرت)

Criss  10 سال پیش  10 سال پیش
+1 0

سلام دوستان

من قصد دارم پروژه جدیدی رو ایجاد کنم و روی اون چیزی رو تست کنم < برای تست کردن نیاز به یک 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

 

 

 

+1 0
ارورت میگه خط 20 AdapterNote مقدار null هست ، خط 20 به چی اشاره داره ؟ اگر به super ارور میگیره احتمالا یه چیزی توش مثل آرایه ای که دادی بهش خالی هست (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Criss  10 سال پیش
+1 0

خط 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);

 

+1 0
یا آرایه خالی هست یا لایه های که بهش دادی ایرادی توش داره ،context هم که بعیده پر نباشه ، بالای همین خط مقدار همشون رو بگیر ببین کدوم نال هست . (10 سال پیش)
0 0
متاسفانه نمیشه توی خط بالاتر از اون لاگ گرفت < ولی توی کلاس ActivityMain قبل از ساختن adapter میشه که اونجا هم Null نیست ! (10 سال پیش)
+1 0
درسته ، خب آرایه رو میتونی زمانی که G.task پاس میدی قبلش چک کنی پر باشه و نکته بعدی اینکه ببین لایه ای که بهش دادی داخلش مثلا ویجتی نیست که نال باشه و باعث خرابکاری بشه . (10 سال پیش)
پاسخ به سوال 
Criss  10 سال پیش
+1 0

خب مشکل رو پیدا کردم 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();
}

 

+2 0
!!! آقا تاپیک رو حذف کنید < امتیاز منفی هم بدید :D < توی Manifest کلاس G رو تعریف نکرده بودم !!! (10 سال پیش)
+5 0
این تاپیک رو حذف نمیکنیم تا درس عبرتی بشه برای بقیه :) (10 سال پیش)
0 0
خخخ چه باحال! (10 سال پیش)
+1 0
criss از اون شاهکاری های من کردیا یک دو روز دور پیدا کردن خطا بودم بعد مشکل از منیفست بود ههههههه (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .