2016-09-21 7 views
0

sqlLiteデータベースのデータをリストビューに取り込もうとしています。Android - リストビューにデータを埋め込む

以下は、cursoradapterを使用してリストビューにデータをフェッチしようとしているコードです。

public class TransactionActivity extends AppCompatActivity { 

DBOperations dbOperations; 
ListView lv; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_transaction); 

    lv=(ListView)findViewById(R.id.listView); 
    dbOperations=new DBOperations(TransactionActivity.this); 

    Cursor tablecursor = dbOperations.getTableRecords(DBOperations.TABLE_TRANSACTIONS); 

    Myadapter sca = new Myadapter(TransactionActivity.this,tablecursor,true); 
    lv.setAdapter(sca); 

    } 

public class Myadapter extends CursorAdapter{ 

    public Myadapter(Context context,Cursor tablecursor, boolean autoRequery){ 
     super(context,tablecursor,autoRequery);} 


    @Override 
    public View newView(Context context, Cursor tablecursor, ViewGroup viewGroup) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.listitem, viewGroup, false); 
     return view; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     cursor.moveToFirst(); 

     TextView Accnameview = (TextView)findViewById(R.id.textView); 
     TextView Incomevalueview=(TextView)findViewById(R.id.textView2); 


     String accname = cursor.getString(cursor.getColumnIndex(DBOperations.COL_ACC_NAME)); 
     String incomev =cursor.getString(cursor.getColumnIndex(DBOperations.COL_DEBIT)); 


     Accnameview.setText(accname); 
     Incomevalueview.setText(incomev); 

    } 
} 



} 

膨張さlistview.xmlはそうしようとしたとき、私は以下のエラーを取得しています

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="100dp" 
android:background="@android:color/darker_gray"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/textView" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="Medium Text" 
    android:id="@+id/textView2" 
    android:layout_gravity="right" /> 

です。

9月21日09:13:04.715 10142から10142/com.example.joshigir.finance D/OpenGLRenderer:13:0:09から21 09デバッグモードを有効45.007 10142から10142/com.example .joshigir.finance W/EGL_genymotion: eglSurfaceAttribが実装されていない09-21 09:13:46.507 10142-10142/com.example.joshigir.finance D/AndroidRuntime:シャットダウン down VM 09-21 09:13:46.507 10142- 10142/com.example.joshigir.finance W/dalvikvm:threadid = 1:キャッチされていない例外で終了するスレッド (グループ= 0xa4c96b20)09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:FATAL E XCEPTION:メイン09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:プロセス: com.example.joshigir.finance、PID:10142 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: java.lang.NullPointerException 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: com.example .joshigir.finance.TransactionActivity $ Myadapter.bindView(TransactionActivity.java:69) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: android.widget.CursorAdapter。 getView(CursorAdapter.java:254)09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRunti私: android.widget.AbsListView.obtainView(AbsListView.java:2255)で9月21日 09:13:46.507 10142から10142/com.example.joshigir.finance E/AndroidRuntime: android.widget.ListViewで.measureHeightOfChildren(ListView.java:1263) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: android.widget.ListView.onMeasure(ListView.java:1175) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:android.view.View.measure(View.java:16497) 09-21 09:13:46.507 10142 -10142/com.example.joshigir.finance E/AndroidRuntime:at android.widget.RelativeLayout.measureChildHorizo​​ntal(R elactLayout.java:719) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:android.view.View.measure(View.java:16497) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 09-21 09:13:46.507 10142-10142/com.example.joshigir。金融 E/AndroidRuntime: android.widget.FrameLayout.onMeasure(FrameLayout.java:310)で09から21 09:13:46.507 10142から10142/com.example.joshigir.finance E/AndroidRuntime: アンドロイドで.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:android.view.View.measure (View.java:16497) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 09 -21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:android.view.View .measure(View.java:16497) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 9月21日09:13:46.507 10142から10142/com.example.joshigir.finance E/AndroidRuntime: android.widget.FrameLayout.onMeasure(FrameLayout.java:310)で09から21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:android.view.View.measure(View.java:16497) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 09-21 09:13:46.507 10142-10142/com.example.joshigir E/AndroidRuntimeを.finance:13:46.507 10142から10142/com.example.joshigir.finance E/AndroidRuntime: android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 9月21日09時 でandroid.widget.LinearLayout.onMeasure(LinearLayout.java:588)09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:android.view.View.measure(View.java:16497) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:13:46.507 10142から10142/com.example.joshigir.finance E android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 9月21日09時/ AndroidRuntime:13:46.507 10142から10142/com.example.joshigir.finance E/AndroidRuntime: com.androidでandroid.widget.FrameLayout.onMeasure(FrameLayout.java:310)09から21 09で。 internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2291) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime:android.view.View.measure(View.java:16497)

では、親切にエラーを見つけるのに役立ちます。あなたはこのように、方法のview属性にfindViewById(int)を呼び出す必要が

TextView Accnameview = (TextView)findViewById(R.id.textView); 
TextView Incomevalueview=(TextView)findViewById(R.id.textView2); 

MyadapterクラスからあなたのbindView(View, Context, Cursor)方法で

+0

は親切にあなたのアダプタクラスnullポインタ例外は、あなたがnullである事をアクセスしようとしているか、それ 'R.layout.listitem'または' R.layout.listview'ある –

+0

初期化されていない可能性がありますが意味している投稿します - ただのタイプミス?あなたはおそらく 'Cursor tablecursor = dbOperations.getTableRecords(DBOperations.TABLE_TRANSACTIONS);'がnullを返すことを想定することができます。あなたはカーソル上でヌルチェックをしないでおそらくここにスローされます: 'cursor.moveToFirst();' –

答えて

0
@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    // don't call this here; the cursor is already positioned on the 
    // the correct record when this method is called 
// cursor.moveToFirst(); 

    // you need to call findViewById on the view parameter 
// TextView Accnameview = (TextView)findViewById(R.id.textView); 
// TextView Incomevalueview=(TextView)findViewById(R.id.textView2); 
    TextView Accnameview = (TextView) view.findViewById(R.id.textView); 
    TextView Incomevalueview=(TextView) view.findViewById(R.id.textView2); 


    String accname = cursor.getString(cursor.getColumnIndex(DBOperations.COL_ACC_NAME)); 
    String incomev =cursor.getString(cursor.getColumnIndex(DBOperations.COL_DEBIT)); 


    Accnameview.setText(accname); 
    Incomevalueview.setText(incomev); 

} 
1

TextView Accnameview = (TextView) view.findViewById(R.id.textView); 
TextView Incomevalueview = (TextView) view.findViewById(R.id.textView2); 

そうしないと、findViewById(int)メソッドを使用していますTransactionActivityの包含クラスから、アクティビティビュー階層内のTextViewを検索します。アダプターからのビューはアクティビティー・ビューにまだ添付されていないので、アダプターはそれを見つけず、ヌルを戻します。したがって、bindView(View, Context, Cursor)メソッドの最後にnull TextViewsにsetText(String)を呼び出しています。

CursorAdapterの例については、hereを参照してください。

+0

ありがとう。これは助けになった! –

関連する問題