java - Android - 将数据填充到 ListView 中

标签 java android

我正在尝试将数据从 sqlLite 数据库填充到 ListView 中。

下面是我尝试使用游标适配器将数据提取到 ListView 中的代码。

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" />

我在尝试这样做时收到以下错误。

09-21 09:13:04.715 10142-10142/com.example.joshigir.finance D/OpenGLRenderer: Enabling debug mode 0 09-21 09:13:45.007 10142-10142/com.example.joshigir.finance W/EGL_genymotion: eglSurfaceAttrib not implemented 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance D/AndroidRuntime: Shutting down VM 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4c96b20) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: FATAL EXCEPTION: main 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: Process: 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: at com.example.joshigir.finance.TransactionActivity$Myadapter.bindView(TransactionActivity.java:69) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.widget.CursorAdapter.getView(CursorAdapter.java:254) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.widget.AbsListView.obtainView(AbsListView.java:2255) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.widget.ListView.onMeasure(ListView.java:1175) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at 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.measureChildHorizontal(RelativeLayout.java:719) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at 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: at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at 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: at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at 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: at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at 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: at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at 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: at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 09-21 09:13:46.507 10142-10142/com.example.joshigir.finance E/AndroidRuntime: at android.view.View.measure(View.java:16497)

请帮忙找出错误。

最佳答案

Myadapter 类的 bindView(View, Context, Cursor) 方法中:

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

您需要在该方法的 view 属性上调用 findViewById(int),如下所示:

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

否则,您将使用 TransactionActivity 封闭类中的 findViewById(int) 方法,该方法在 Activity View 层次结构中查找 TextView。由于适配器中的 View 尚未附加到 Activity View ,因此它找不到它们并返回 null。因此,您在 bindView(View, Context, Cursor) 方法末尾对 null TextView 调用 setText(String)

参见here获取 CursorAdapter 示例。

关于java - Android - 将数据填充到 ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39618120/

相关文章:

android - 地理编码器阻止我的 Android 应用程序

android - 内容捕捉器 : Failed to notify a WebView

java - Java 中 OS X 上黑暗模式的菜单栏图标

java - 决定运行时需要在 JBoss 上使用哪个库

java - NAO语音识别问题

java - Android ListView - 检测页脚何时可见

android - 发送 PendingIntent 后不调用 onReceive()

android - 如何在抽屉导航 Activity fragment 中正确使用谷歌地图 fragment

java - 在 PaintComponent() 之外绘制形状 (java)

java - 安卓 : create customer in magento via SOAP API