使用Try语句

时间:2017-04-16 09:30:26

标签: java android listview textview alertdialog

所以我现在已经研究了大约4个小时,我将如何解决这个问题。

基本上我正在尝试创建一个Alert框并使用游标中的数据来设置TextView的文本并且数据就在那里但是一旦我尝试设置它我每次都得到一个空对象引用我拒绝移动过去它:(

以下是相关代码:

 public void InputManual(long id) {

        @SuppressLint("AndroidLintInflateParams")
        final SQLite db = new SQLite(this);
        SQLiteDatabase X = db.getReadableDatabase();

        Cursor c;

        try {
            c = X.rawQuery("SELECT Product FROM Inventory WHERE _id =" + id, null);
            c.moveToNext();
            CreatePopup();
            Y = (TextView) findViewById(R.id.product);
            Log.v(TAG, "DATA: " + c.getString(c.getColumnIndexOrThrow("Product")).toString());
            Y.setText(c.getString(c.getColumnIndexOrThrow("Product")));
            c.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

当我使用Log.v显示它时,数据就在那里,当我尝试setText时数据就消失了。

这是CreatePopup():

    private void CreatePopup() {

    LayoutInflater Manual = LayoutInflater.from(this);
    final View textEntryView = Manual.inflate(R.layout.update, null);
    final EditText infoData = (EditText) textEntryView.findViewById(R.id.InfoData);
    final AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("Update Quantity").setView(textEntryView).setPositiveButton("Save",
            new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog,
                                    int whichButton) {

                    String Result = infoData.getText().toString();
                    String Done = "";

                    if (Result.length() == 0) {

                    }                     
                }
            }).setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                                    int whichButton) {

                }
            });
    alert.show();

}

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="match_parent">

    <TextView
        android:id="@+id/Information"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:paddingLeft="5dp"
        android:text="@string/Product"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/product"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:inputType="none"
        android:text="" />

    <EditText
        android:id="@+id/InfoData"
        style="@android:style/TextAppearance.Small"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:hint="@string/hint_data"
        android:inputType="number" />

</LinearLayout>

我有一个listView onItemClickListerner,它只传递InputManual(id),它只是数据库中项目的id。

我正处于想要抛出键盘的地步,因为我无法弄清楚为什么每次尝试任何东西时它都会变为空。

任何帮助都会受到赞赏,即使采用不同的方法也会有所帮助。

我的目标是单击ListView中的项目并使用列表中的项生成警报框,这样我就可以将数量更改为其他值,但我只是尝试将TextView设置为ListView中的最新内容从数据库中获取数据。

我可能没有正确解释,但我愿意提供任何可以帮助我解决这个问题的信息!

stackoverflow的长时间浏览器,我终于到了需要帮助的地步,因为我不能谷歌了:(

实际错误:

inventory W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
inventory V/MyActivity: DATA: CokeD
inventory W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

谢谢!

2 个答案:

答案 0 :(得分:0)

此错误:

  

inventory W / System.err:java.lang.NullPointerException:Attempt to   调用虚方法&#39; void   android.widget.TextView.setText(java.lang.CharSequence中)&#39;在null   对象参考

表示TextView对象为null,而不是从数据库中获取的字符串值。

这意味着

Y = (TextView) findViewById(R.id.product);

返回null,可能是因为该视图由对话框拥有,而不是由活动拥有。

尝试将字符串值作为参数传递给CreatePopup()方法,然后可以从那里调用setText。像这样:

private void CreatePopup(String product) {

    LayoutInflater Manual = LayoutInflater.from(this);
    final View textEntryView = Manual.inflate(R.layout.update, null);
    final EditText infoData = (EditText) textEntryView.findViewById(R.id.InfoData);

    //Add these lines
    final TextView productText = (TextView) textEntryView.findViewById(R.id.product);
    productText.setText(product);

    ...

}

答案 1 :(得分:0)

通过这样做来实现它

   private void CreatePopup(Long id) {

    LayoutInflater Manual = LayoutInflater.from(this);
    final View textEntryView = Manual.inflate(R.layout.update, null);
    final EditText infoData = (EditText) textEntryView.findViewById(R.id.InfoData);
    final AlertDialog.Builder alert = new AlertDialog.Builder(this);
    final TextView TextSet = (TextView) textEntryView.findViewById(R.id.product);
    final SQLite db = new SQLite(this);

    SQLiteDatabase X = db.getReadableDatabase();
    Cursor c;
    c = X.rawQuery("SELECT Product FROM Inventory WHERE _id =" + id, null);
    c.moveToFirst();
    final String Data = c.getString(c.getColumnIndexOrThrow("Product"));
    TextSet.setText(Data);
    c.close();

    alert.setTitle("Update Quantity").setView(textEntryView).setPositiveButton("Save",
            new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog,
                                    int whichButton) {

                    String Result = infoData.getText().toString();

                    if (Result.length() == 0) {

                    }
                }
            }).setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                                    int whichButton) {
                    // ScanDataEmpty();
                }
            });
    alert.show();

}

现在我感到愚蠢。