Как я могу "printf" переменные в Android, чтобы проверить мой код? - PullRequest
0 голосов
/ 26 мая 2011

У меня есть проблема, которую я пытаюсь решить, я пытался извлечь свои данные из намерения, используя mRowId, ниже которого мне постоянно возвращалось исключение NullPointerException от fetchDrug () в LogCat.

Выполняя некоторые неполадки с помощью отладки, я понял, что моя переменная mRowId не равна Null и указывает на что-то, но я не знаю, на что он указывает.

Как я могу проверить, на что указывает моя переменная mRowId?Или, как правило, такие переменные будут непостижимой тарабарщиной?

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.drug_info);

        //Defining the views
        mDrugText = (TextView) findViewById(R.id.drug);
        mContentText = (TextView) findViewById(R.id.content);

        Bundle extras = getIntent().getExtras();

        mRowId = extras.getLong(DrugsDbAdapter.KEY_ROWID);

        if(mRowId == null) {

            Log.e("mRowId is null", "ok");

        } else {

        Cursor drug = mDbHelper.fetchDrug(mRowId);

        //Managing Cursor to pluck values to display
        startManagingCursor(drug);

        mDrugText.setText(drug.getString(drug.getColumnIndexOrThrow(DrugsDbAdapter.KEY_DRUG)));

        mContentText.setText(drug.getString(drug.getColumnIndexOrThrow(DrugsDbAdapter.KEY_CONTENT)));

    }
    }

Ответы [ 4 ]

1 голос
/ 26 мая 2011

Вместо printf используйте существующую функциональность log в SDK.

Вывод появится в окне logcat Eclipse (возможно, это лучший вариант, так как он работает в режиме реального времени, и выможет фильтровать дисплей), или вы можете извлечь журналы устройства / эмулятора вручную.

Например:

Log.i ( "MyApp", "Drug = " + drug.getString ( drug.getColumnIndexOrThrow ( DrugsDbAdapter.KEY_DRUG ) ) );
1 голос
/ 26 мая 2011

Часто объекты имеют метод "toString ()" для представления объекта в удобочитаемой форме;Вы можете передать это в вызов Log.e ().В вашем случае это скорее числовой (длинный), а не объектный объект, поэтому вы можете напрямую отобразить его в своем журнале.

Как только вы узнаете идентификатор строки, которую пытаетесь получить, вы можетечто он действителен, проверив вашу базу данных (используя команду sqlite3, встроенную в эмулятор, или извлекая файл на компьютер разработчика и используя любое из множества инструментов sqlite).Я бы посоветовал изучить вспомогательный код вашей базы данных, чтобы увидеть, как его использует метод fetchDrug ().Возможно, нулевой указатель не имеет ничего общего с параметром, но с другими элементами в этом методе.

1 голос
/ 26 мая 2011

Используйте функцию отладки Eclipse и шаг за шагом пройдитесь по коду. Он дает значения всех переменных.

0 голосов
/ 26 мая 2011

Вот несколько вариантов, которые следует учитывать:

Вариант 1. Установите точку останова в onCreate в Eclipse.Вы можете найти более подробную информацию об отладке приложений Android в Eclipse здесь: http://developer.android.com/guide/developing/debugging/debugging-projects.html

Вариант 2. Добавьте операторы Log в свой код и просмотрите результаты в logcat.Подробнее о входе в Android вы можете прочитать здесь: http://developer.android.com/reference/android/util/Log.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...