2013-08-14 6 views
-2

아무도 나에게 설명 할 수 있었는데, 왜 java.lang.NullPointerException을 가지고 있는데, setAdapter를 시도했을까요?ListView.setAdapter - java.lang.NullPointerException

어댑터를 설정하려고하면 arraylist가 이미 채워집니다. 내가 뭘 잘못 했니?

Thx!

activity_view_list.xml

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 
    <ListView 
      android:id="@+id/lvView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"> 
    </ListView> 
</LinearLayout> 

item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
    <ImageView 
      android:id="@+id/ivImage" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher"> 
    </ImageView> 
    <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginLeft="5dp" 
      android:layout_weight="1" 
      android:orientation="vertical"> 
     <TextView 
       android:id="@+id/tvDescr" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="5dp" 
       android:text="" 
       android:textSize="20sp"> 
     </TextView> 
    </LinearLayout> 

</LinearLayout> 

제품에 대한 나의 클래스

package com.shvedchenko.skleroshop; 

/** 
* Created by dima on 14.08.13. 
*/ 

public class Product { 

    String name; 
    int image; 


    Product(String _describe, int _image) { 
     name = _describe; 
     image = _image; 
    } 

} 

그리고

package com.shvedchenko.skleroshop; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 

/** 
* Created by dima on 14.08.13. 
*/ 
public class BoxAdapter extends BaseAdapter { 
    Context ctx; 
    LayoutInflater lInflater; 
    ArrayList<Product> objects; 

    BoxAdapter(Context context, ArrayList<Product> products) { 
     ctx = context; 
     objects = products; 
     lInflater = (LayoutInflater) ctx 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    // кол-во элементов 
    @Override 
    public int getCount() { 
     return objects.size(); 
    } 

    // элемент по позиции 
    @Override 
    public Object getItem(int position) { 
     return objects.get(position); 
    } 

    // id по позиции 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    // пункт списка 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // используем созданные, но не используемые view 
     View view = convertView; 
     if (view == null) { 
      view = lInflater.inflate(R.layout.item, parent, false); 
     } 

     Product p = getProduct(position); 

     // заполняем View в пункте списка данными из товаров: наименование, цена 
     // и картинка 
     ((TextView) view.findViewById(R.id.tvDescr)).setText(p.name); 
     ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image); 
     return view; 
    } 

    // товар по позиции 
    Product getProduct(int position) { 
     return ((Product) getItem(position)); 
    } 
} 
01 내 BoxAdapter 23,516,

에러

08-14 08:38:29.684  511-511/com.shvedchenko.skleroshop W/dalvikvm: threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
08-14 08:38:29.684  511-511/com.shvedchenko.skleroshop E/AndroidRuntime: Uncaught handler: thread main exiting due to uncaught exception 
08-14 08:38:29.694  511-511/com.shvedchenko.skleroshop E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shvedchenko.skleroshop/com.shvedchenko.skleroshop.ViewList}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
     at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:4363) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:521) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.NullPointerException 
     at com.shvedchenko.skleroshop.ViewList.onCreate(ViewList.java:37) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 

ViewList.java

package com.shvedchenko.skleroshop; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.widget.ListView; 

import java.util.ArrayList; 


public class ViewList extends ListActivity { 

    ArrayList<Product> products = new ArrayList<Product>(); 
    BoxAdapter boxAdapter; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     /*setContentView(R.layout.activity_view_list);*/ 
     // создаем адаптер 
     fillData(); 
     boxAdapter = new BoxAdapter(this, products); 

     // настраиваем список 
     ListView lvMain = (ListView) findViewById(R.id.lvView); 
     lvMain.setAdapter(boxAdapter); 

    } 


    // генерируем данные для адаптера 
    void fillData() { 
     for (int i = 1; i <= 20; i++) { 
      products.add(new Product("Product " + i, R.drawable.ic_launcher)); 
     } 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

     if (keyCode == KeyEvent.KEYCODE_BACK) { 

      /*startActivity(intent); 
      ViewList.this.finish(); 
      return false;*/ 
     } 

     return super.onKeyDown(keyCode, event); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.list, menu); 
     return true; 
    } 

} 

ERORS 된 setContentView

08-14 09:07:53.916  52-56/system_process I/ActivityManager: Starting activity: Intent { cmp=com.shvedchenko.skleroshop/.ViewList (has extras) } 
08-14 09:07:53.956  230-230/com.shvedchenko.skleroshop D/AndroidRuntime: Shutting down VM 
08-14 09:07:53.956  230-230/com.shvedchenko.skleroshop W/dalvikvm: threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
08-14 09:07:53.956  230-230/com.shvedchenko.skleroshop E/AndroidRuntime: Uncaught handler: thread main exiting due to uncaught exception 
08-14 09:07:53.966  230-230/com.shvedchenko.skleroshop E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shvedchenko.skleroshop/com.shvedchenko.skleroshop.ViewList}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
     at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:4363) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:521) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
     at android.app.ListActivity.onContentChanged(ListActivity.java:236) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:201) 
     at android.app.Activity.setContentView(Activity.java:1622) 
     at com.shvedchenko.skleroshop.ViewList.onCreate(ViewList.java:21) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
+0

스택 추적을 확인할 수 있습니다. 게시하다 (!) 코드 (어디에서 예외가 발생하는지) – njzk2

+0

stacktrace 게시 – Raghunandan

+0

설정하기 전에 제대로 인스턴스화 된 BoxAdapter 클래스가 있습니까 –

답변

0
08-14 08:38:29.694  511-511/com.shvedchenko.skleroshop E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shvedchenko.skleroshop/com.shvedchenko.skleroshop.ViewList}: java.lang.NullPointerException 

이 스택 트레이스는 아마 잘못을 의미합니다 후 ActivityonCreate 기능에서 발생합니다.

당신은 당신의 코드의이 부분을 조사 또는 게시한다)을 findViewById() 통화의 이전

+0

이미 난 당신이 게시물을 편집하기 전에 aswered보기 활동 – kbu

+0

을위한 클래스를 기록했다. 켜고 끌 당신의에서 onCreate 함수에 중단 점 ... 디버그 모드 (일식에 버그 아이콘)을 실행하고 널 포인터 예외가 ;-) 좋은 – Goo

1

전화 setContentView(). 그렇지 않은 경우 ViewfindViewById()에 의해 반환되고 null이되고 null에있는 메서드를 호출하면 NullPointerException이됩니다. 당신이 ListViewandroid:id="@android:id/list와 호스트 할 것으로 예상 ListActivity를 사용하고 있기 때문에

당신이

java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 

를 볼 수 있다는 고정 후입니다. 이를 해결하려면 레이아웃 리소스에서 id을 변경하거나 ListActivity 대신 Activity을 확장하도록 활동을 변경하십시오.

+0

+1 발생 위치를 볼 수 있지만 때 난 된 setContentView (R.layout.activity_view_list) 걸렸고있다; 그 후속 문제 – HpTerm

+0

답변을 빠르게 나보다 3 초 것에 대해 – kbu

+0

@kbu (위 게시) 오류가 당신 말이 맞아요. ListActivity 및 setted Activity를 제거하고 이제는 모두 작동합니다! 모두들 Thx! – laalto

7

레이아웃을 부 풀리는 것을 잊어 버린 것 같습니다.

setContentView(R.layout.activity_view_list); 

이 줄

는 팽창 어떤 전망을 가지고 있지 않기 때문에 작동하지 않습니다 findViewById를 호출 할 때마다를 OrElse라는 주석되어서는 안된다.

관련 문제