Merhaba, Android programlamada bir kısımda dinamik tablo yaratmam gerekiyordu. Fakat java.lang.NullPointerException hatası alıyorum. Bunu nasıl düzeltebilirim?

Dinamik tablo yarattığım fonksiyonum :

public void createDynamicTable(String[] tableContentList){

    TableLayout tablo = (TableLayout) findViewById(R.id.tablo);

    for (int i = 0; i < tableContentList.length; i++){

        TableRow newLine = new TableRow(this);

        TextView rowDate = new TextView(this);
        TextView rowName = new TextView(this);
        TextView rowPeriod = new TextView(this);

        CheckBox checkBox = new CheckBox(this);
        checkBox.setOnClickListener(getOnClickDoSomething(checkBox));

        rowDate.setText(tableContentList[i]);
        rowName.setText(tableContentList[i + 1]);
        rowPeriod.setText(tableContentList[i + 2]);

        totalDate.add(tableContentList[i]);
        totalExam.add(tableContentList[i + 1]);

        newLine.addView(checkBox);
        newLine.addView(rowDate);
        newLine.addView(rowName);
        newLine.addView(rowPeriod);

        tablo.addView(newLine);
        i += 3;

    }

}

İlgili XML dosyası :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TableLayout
                android:id="@+id/tablo"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:stretchColumns="*" >

                <TableRow
                    android:id="@+id/tableRow1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" >

                    <CheckBox
                        android:id="@+id/allCheckBox"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        />

                    <TextView
                        android:id="@+id/textView1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/date" />

                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/name_of_exam" />

                    <TextView
                        android:id="@+id/textView3"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/period_of_exam" />
                </TableRow>

            </TableLayout>
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/remind"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/remind" />

</LinearLayout>

soruldu: 17 Oca '14, 18:20

symtkn's gravatar image

symtkn
16556
cevap kabul oranı: 0%

değiştirildi: 19 Oca '14, 02:53

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

2 listeyi initiliaze ederken null kullanmıştım; new ile düzelltiğimde hatada değişti.

E/InputDispatcher(61): channel '40658658 Couldn't create dynamic table (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
E/InputDispatcher(61): channel '40658658 Couldn't create dynamic table (server)' ~ Channel is unrecoverably broken and will be disposed!

şeklinde loglar veriyor.

(18 Oca '14, 10:08) symtkn symtkn's gravatar image

Kodda createDynamicTeble metodunu çağırdığım yeri değiştirdim ve şöyle bir hata verdi.

01-18 18:09:16.785: E/AndroidRuntime(665): FATAL EXCEPTION: main
01-18 18:09:16.785: E/AndroidRuntime(665): java.lang.NullPointerException
01-18 18:09:16.785: E/AndroidRuntime(665):  at android.app.Activity.findViewById(Activity.java:1647)
01-18 18:09:16.785: E/AndroidRuntime(665):  at omu.ceng.tickler.DutyRoster.createDynamicTable(DutyRoster.java:105)
01-18 18:09:16.785: E/AndroidRuntime(665):  at omu.ceng.tickler.DutyRoster$SoapCall.onPostExecute(DutyRoster.java:166)
01-18 18:09:16.785: E/AndroidRuntime(665):  at omu.ceng.tickler.DutyRoster$SoapCall.onPostExecute(DutyRoster.java:1)
01-18 18:09:16.785: E/AndroidRuntime(665):  at android.os.AsyncTask.finish(AsyncTask.java:417)
01-18 18:09:16.785: E/AndroidRuntime(665):  at android.os.AsyncTask.access$300(AsyncTask.java:127)
01-18 18:09:16.785: E/AndroidRuntime(665):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
01-18 18:09:16.785: E/AndroidRuntime(665):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-18 18:09:16.785: E/AndroidRuntime(665):  at android.os.Looper.loop(Looper.java:123)
01-18 18:09:16.785: E/AndroidRuntime(665):  at android.app.ActivityThread.main(ActivityThread.java:3683)
01-18 18:09:16.785: E/AndroidRuntime(665):  at java.lang.reflect.Method.invokeNative(Native Method)
01-18 18:09:16.785: E/AndroidRuntime(665):  at java.lang.reflect.Method.invoke(Method.java:507)
01-18 18:09:16.785: E/AndroidRuntime(665):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-18 18:09:16.785: E/AndroidRuntime(665):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-18 18:09:16.785: E/AndroidRuntime(665):  at dalvik.system.NativeStart.main(Native Method)

hatanın ilk 3 satırından anladığım kadarıyle findViewById null değer döndürüyor. Yani table ın id sini bulamıyor. Bunu nasıl düzeltebilirim?

(18 Oca '14, 11:07) symtkn symtkn's gravatar image

R class ının içinde tablo= big decimal bir değer görüyormusun ? İstersen classı sil ve clean and build ile tekrar generate edilsin .Ek olarak birde ".tablo" idli bir tablelayoutu olan bir layoutu değilde başka bir layout u çağırıyor olabilirsin bunu kontrol et .

(20 Oca '14, 01:50) abdurrahman abdurrahman's gravatar image

totalDate.add(tableContentList[i]);
totalExam.add(tableContentList[i + 1]);

Hata logunu paylaşman daha faydalı olabilirdi ama öncelikle yukarıdaki 2 liste yi başlatmışmısın bunu kontrol et bu ikisi =new şeklinde initiliaze edilmedi ise hata alırsın diğer ihtimal ise

TableLayout tablo = (TableLayout) findViewById(R.id.tablo);

Layout ile ilgili bir sorun var ise tablo objen oluşmamış olabilir bunun üzerine düş .Eğer bu iki sebebp değil ise

getOnClickDoSomething(checkBox))

metodunu kontrol et . İki metodunda içine uygun kontrol yerlerine

Log.i("test boyut ",totalExam.size())

yazarak hatanın yerini bulabilirsin

permanent link

cevaplandı: 18 Oca '14, 07:55

abdurrahman's gravatar image

abdurrahman
1072
cevap kabul oranı: 0%

@abdurrahman yardımın için teşşekürler hata sonunda çözüme kavuştu. root layoutu tanımlamamı method içerisinde değil onCreate() içerisinde yaptım. Ve tablo olarak adlandırdığım global değişkenime 'tablo = (TableLayout)DutyRoster.this.findViewById(R.id.tablo);' atamasını yaptım.

(22 Oca '14, 22:26) symtkn symtkn's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819

Soruldu: 17 Oca '14, 18:20

Görüntüleme: 1,469 kez

Son güncelleme: 22 Oca '14, 22:26

powered by BitNami OSQA