2011-04-26 5 views
0

데이터베이스에 등록 된 카테고리 목록을 표시하는 데 문제가 있습니다. logcat에서 이러한 오류를 반환합니다.데이터베이스에 등록 된 항목을 표시하는 중 오류가 발생했습니다!

04-26 10:43:18.475: ERROR/AndroidRuntime(2570): Uncaught handler: thread main exiting due to uncaught exception 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570): java.lang.NullPointerException 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at br.com.codecreative.superlista.DisplayCategoria$CategoriaAdapter.getView(DisplayCategoria.java:112) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.AbsListView.obtainView(AbsListView.java:1274) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.ListView.makeAndAddView(ListView.java:1668) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.ListView.fillDown(ListView.java:637) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.ListView.fillFromTop(ListView.java:694) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.ListView.layoutChildren(ListView.java:1521) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.AbsListView.onLayout(AbsListView.java:1113) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.view.View.layout(View.java:6830) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.view.View.layout(View.java:6830) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.view.View.layout(View.java:6830) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.view.View.layout(View.java:6830) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.view.View.layout(View.java:6830) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.view.ViewRoot.performTraversals(ViewRoot.java:996) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.os.Looper.loop(Looper.java:123) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-26 10:43:18.494: ERROR/AndroidRuntime(2570):  at dalvik.system.NativeStart.main(Native Method) 

코드 :

public class DisplayCategoria extends ListActivity { 

    MeuBanco dba; 
    CategoriaAdapter myAdapter; 

    private class MyCategoria { 
     public MyCategoria(String d) { 
      descricao = d; 
     } 
     public String descricao; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     dba = new MeuBanco(this); 
     dba.open(); 
     requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     setContentView(R.layout.listacategoria); 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title); 

     ImageView btnInserelista = (ImageView) findViewById(R.id.insere); 

     btnInserelista.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent telaInsere = new Intent(DisplayCategoria.this,CadastraCategoria.class); 
       DisplayCategoria.this.startActivity(telaInsere); 
      } 
     }); 

     super.onCreate(savedInstanceState); 
     myAdapter = new CategoriaAdapter(this); 
     this.setListAdapter(myAdapter); 
    } 

    private class CategoriaAdapter extends BaseAdapter { 

     private LayoutInflater mInflater; 
     private ArrayList<MyCategoria> categorias; 
     public CategoriaAdapter(Context context){ 
      mInflater = LayoutInflater.from(context); 
      categorias = new ArrayList<MyCategoria>(); 
      getData(); 
     } 

     private void getData() { 
      Cursor c = dba.getCategorias(); 
      startManagingCursor(c); 
      if (c.moveToFirst()) { 
       do { 
        String descricao = c.getString(c.getColumnIndex(Constants.TITLE_NAME)); 
        MyCategoria temp = new MyCategoria(descricao); 
        categorias.add(temp); 
       } while (c.moveToNext()); 
      } 
     } 

     @Override 
     public int getCount() { 
      return categorias.size(); 
     } 

     @Override 
     public MyCategoria getItem(int position) { 
      return categorias.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      final ViewHolder holder; 
      View v = convertView; 
      if ((v == null) || (v.getTag() == null)) { 
       v = mInflater.inflate(R.layout.categoriarow, null); 
       holder = new ViewHolder(); 
       holder.mDescricao = (TextView) findViewById(R.id.desc_cat); 
       v.setTag(holder); 
      } else { 
       holder = (ViewHolder) v.getTag(); 
      } 

      holder.mcategoria = getItem(position); 
      holder.mDescricao.setText(holder.mcategoria.descricao); 

      v.setTag(holder); 

      return v; 
     } 

     public class ViewHolder { 
      MyCategoria mcategoria; 
      TextView mDescricao; 
     } 
    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/backgroundlista"> 
    <ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:dividerHeight="1px" 
    android:layout_height="fill_parent"> 
    </ListView> 
</LinearLayout> 
+0

어떤 줄이 112입니까? 스택 추적에 따르면 getView()의 어딘가에 있지만 게시 한 코드는 그다지 길지 않습니다. 덧붙여 말하자면, 이것은 여러분이 가지고있는 db 문제가 아니라는 것을 의미합니다 (적어도 직접적으로는 그렇지 않습니다). –

+0

줄 112가이 holder.mDescricao.setText (holder.mcategoria.descricao); 감사 ! – gangmobile

답변

1
holder.mDescricao = (TextView) findViewById(R.id.desc_cat); 

필요

holder.mDescricao = (TextView) v.findViewById(R.id.desc_cat); 

수 그것에게 첫 번째 방법을 호출하는 널 ... 따라서는 NullPointerException 때를 반환 로그 캣이

setText()를 호출합니다.

+0

Maximus, 답장을 보내 주셔서 감사 드리며 귀하의 솔루션을 사용하고 코드에 추가하여 성공적으로 테스트했습니다. 감사! – gangmobile

+0

저는 이것이 실제로 왜 더 명확한 Android 설명을 원합니다. 나는 내가 이것을 직접적으로 만났기 때문에 이것을 알고있다. 기본적으로 부모 뷰 그룹이나 setContentView()를 호출 한 후 액티비티에서만 findViewFromId()를 사용하고 싶다. – Maximus

관련 문제