ImageButton и NullPointerException - PullRequest
0 голосов
/ 30 июня 2011

Могу ли я получить исключение NullPointerException, поскольку кнопка, на которую я ссылаюсь, вложена в несколько макетов?Каждый раз, когда я ссылаюсь на browseEditBtn, я получаю исключение.Это простая кнопка!Come'on.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TableLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"
android:orientation="horizontal" 
android:stretchColumns="*">
<!-- <include layout="@layout/mydesctextview" /> -->
<TableRow 
android:id="@+id/tableRow1" 
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:orientation="horizontal">

        <TextView 
        android:text="TextView" 
        android:layout_width="wrap_content"
        android:layout_gravity="left|center_vertical" 
        android:id="@+id/txtItem" 
        android:textSize="20dip" 

        ></TextView>



        <ImageButton

        android:src="@drawable/editbtn"
        android:layout_marginRight="10dip" 
        android:layout_gravity="right|center_vertical"
        android:id="@+id/browseEditBtn"
        android:background="@drawable/my_group_statelist"
        ></ImageButton>

</TableRow>
</TableLayout>
</LinearLayout>

Исходный код (Кнопка вызывается в главном onCreate ()) :

public class BrowseActivity extends ExpandableListActivity {

final private String[] asColumnsToReturn = {
        Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_ITEM,
        Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_DESC,
        Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_MANU,
        Items.ITEMS_TABLE_NAME + "." + Items.ITEMS_ID };

@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.browse);
    DbHelper dbh = new DbHelper(this.getApplicationContext());
    SQLiteDatabase db = dbh.getWritableDatabase();
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(Items.ITEMS_TABLE_NAME);

    ExpandableListView browseView = (ExpandableListView)    findViewById(android.R.id.list);
    Button editBrowseBtn = (Button) findViewById(R.id.browseEditBtn);

    Cursor mCursor = queryBuilder.query(db, asColumnsToReturn, null, null,
            null, null, Items.DEFAULT_SORT_ORDER);
    startManagingCursor(mCursor);

    SimpleExpandableListAdapter mAdapter = new SimpleExpandableListAdapter(
            this, createGroup(), R.layout.row, R.layout.row, new String[] {
                    Items.ITEMS_ITEM, Items.ITEMS_DESC }, new int[] {
                    R.id.txtItem, R.id.dscItem }, createChildren(),
            R.layout.exprow, new String[] { Items.ITEMS_DESC,
                    Items.ITEMS_MANU }, new int[] { R.id.dscItem,
                    R.id.manuItem });
    browseView.setAdapter(mAdapter);

    editBrowseBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(BrowseActivity.this,
                    EditItemActivity.class);
            startActivity(intent);

        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add("Add Item").setIntent(new Intent(this, AddItemActivity.class));

    return super.onCreateOptionsMenu(menu);
}

@SuppressWarnings("rawtypes")
public List createGroup() {
    DbHelper dbh = new DbHelper(this.getApplicationContext());
    SQLiteDatabase db = dbh.getWritableDatabase();
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(Items.ITEMS_TABLE_NAME);

    Cursor mCursor = queryBuilder.query(db, new String[] {
            Items.ITEMS_ITEM, Items.ITEMS_DESC }, null, null, null, null,
            Items.DEFAULT_SORT_ORDER);
    startManagingCursor(mCursor);

    ArrayList<HashMap<String, String>> groupList = new ArrayList<HashMap<String,   String>>();
    mCursor.moveToFirst();
    while (!(mCursor.isAfterLast())) {

        HashMap<String, String> groupMap = new HashMap<String, String>();
        groupMap.put(Items.ITEMS_ITEM,
                mCursor.getString(mCursor.getColumnIndex(Items.ITEMS_ITEM)));
        groupMap.put(Items.ITEMS_DESC,
                      mCursor.getString(mCursor.getColumnIndex(Items.ITEMS_DESC)));

        groupList.add(groupMap);
        mCursor.moveToNext();
    }

    return (List) groupList;
}

@SuppressWarnings("rawtypes")
public List createChildren() {
    DbHelper dbh = new DbHelper(this.getApplicationContext());
    SQLiteDatabase db = dbh.getWritableDatabase();
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(Items.ITEMS_TABLE_NAME);

    Cursor mCursor = queryBuilder.query(db, new String[] {
            Items.ITEMS_ITEM, Items.ITEMS_DESC, Items.ITEMS_MANU }, null,
            null, null, null, Items.DEFAULT_SORT_ORDER);
    startManagingCursor(mCursor);
    mCursor.moveToFirst();

    ArrayList<ArrayList<HashMap<String, String>>> childList = new ArrayList<ArrayList<HashMap<String, String>>>();

    while (!(mCursor.isAfterLast())) {

        ArrayList<HashMap<String, String>> childListDesc = new                      ArrayList<HashMap<String, String>>();

        for (int i = 0; i < 1; i++) {
            HashMap<String, String> childMap = new HashMap<String, String>();
            childMap.put(Items.ITEMS_DESC, mCursor.getString(mCursor
                    .getColumnIndex(Items.ITEMS_DESC)));
            childMap.put(Items.ITEMS_MANU, mCursor.getString(mCursor
                    .getColumnIndex(Items.ITEMS_MANU)));

            childListDesc.add(childMap);

        }

        childList.add(childListDesc);
        mCursor.moveToNext();
    }

    return (List) childList;
}
}

И, наконец, logcat, я думаю...

06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): Java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.simplyDesign.mdk / com.simplyDesign.mdk.BrowseActivity}: java.lang.NullPointerException 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2663) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): на android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): на android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): на android.os.Handler.dispatchMessage (Handler.java:99) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): на android.os.Looper.loop (Looper.java:123) 06-30 13: 01: 29.390:ОШИБКА / AndroidRuntime (9189): на android.app.ActivityThread.main (ActivityThread.java:4627) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): на java.lang.reflect.Method.invokeNative (NativeМетод) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): в java.lang.reflect.Method.invoke (Method.java:521) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): в dalvik.system.NativeStart.main (собственный метод) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): Вызвано: java.lang.NullPointerException 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): в com.simplyDesign.mdk.BrowseActivity.onCreate (BrowseActivity.java:62) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1049) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 06-30 13: 01: 29.390: ОШИБКА / AndroidRuntime (9189): ... еще 11

edit_01

public void doAction(View v) {

    startActivity(new Intent(getApplicationContext(),
            EditItemActivity.class));

}

В прошлом я использовал другие кнопки для указания на EditItemActivity, и они работали нормально.

Ответы [ 5 ]

1 голос
/ 30 июня 2011

Похоже, что вы предоставили макет для R.layout.row.Если так, то это имеет большой смысл, что вы не можете найти кнопку.Кнопка динамически создается для каждой строки.Возможно, вы захотите создать собственный адаптер, а затем в getView установите обработчик щелчка.

1 голос
/ 30 июня 2011

Как называется XML-файл макета, который вы разместили? Он не выглядит как browse.xml, потому что в нем есть ваш ExpandableListView. Идентификаторы, на которые вы ссылаетесь в своем коде Java, должны отображаться в заданном вами содержимом View; в противном случае вы должны надуть View самостоятельно.

Редактировать

Вы бы добавили что-то вроде

android:onClick="doAction"

к XML этого ImageButton.

Тогда у вас в деятельности будет doAction(View v) метод, который будет выполнять ваши действия onClick.

0 голосов
/ 30 июня 2011
Button editBrowseBtn = (Button) findViewById(R.id.browseEditBtn);

Вы используете ImageButton для Button.Кнопка Image не является кнопкой:

Объект -> Вид -> Текстовое представление -> Кнопка

Объект -> Вид -> ImageView -> ImageButton

Так попробуйте это:

ImageButton editBrowseBtn = (ImageButton) findViewById(R.id.browseEditBtn);
0 голосов
/ 30 июня 2011

при использовании таблиц у меня были проблемы с получением внутренних элементов. Попробуйте получить таблицу целиком findViewById(R.id.the_table) и использовать myTableView.findViewById(R.id.a_row_in_the_table) и получить строку, затем использовать myTableRow.findViewById(R.id.my_element_in_this_row)

0 голосов
/ 30 июня 2011

Попробуйте этот код,

 <ImageButton
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" 
    android:src="@drawable/editbtn"
    android:layout_marginRight="10dip" 
    android:layout_gravity="right|center_vertical"
    android:id="@+id/browseEditBtn"
    android:background="@drawable/my_group_statelist"
    ></ImageButton>

Вы не можете пропустить layout_height и layout_width

...