【问题标题】:When I scroll my ListView my application crashes当我滚动我的 ListView 我的应用程序崩溃
【发布时间】:2017-07-15 16:42:36
【问题描述】:

我需要认真的帮助,到目前为止,我的应用程序运行良好。我正在使用sqLite 数据库做一个项目并显示搜索结果。我使用TextView 显示搜索结果,它工作正常,但是当我使用ListView 显示它时,当我滚动它时它崩溃了。需要帮助.......

我的代码在 SearchCustomer.java

    public class SearchCustomer extends Activity {


Button searchCustomer;
String errormsg = "No Result Found";
String[] nameCus;
ListView Cusinfo;

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

    searchCustomer = (Button) findViewById(R.id.Bsearch);

    Cusinfo = (ListView) findViewById(R.id.cusinfoList);
    final AutoCompleteTextView CustomerName = (AutoCompleteTextView) findViewById(R.id.CustomerName);

    final Customer name = new Customer(this);
    searchCustomer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String CustomerNam = CustomerName.getText().toString().trim();
            name.open();
            nameCus = name.getDetails(CustomerNam);
            name.close();
            ListAdapter cus = new ArrayAdapter<>(SearchCustomer.this, android.R.layout.simple_list_item_1, nameCus);
            Cusinfo.setAdapter(cus);
            Cusinfo.setOnItemClickListener(
                    new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                            String det = String.valueOf(parent.getItemAtPosition(position));
                            Toast.makeText(SearchCustomer.this, det, Toast.LENGTH_LONG).show();
                        }
                    });
        }else{
            Toast.makeText(SearchCustomer.this, errormsg, Toast.LENGTH_LONG).show();
        }
    });
}
}

我的代码在 Customer.java

public class Customer {

public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "cus_name";
public static final String KEY_PHONE = "cus_phone";
public static final String KEY_ADDRESS = "cus_address";
public static final String KEY_DATE = "cus_date";
public static final String KEY_DETAILS = "cus_details";
public static final String KEY_AMOUNT = "cus_amount";
public static final String KEY_SRI = "cus_sri";

private static final String DATABASE_NAME = "Customerdb";
private static final String DATABASE_TABLE = "customerTable";
private static final int DATABASE_VERSION = 1;
private final Context ourContext;
private DbHelper ourHelper;
private SQLiteDatabase ourDatabase;


public String[] getDetails(String customerNam) {
    String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_PHONE, KEY_ADDRESS, KEY_DATE, KEY_DETAILS, KEY_AMOUNT, KEY_SRI};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_PHONE + "=?",
            new String[]{customerNam}, null, null, null, null);
    String[] result = new String[100];
    int i = 0;

    int iRow = c.getColumnIndex(KEY_ROWID);
    int iName = c.getColumnIndex(KEY_NAME);
    int iPhone = c.getColumnIndex(KEY_PHONE);
    int iAddress = c.getColumnIndex(KEY_ADDRESS);
    int iDate = c.getColumnIndex(KEY_DATE);
    int iDetails = c.getColumnIndex(KEY_DETAILS);
    int iAmount = c.getColumnIndex(KEY_AMOUNT);
    int iSri = c.getColumnIndex(KEY_SRI);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result[i] = c.getString(iRow) + "\n" + "Name: " + c.getString(iName) + "\n" +
                "PhoneNo.: " + c.getString(iPhone) + "\n" + "Address: " + c.getString(iAddress) + "\n" +
                "Date: " + c.getString(iDate) + "\n" + "Details: " + c.getString(iDetails) + "\n" +
                "Amount: Rs." + c.getString(iAmount) + "\n" + "Type : " + c.getString(iSri) + "\n" + "____________________________________" + "\n";
        i++;
    }
    return result;
}

}

我的代码在 activity_search_customer.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    android:orientation="vertical"
    tools:context="com.innovation.fae.camerawork.SearchCustomer">


    <TextView
        android:id="@+id/textView"
        style="@style/AlertDialog.AppCompat"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="5dp"
        android:text="@string/enter_the_customer_name"
        android:textSize="18dp" />

    <AutoCompleteTextView
        android:id="@+id/CustomerName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Customer Phone No."
        android:inputType="phone"
        android:paddingTop="20dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp">

        <Button
            android:id="@+id/Bsearch"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/search"
            android:textSize="18sp"
            android:textStyle="italic" />


    </LinearLayout>

        <ListView
            android:id="@+id/cusinfoList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#c3deff"
            android:textColor="#001e71"
            android:textSize="20sp" />

</LinearLayout>

我的**Logcat**

07-15 22:38:19.825 29729-29729/com.innovation.fae.camerawork E/AndroidRuntime: FATAL EXCEPTION: main
                                                                           Process: com.innovation.fae.camerawork, PID: 29729
                                                                           java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
                                                                               at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
                                                                               at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
                                                                               at android.widget.AbsListView.obtainView(AbsListView.java:2349)
                                                                               at android.widget.ListView.makeAndAddView(ListView.java:1864)
                                                                               at android.widget.ListView.fillDown(ListView.java:698)
                                                                               at android.widget.ListView.fillGap(ListView.java:662)
                                                                               at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5007)
                                                                               at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3424)
                                                                               at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3352)
                                                                               at android.widget.AbsListView.onTouchMove(AbsListView.java:3780)
                                                                               at android.widget.AbsListView.onTouchEvent(AbsListView.java:3638)
                                                                               at android.view.View.dispatchTouchEvent(View.java:8480)
                                                                               at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2400)
                                                                               at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093)
                                                                               at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
                                                                               at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
                                                                               at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
                                                                               at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
                                                                               at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
                                                                               at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
                                                                               at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
                                                                               at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
                                                                               at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
                                                                               at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
                                                                               at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
                                                                               at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107)
                                                                               at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2625)
                                                                               at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1770)
                                                                               at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
                                                                               at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2586)
                                                                               at android.view.View.dispatchPointerEvent(View.java:8675)
                                                                               at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4129)
                                                                               at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3995)
                                                                               at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3550)
                                                                               at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3603)
                                                                               at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3569)
                                                                               at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3686)
                                                                               at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3577)
                                                                               at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3743)
                                                                               at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3550)
                                                                               at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3603)
                                                                               at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3569)
                                                                               at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3577)
                                                                               at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3550)
                                                                               at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5813)
                                                                               at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5787)
                                                                               at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5758)
                                                                               at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5903)
                                                                               at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
                                                                               at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
                                                                               at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
                                                                            at android.view.ViewRootImpl.doConsumeBatchedI

【问题讨论】:

  • 需要更多信息。添加日志猫

标签: java android sqlite listview


【解决方案1】:
  1. 列表视图不应位于 scrollview 中。

  2. 发布您的日志让我们看看错误来自哪里。

编辑 1
我检查了您的 getDetails 方法,您定义了一个包含 100 个索引的数组,如果结果超过 100 个怎么办,您应该为此使用 ArrayList 或使用您的 cursor 中的计数定义数组

String[] result = new String[c.getCount()];  

编辑 2
错误似乎来自

 String CustomerNam = CustomerName.getText().toString().trim();

检查CustomerName是否不为空

【讨论】:

  • 当 Listview 处于 Scrollview 时,应用程序不会崩溃
  • 我已经生成了签名的应用程序,我复制到我的手机然后安装,所以我无法检查错误
  • cricket_007 我只是告诉他一个最佳实践@AravindEkan 你可以卸载已签名的并再次调试,对吗?
  • 我已经添加了logcat 请检查
【解决方案2】:

根据我使用 ListView 的经验,我从来没有在 ScrollView 中使用过它。

它应该自己滚动。

【讨论】:

  • 当 Listview 处于 Scrollview 时,应用程序不会崩溃
  • 我认为我的 getDetails 功能有问题,请检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多