Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 17 июн 2019, 08:05

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Помогите найти ошибку в коде.
СообщениеДобавлено: 15 янв 2012, 18:15 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Ошибка кроется в строке
Код: [ Загрузить ] [ Скрыть ]
  1. contact.getLayoutParams().width = LayoutParams.FILL_PARENT; 
но только не пойму почему. Суть класса - сделать небольшую базу данных, которая может создавать контакты и выводить их на другой Activity в таком же виде, как и в 41 уроке http://startandroid.ru/uroki/vse-uroki-spiskom/81-urok-41-ispolzuem-layoutinflater-dlja-sozdanija-spiska.html. Что я делаю не так? Судя по логу с ошибками я так понимаю что ошибка из-за того, что объект второго Activity просто еще не создан, его нету. Отсюда и java.lang.NullPointerException. Всё верно?
Код: [ Загрузить ] [ Скрыть ]
  1. public class EditContactDBActivity extends Activity implements OnClickListener  { 
  2.  
  3.      
  4.     private static final String TABLE_NAME = "phonebook"; 
  5.     private static final String KEY_ID = "_id"; 
  6.     private static final String KEY_JOB = "job"; 
  7.     private static final String KEY_NAME = "name"; 
  8.     private static final String KEY_PHONE = "phone"; 
  9.     private static final String KEY_EMAIL = "email"; 
  10.      
  11.     String id, job, name, phone, email; 
  12.     int[] colors = new int[2]; 
  13.      
  14.     EditText etId, etJob, etName, etPhone, etEmail; 
  15.     Button btnAddContact, btnDelContact,  
  16.            btnClearContacts, btnOpenContacts, btnUpdContact; 
  17.     DBHelper dbHelper; 
  18.     ContentValues cv = new ContentValues(); 
  19.      
  20.     @Override 
  21.     public void onCreate(Bundle savedInstanceState) { 
  22.         super.onCreate(savedInstanceState); 
  23.         setContentView(R.layout.main); 
  24.          
  25.         btnAddContact = (Button) findViewById(R.id.btnAddContact); 
  26.         btnAddContact.setOnClickListener(this); 
  27.          
  28.         btnDelContact = (Button) findViewById(R.id.btnDelContact); 
  29.         btnDelContact.setOnClickListener(this); 
  30.          
  31.         btnUpdContact = (Button) findViewById(R.id.btnUpdContact); 
  32.         btnUpdContact.setOnClickListener(this); 
  33.          
  34.         btnClearContacts = (Button) findViewById(R.id.btnClearContacts); 
  35.         btnClearContacts.setOnClickListener(this); 
  36.          
  37.         btnOpenContacts = (Button) findViewById(R.id.btnOpenContacts); 
  38.         btnOpenContacts.setOnClickListener(this); 
  39.          
  40.         etId = (EditText) findViewById(R.id.etId); 
  41.         etJob = (EditText) findViewById(R.id.etJob); 
  42.         etName = (EditText) findViewById(R.id.etName); 
  43.         etPhone = (EditText) findViewById(R.id.etPhone); 
  44.         etEmail = (EditText) findViewById(R.id.etEmail); 
  45.          
  46.         dbHelper = new DBHelper(this); 
  47.         colors[0] = Color.parseColor("#559966CC"); 
  48.         colors[1] = Color.parseColor("#55336699"); 
  49.     } 
  50.      
  51.     @Override 
  52.     public void onClick(View v) { 
  53.         SQLiteDatabase db = dbHelper.getWritableDatabase(); 
  54.         putData(); 
  55.         switch (v.getId()) { 
  56.          
  57.         case R.id.btnAddContact: 
  58.             db.insert(TABLE_NAME, null, cv); 
  59.             break; 
  60.              
  61.         case R.id.btnUpdContact: 
  62.             if (id.equalsIgnoreCase("")) { 
  63.               break; 
  64.             } 
  65.             db.update(TABLE_NAME, cv, "_id = ?",new String[] { id }); 
  66.             break; 
  67.          
  68.         case R.id.btnDelContact: 
  69.             if (id.equalsIgnoreCase("")) { 
  70.               break; 
  71.             } 
  72.             db.delete(TABLE_NAME, "_id = " + id, null); 
  73.             break; 
  74.          
  75.         case R.id.btnOpenContacts: 
  76.             Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); 
  77.             if (cursor.moveToFirst()) { 
  78.             int idColIndex = cursor.getColumnIndex(KEY_ID); 
  79.             int jobColIndex = cursor.getColumnIndex(KEY_JOB); 
  80.             int nameColIndex = cursor.getColumnIndex(KEY_NAME); 
  81.             int phoneColIndex = cursor.getColumnIndex(KEY_PHONE); 
  82.             int emailColIndex = cursor.getColumnIndex(KEY_EMAIL); 
  83.             LinearLayout layoutContactList = (LinearLayout) findViewById(R.id.layoutContactList); 
  84.             LayoutInflater ltInflater = getLayoutInflater(); 
  85.             int i=0; 
  86.             Intent intent = new Intent(this, ContactListActivity.class); 
  87.             while (cursor.moveToNext()) { 
  88.                 View contact = ltInflater.inflate(R.layout.contact, layoutContactList, false); 
  89. //                TextView tvId = (TextView) contact.findViewById(R.id.tvId); 
  90. //                tvId.setText(cursor.getInt(idColIndex)); 
  91.                 TextView tvJob = (TextView) contact.findViewById(R.id.tvJob); 
  92.                 tvJob.setText(cursor.getString(jobColIndex)); 
  93.                 TextView tvName = (TextView) contact.findViewById(R.id.tvName); 
  94.                 tvName.setText(cursor.getString(nameColIndex)); 
  95.                 TextView tvPhone = (TextView) contact.findViewById(R.id.tvPhone); 
  96.                 tvPhone.setText(cursor.getString(phoneColIndex)); 
  97.                 TextView tvEmail = (TextView) contact.findViewById(R.id.tvEmail); 
  98.                 tvEmail.setText(cursor.getString(emailColIndex)); 
  99.                 Log.d("myLogs", "1"); 
  100.                 contact.getLayoutParams().width = LayoutParams.FILL_PARENT; 
  101.                 Log.d("myLogs", "2"); 
  102.                 contact.setBackgroundColor(colors[i % 2]); 
  103.                 layoutContactList.addView(contact); 
  104.                 i++; 
  105.             } 
  106.             startActivity(intent); 
  107.             break; 
  108.         } 
  109.         case R.id.btnClearContacts: 
  110.             db.delete(TABLE_NAME, null, null); 
  111.             break; 
  112.         } 
  113.         dbHelper.close(); 
  114.     } 
  115.      
  116.     private ContentValues putData() { 
  117.           id = etId.getText().toString(); 
  118.           job = etJob.getText().toString(); 
  119.           name = etName.getText().toString(); 
  120.           phone = etPhone.getText().toString(); 
  121.           email = etEmail.getText().toString(); 
  122.            
  123.           cv.put(KEY_JOB, name); 
  124.           cv.put(KEY_NAME, name); 
  125.           cv.put(KEY_PHONE, name); 
  126.           cv.put(KEY_EMAIL, email); 
  127.           return cv; 
  128.     } 
  129.      
  130.  
  131.  
  132. class DBHelper extends SQLiteOpenHelper { 
  133.  
  134.     private static final int DB_VERSION = 1;     
  135.     private static final String DB_NAME = "firstDB"; 
  136.      
  137.     public DBHelper(Context context) { 
  138.       super(context, DB_NAME, null, DB_VERSION); 
  139.     } 
  140.  
  141.     @Override 
  142.     public void onCreate(SQLiteDatabase db) { 
  143.         db.execSQL("create table phonebook (" 
  144.             + "_id integer primary key autoincrement," 
  145.             + "job text," 
  146.             + "name text," 
  147.             + "phone text," 
  148.             + "email text" + ");"); 
  149.     } 
  150.  
  151.     @Override 
  152.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
  153.  
  154.     } 
  155.   } 


Цитата:
01-15 15:10:51.732: W/KeyCharacterMap(546): No keyboard for id 0
01-15 15:10:51.742: W/KeyCharacterMap(546): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-15 15:10:58.862: D/myLogs(546): 1
01-15 15:10:58.872: D/AndroidRuntime(546): Shutting down VM
01-15 15:10:58.882: W/dalvikvm(546): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
01-15 15:10:58.882: E/AndroidRuntime(546): Uncaught handler: thread main exiting due to uncaught exception
01-15 15:10:58.912: E/AndroidRuntime(546): java.lang.NullPointerException
01-15 15:10:58.912: E/AndroidRuntime(546): at my.contacts.EditContactDBActivity.onClick(EditContactDBActivity.java:121)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.View.performClick(View.java:2364)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.View.onTouchEvent(View.java:4179)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.widget.TextView.onTouchEvent(TextView.java:6540)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.View.dispatchTouchEvent(View.java:3709)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-15 15:10:58.912: E/AndroidRuntime(546): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
01-15 15:10:58.912: E/AndroidRuntime(546): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
01-15 15:10:58.912: E/AndroidRuntime(546): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.os.Handler.dispatchMessage(Handler.java:99)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.os.Looper.loop(Looper.java:123)
01-15 15:10:58.912: E/AndroidRuntime(546): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-15 15:10:58.912: E/AndroidRuntime(546): at java.lang.reflect.Method.invokeNative(Native Method)
01-15 15:10:58.912: E/AndroidRuntime(546): at java.lang.reflect.Method.invoke(Method.java:521)
01-15 15:10:58.912: E/AndroidRuntime(546): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-15 15:10:58.912: E/AndroidRuntime(546): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-15 15:10:58.912: E/AndroidRuntime(546): at dalvik.system.NativeStart.main(Native Method)
01-15 15:10:58.943: I/dalvikvm(546): threadid=7: reacting to signal 3
01-15 15:10:58.975: I/dalvikvm(546): Wrote stack trace to '/data/anr/traces.txt'
01-15 15:11:00.933: I/Process(546): Sending signal. PID: 546 SIG: 9

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 15 янв 2012, 19:43 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Поменял немного цикл while
Код: [ Загрузить ] [ Скрыть ]
  1. while (cursor.isLast()) { 
  2.                 View contact = ltInflater.inflate(R.layout.contact, layoutContactList, false); 
  3.                 contact.setLayoutParams(new LayoutParams( 
  4.                 LayoutParams.FILL_PARENT, 
  5.                 LayoutParams.WRAP_CONTENT)); 
  6. //                TextView tvId = (TextView) contact.findViewById(R.id.tvId); 
  7. //                tvId.setText(cursor.getInt(idColIndex)); 
  8.                 TextView tvJob = (TextView) contact.findViewById(R.id.tvJob); 
  9.                 tvJob.setText(cursor.getString(jobColIndex)); 
  10.                 TextView tvName = (TextView) contact.findViewById(R.id.tvName); 
  11.                 tvName.setText(cursor.getString(nameColIndex)); 
  12.                 TextView tvPhone = (TextView) contact.findViewById(R.id.tvPhone); 
  13.                 tvPhone.setText(cursor.getString(phoneColIndex)); 
  14.                 TextView tvEmail = (TextView) contact.findViewById(R.id.tvEmail); 
  15.                 tvEmail.setText(cursor.getString(emailColIndex)); 
  16.                 contact.getLayoutParams().width = LayoutParams.FILL_PARENT; 
  17.                 contact.setBackgroundColor(colors[i % 2]); 
  18.                 layoutContactList.addView(contact); 
  19.                 cursor.moveToNext(); 
  20.                 i++; 
  21.             } 

Теперь ругается с той же ошибкой (java.lang.NullPointerException) на строку
Код: [ Загрузить ] [ Скрыть ]
  1. layoutContactList.addView(contact); 

Но с чего бы вдруг?

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 15 янв 2012, 23:21 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Т.е. R.id.layoutContactList - это объект на втором Activity и вы пытаетесь его наполнить с первого?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 15 янв 2012, 23:54 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Да, вот именно я пытаюсь второй Activity наполнить с первого и после его вызвать. Или это невозможно? Если нет, то как отобразить базу с данными во втором Activity, когда с базой мы работаем в первом?

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 16 янв 2012, 09:20 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Метод findViewById, который вы вызываете, ищет компоненты на текущей Activity. Он не найдет компоненты с другой и поэтому возвращает null.

Создайте отдельный класс по работе с БД, а не вложенный в EditContactDBActivity. Тогда вы сможете обращаться к нему из любой точки приложения и в другом Activity используете для наполнения экрана.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 16 янв 2012, 10:24 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Ясно, спасибо, сейчас попробую.
Одно не понятно. Файл с id элементами один на все Activity. Так почему он не может найти по id элемент? Даже из названия видно что через id, а не Activity.

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 16 янв 2012, 11:38 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
no-- писал(а):
Файл с id элементами один на все Activity. Так почему он не может найти по id элемент? Даже из названия видно что через id, а не Activity.


ID сквозные, но каждая Activity ищет только у себя элементы.
У вас в R.layout.main есть элемент c ID = R.id.layoutContactList?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 16 янв 2012, 19:58 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Нету. Блин, уже замучался. Сейчас что я делаю не так? Вынес в отдельный класс все что связано с базой данных. Получилось так: первый класс с главным Activity обрабатывает нажатие кнопок, создает объект с классом базы данных, после чего анализирует нажатую клавишу и вызывает соответствующий метод. Приведу немного кода.
Главный Activity
Код: [ Загрузить ] [ Скрыть ]
  1. public class EditContactDBActivity extends Activity implements OnClickListener  { 
  2.      
  3.     String id, job, name, phone, email; 
  4.     DataBase db; 
  5.     EditText etId, etJob, etName, etPhone, etEmail; 
  6.     Button btnAddContact, btnDelContact,  
  7.            btnClearContacts, btnOpenContacts, btnUpdContact; 
  8.     @Override 
  9.     public void onCreate(Bundle savedInstanceState) { 
  10.         super.onCreate(savedInstanceState); 
  11.         setContentView(R.layout.main); 
  12.          
  13.         btnAddContact = (Button) findViewById(R.id.btnAddContact); 
  14.         btnAddContact.setOnClickListener(this); 
  15.          
  16.         btnDelContact = (Button) findViewById(R.id.btnDelContact); 
  17.         btnDelContact.setOnClickListener(this); 
  18.          
  19.         btnUpdContact = (Button) findViewById(R.id.btnUpdContact); 
  20.         btnUpdContact.setOnClickListener(this); 
  21.          
  22.         btnClearContacts = (Button) findViewById(R.id.btnClearContacts); 
  23.         btnClearContacts.setOnClickListener(this); 
  24.          
  25.         btnOpenContacts = (Button) findViewById(R.id.btnOpenContacts); 
  26.         btnOpenContacts.setOnClickListener(this); 
  27.          
  28.         etId = (EditText) findViewById(R.id.etId); 
  29.         etJob = (EditText) findViewById(R.id.etJob); 
  30.         etName = (EditText) findViewById(R.id.etName); 
  31.         etPhone = (EditText) findViewById(R.id.etPhone); 
  32.         etEmail = (EditText) findViewById(R.id.etEmail); 
  33.          
  34.         db = new DataBase(); 
  35.     } 
  36.      
  37.     @Override 
  38.     public void onClick(View v) { 
  39.         switch (v.getId()) { 
  40.         case R.id.btnAddContact: 
  41.             db.addContact(); 
  42.             break; 
  43.         case R.id.btnUpdContact: 
  44.             if (id.equalsIgnoreCase("")) { 
  45.                 break; 
  46.             } 
  47.             db.UpdateContact(); 
  48.             break; 
  49.         case R.id.btnDelContact: 
  50.             if (id.equalsIgnoreCase("")) { 
  51.                 break; 
  52.             } 
  53.             db.deleteContact(); 
  54.             break; 
  55.          
  56.         case R.id.btnOpenContacts: 
  57.             db.openContacts(); 
  58.             break; 
  59.         case R.id.btnClearContacts: 
  60.             db.clearContacts(); 
  61.             break; 
  62.         } 
  63.     } 
  64.      

отдельный файл с 2-мя классами для работы с базой данных.
Код: [ Загрузить ] [ Скрыть ]
  1. public class DataBase extends Activity { 
  2.  
  3.      
  4.     private static final String TABLE_NAME = "phonebook"; 
  5.     private static final String KEY_ID = "_id"; 
  6.     private static final String KEY_JOB = "job"; 
  7.     private static final String KEY_NAME = "name"; 
  8.     private static final String KEY_PHONE = "phone"; 
  9.     private static final String KEY_EMAIL = "email"; 
  10.      
  11.     String id, job, name, phone, email; 
  12.     int[] colors; 
  13.     EditText etId, etJob, etName, etPhone, etEmail; 
  14.     DBHelper dbHelper; 
  15.     ContentValues cv; 
  16.     SQLiteDatabase db; 
  17.      
  18.     DataBase() {  
  19.         cv = new ContentValues(); 
  20.         dbHelper = new DBHelper(this);  
  21.         colors =  new int[2]; 
  22.         etId = (EditText) findViewById(R.id.etId); 
  23.         etJob = (EditText) findViewById(R.id.etJob); 
  24.         etName = (EditText) findViewById(R.id.etName); 
  25.         etPhone = (EditText) findViewById(R.id.etPhone); 
  26.         etEmail = (EditText) findViewById(R.id.etEmail); 
  27.     } 
  28.  
  29.     void addContact() { 
  30.          
  31.         db = dbHelper.getWritableDatabase(); 
  32.         putData(); 
  33.         db.insert(TABLE_NAME, null, cv); 
  34.         db.close(); 
  35.     } 
  36.      
  37.     void UpdateContact() { 
  38.         db = dbHelper.getWritableDatabase(); 
  39.         db.update(TABLE_NAME, putData(), "_id = ?",new String[] { id }); 
  40.         db.close(); 
  41.     } 
  42.      
  43.     void deleteContact() {  
  44.         db = dbHelper.getWritableDatabase(); 
  45.         db.delete(TABLE_NAME, "_id = " + id, null); 
  46.         db.close(); 
  47.     } 
  48.      
  49.     void openContacts() {  
  50.         db = dbHelper.getWritableDatabase(); 
  51.         Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); 
  52.         if (cursor.moveToFirst()) { 
  53.             int idColIndex = cursor.getColumnIndex(KEY_ID); 
  54.             int jobColIndex = cursor.getColumnIndex(KEY_JOB); 
  55.             int nameColIndex = cursor.getColumnIndex(KEY_NAME); 
  56.             int phoneColIndex = cursor.getColumnIndex(KEY_PHONE); 
  57.             int emailColIndex = cursor.getColumnIndex(KEY_EMAIL); 
  58.              
  59.             LayoutInflater ltInflater = getLayoutInflater(); 
  60.             LinearLayout layoutContactList = (LinearLayout) findViewById(R.id.layoutContactList); 
  61.             int i=0; 
  62.             while (cursor.moveToNext()) { 
  63.                 View contactView = ltInflater.inflate(R.layout.contact, null, false); 
  64.                 contactView.setLayoutParams(new LayoutParams( 
  65.                                         LayoutParams.FILL_PARENT, 
  66.                                         LayoutParams.WRAP_CONTENT)); 
  67.                 TextView tvId = (TextView) contactView.findViewById(R.id.tvId); 
  68.                 tvId.setText(cursor.getString(idColIndex)); 
  69.                 TextView tvJob = (TextView) contactView.findViewById(R.id.tvJob); 
  70.                 tvJob.setText(cursor.getString(jobColIndex)); 
  71.                 TextView tvName = (TextView) contactView.findViewById(R.id.tvName); 
  72.                 tvName.setText(cursor.getString(nameColIndex)); 
  73.                 TextView tvPhone = (TextView) contactView.findViewById(R.id.tvPhone); 
  74.                 tvPhone.setText(cursor.getString(phoneColIndex)); 
  75.                 TextView tvEmail = (TextView) contactView.findViewById(R.id.tvEmail); 
  76.                 tvEmail.setText(cursor.getString(emailColIndex)); 
  77.                 Log.d("myLogs", "1"); 
  78.                 //contact.getLayoutParams().width = LayoutParams.FILL_PARENT; 
  79.                 Log.d("myLogs", "2"); 
  80.                 contactView.setBackgroundColor(colors[i % 2]); 
  81.                 Log.d("myLogs", "3"); 
  82.                 layoutContactList.addView(contactView,new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
  83.                 Log.d("myLogs", "4"); 
  84.                 i++; 
  85.             } 
  86.             db.close(); 
  87.             Intent intent = new Intent(this, ContactListActivity.class); 
  88.             startActivity(intent);         
  89.             } 
  90.     } 
  91.      
  92.     void clearContacts() { 
  93.         db = dbHelper.getWritableDatabase(); 
  94.         db.delete(TABLE_NAME, null, null); 
  95.         db.close(); 
  96.     } 
  97.      
  98.     private ContentValues putData() { 
  99.           id = etId.getText().toString(); 
  100.           job = etJob.getText().toString(); 
  101.           name = etName.getText().toString(); 
  102.           phone = etPhone.getText().toString(); 
  103.           email = etEmail.getText().toString(); 
  104.            
  105.           cv.put(KEY_JOB, name); 
  106.           cv.put(KEY_NAME, name); 
  107.           cv.put(KEY_PHONE, name); 
  108.           cv.put(KEY_EMAIL, email); 
  109.           return cv; 
  110.     } 
  111.      
  112.  
  113.  
  114. class DBHelper extends SQLiteOpenHelper { 
  115.  
  116.     private static final int DB_VERSION = 1;     
  117.     private static final String DB_NAME = "firstDB"; 
  118.      
  119.     public DBHelper(Context context) { 
  120.       super(context, DB_NAME, null, DB_VERSION); 
  121.     } 
  122.  
  123.     @Override 
  124.     public void onCreate(SQLiteDatabase db) { 
  125.         db.execSQL("create table phonebook (" 
  126.             + "_id integer primary key autoincrement," 
  127.             + "job text," 
  128.             + "name text," 
  129.             + "phone text," 
  130.             + "email text" + ");"); 
  131.     } 
  132.  
  133.     @Override 
  134.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
  135.  
  136.     } 
  137.   } 

В конструкторе класса базы данных я ловлю ошибки на связывании элементов TextView по id. Это раз. Ладно думаю, закомментирую пока на время. После приложение запускается, но при нажатии к примеру на clearContacts, где кода и так мало
Код: [ Загрузить ] [ Скрыть ]
  1.     void clearContacts() { 
  2.         db = dbHelper.getWritableDatabase(); 
  3.         db.delete(TABLE_NAME, null, null); 
  4.         db.close(); 
  5.     } 

снова вылазит ошибка. Чую что просто неправильно создаю, но не пойму где. создаю объект нужного класса. Инициализирую все что нужно в конструкторе, но этого мало. Или здесь нужно через метод oncreate делать? Но он вроде для отображения нужен, а мне нечего отображать..
Сам LogCat ничего не пишет, там вообще пустота. Вот что пишет консоль
Код: [ Загрузить ] [ Скрыть ]
  1. [2012-01-16 19:54:42 - ContactDB.apk] Uploading ContactDB.apk onto device 'emulator-5554' 
  2. [2012-01-16 19:54:42 - Device] Uploading file onto device 'emulator-5554' 
  3. [2012-01-16 19:54:44 - ddms] Created: [Debugger 8615-->580 inactive] 
  4. [2012-01-16 19:54:44 - ddm-heap] Sending REAQ 
  5. [2012-01-16 19:54:44 - ddms] Adding new client [Client pid: 580] 
  6. [2012-01-16 19:54:44 - ddms] Good handshake from client, sending HELO to 580 
  7. [2012-01-16 19:54:44 - ddm-hello] Sending HELO ID=0x4000010f 
  8. [2012-01-16 19:54:44 - ddm-heap] Sending FEAT 
  9. [2012-01-16 19:54:44 - ddm-prof] Sending MPRQ 
  10. [2012-01-16 19:54:44 - ddms] broadcast 2: [Client pid: 580] 
  11. [2012-01-16 19:54:44 - ddm-hello] Now ready: [Client pid: 580] 
  12. [2012-01-16 19:54:44 - ddm-thread] Now ready: [Client pid: 580] 
  13. [2012-01-16 19:54:44 - ddm-thread] Sending THEN: true 
  14. [2012-01-16 19:54:44 - ddms] Calling handler for TEST [com.android.ddmlib.HandleTest@718723] (len=8) 
  15. [2012-01-16 19:54:44 - ddm-test] handling TEST 
  16. [2012-01-16 19:54:44 - ddm-test] Received: 
  17. [2012-01-16 19:54:44 - ddm-test] 0000- 01 02 03 04 fc fd fe ff                          ........          
  18. [2012-01-16 19:54:44 - ddms] Calling handler for TEST [com.android.ddmlib.HandleTest@718723] (len=8) 
  19. [2012-01-16 19:54:44 - ddm-test] handling TEST 
  20. [2012-01-16 19:54:44 - ddm-test] Received: 
  21. [2012-01-16 19:54:44 - ddm-test] 0000- 01 02 03 04 fc fd fe ff                          ........          
  22. [2012-01-16 19:54:44 - ddms] Calling handler for REAQ [com.android.ddmlib.HandleHeap@1eebbe4] (len=1) 
  23. [2012-01-16 19:54:44 - ddm-heap] handling REAQ 
  24. [2012-01-16 19:54:44 - ddm-heap] REAQ says: enabled=false 
  25. [2012-01-16 19:54:44 - ddms] Calling handler for HELO [com.android.ddmlib.HandleHello@4367a2] (len=42) 
  26. [2012-01-16 19:54:44 - ddm-hello] handling HELO 
  27. [2012-01-16 19:54:44 - ddm-hello] HELO: v=1, pid=580, vm='Dalvik v1.1.0', app='' 
  28. [2012-01-16 19:54:44 - ddms] Calling handler for FEAT [com.android.ddmlib.HandleHello@4367a2] (len=86) 
  29. [2012-01-16 19:54:44 - ddm-hello] handling FEAT 
  30. [2012-01-16 19:54:44 - ddm-hello] Feature: method-trace-profiling 
  31. [2012-01-16 19:54:44 - ddm-hello] Feature: hprof-heap-dump 
  32. [2012-01-16 19:54:44 - ddms] Calling handler for MPRQ [com.android.ddmlib.HandleProfiling@1bdaf5a] (len=1) 
  33. [2012-01-16 19:54:44 - ddm-prof] handling MPRQ 
  34. [2012-01-16 19:54:44 - ddm-prof] Method profiling is not running 
  35. [2012-01-16 19:54:44 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=16) 
  36. [2012-01-16 19:54:44 - ddm-thread] handling THCR 
  37. [2012-01-16 19:54:44 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=16) 
  38. [2012-01-16 19:54:44 - ddm-thread] handling THCR 
  39. [2012-01-16 19:54:44 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=36) 
  40. [2012-01-16 19:54:44 - ddm-thread] handling THCR 
  41. [2012-01-16 19:54:44 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=28) 
  42. [2012-01-16 19:54:44 - ddm-thread] handling THCR 
  43. [2012-01-16 19:54:44 - ddms] Got empty reply for 0x40000112 from [Client pid: 580] 
  44. [2012-01-16 19:54:44 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=40) 
  45. [2012-01-16 19:54:44 - ddm-thread] handling THCR 
  46. [2012-01-16 19:54:44 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=40) 
  47. [2012-01-16 19:54:44 - ddm-thread] handling THCR 
  48. [2012-01-16 19:54:46 - ddms] Calling handler for THDE [com.android.ddmlib.HandleThread@13a3252] (len=4) 
  49. [2012-01-16 19:54:46 - ddm-thread] handling THDE 
  50. [2012-01-16 19:54:46 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=24) 
  51. [2012-01-16 19:54:46 - ddm-thread] handling THCR 
  52. [2012-01-16 19:54:46 - ddms] Calling handler for THDE [com.android.ddmlib.HandleThread@13a3252] (len=4) 
  53. [2012-01-16 19:54:46 - ddm-thread] handling THDE 
  54. [2012-01-16 19:54:46 - ddms] Closing [Client pid: 580] 
  55. [2012-01-16 19:54:46 - ddms] broadcast 3: [Client pid: 580] 
  56. [2012-01-16 19:54:46 - ddm-hello] Now disconnected: [Client pid: 580] 
  57. [2012-01-16 19:54:49 - ddms] Created: [Debugger 8615-->591 inactive] 
  58. [2012-01-16 19:54:49 - ddm-heap] Sending REAQ 
  59. [2012-01-16 19:54:49 - ddms] Adding new client [Client pid: 591] 
  60. [2012-01-16 19:54:49 - ddms] Good handshake from client, sending HELO to 591 
  61. [2012-01-16 19:54:49 - ddm-hello] Sending HELO ID=0x40000114 
  62. [2012-01-16 19:54:49 - ddm-heap] Sending FEAT 
  63. [2012-01-16 19:54:49 - ddm-prof] Sending MPRQ 
  64. [2012-01-16 19:54:50 - ddms] broadcast 2: [Client pid: 591] 
  65. [2012-01-16 19:54:50 - ddm-hello] Now ready: [Client pid: 591] 
  66. [2012-01-16 19:54:50 - ddm-thread] Now ready: [Client pid: 591] 
  67. [2012-01-16 19:54:50 - ddm-thread] Sending THEN: true 
  68. [2012-01-16 19:54:50 - ddms] Calling handler for REAQ [com.android.ddmlib.HandleHeap@1eebbe4] (len=1) 
  69. [2012-01-16 19:54:50 - ddm-heap] handling REAQ 
  70. [2012-01-16 19:54:50 - ddm-heap] REAQ says: enabled=false 
  71. [2012-01-16 19:54:50 - ddms] Calling handler for HELO [com.android.ddmlib.HandleHello@4367a2] (len=42) 
  72. [2012-01-16 19:54:50 - ddm-hello] handling HELO 
  73. [2012-01-16 19:54:50 - ddm-hello] HELO: v=1, pid=591, vm='Dalvik v1.1.0', app='' 
  74. [2012-01-16 19:54:50 - ddms] Calling handler for FEAT [com.android.ddmlib.HandleHello@4367a2] (len=86) 
  75. [2012-01-16 19:54:50 - ddm-hello] handling FEAT 
  76. [2012-01-16 19:54:50 - ddm-hello] Feature: method-trace-profiling 
  77. [2012-01-16 19:54:50 - ddm-hello] Feature: hprof-heap-dump 
  78. [2012-01-16 19:54:50 - ddms] Calling handler for MPRQ [com.android.ddmlib.HandleProfiling@1bdaf5a] (len=1) 
  79. [2012-01-16 19:54:50 - ddm-prof] handling MPRQ 
  80. [2012-01-16 19:54:50 - ddm-prof] Method profiling is not running 
  81. [2012-01-16 19:54:50 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=16) 
  82. [2012-01-16 19:54:50 - ddm-thread] handling THCR 
  83. [2012-01-16 19:54:50 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=16) 
  84. [2012-01-16 19:54:50 - ddm-thread] handling THCR 
  85. [2012-01-16 19:54:50 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=36) 
  86. [2012-01-16 19:54:50 - ddm-thread] handling THCR 
  87. [2012-01-16 19:54:50 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=28) 
  88. [2012-01-16 19:54:50 - ddm-thread] handling THCR 
  89. [2012-01-16 19:54:50 - ddms] Got empty reply for 0x40000117 from [Client pid: 591] 
  90. [2012-01-16 19:54:50 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=40) 
  91. [2012-01-16 19:54:50 - ddm-thread] handling THCR 
  92. [2012-01-16 19:54:50 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=40) 
  93. [2012-01-16 19:54:50 - ddm-thread] handling THCR 
  94. [2012-01-16 19:54:50 - ddms] Calling handler for THDE [com.android.ddmlib.HandleThread@13a3252] (len=4) 
  95. [2012-01-16 19:54:50 - ddm-thread] handling THDE 
  96. [2012-01-16 19:54:50 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=24) 
  97. [2012-01-16 19:54:50 - ddm-thread] handling THCR 
  98. [2012-01-16 19:54:51 - ddms] Calling handler for THDE [com.android.ddmlib.HandleThread@13a3252] (len=4) 
  99. [2012-01-16 19:54:51 - ddm-thread] handling THDE 
  100. [2012-01-16 19:54:51 - ddms] Calling handler for THDE [com.android.ddmlib.HandleThread@13a3252] (len=4) 
  101. [2012-01-16 19:54:51 - ddm-thread] handling THDE 
  102. [2012-01-16 19:54:51 - ddms] Calling handler for THDE [com.android.ddmlib.HandleThread@13a3252] (len=4) 
  103. [2012-01-16 19:54:51 - ddm-thread] handling THDE 
  104. [2012-01-16 19:54:51 - ddms] Saving packet 0x1000000b 
  105. [2012-01-16 19:54:51 - ddms] Closing [Client pid: 591] 
  106. [2012-01-16 19:54:51 - ddms] broadcast 3: [Client pid: 591] 
  107. [2012-01-16 19:54:51 - ddm-hello] Now disconnected: [Client pid: 591] 
  108. [2012-01-16 19:54:51 - ddms] Created: [Debugger 8615-->597 inactive] 
  109. [2012-01-16 19:54:51 - ddm-heap] Sending REAQ 
  110. [2012-01-16 19:54:51 - ddms] Adding new client [Client pid: 597] 
  111. [2012-01-16 19:54:51 - ddms] Good handshake from client, sending HELO to 597 
  112. [2012-01-16 19:54:51 - ddm-hello] Sending HELO ID=0x40000119 
  113. [2012-01-16 19:54:51 - ddm-heap] Sending FEAT 
  114. [2012-01-16 19:54:51 - ddm-prof] Sending MPRQ 
  115. [2012-01-16 19:54:51 - ddms] broadcast 2: [Client pid: 597] 
  116. [2012-01-16 19:54:51 - ddm-hello] Now ready: [Client pid: 597] 
  117. [2012-01-16 19:54:51 - ddm-thread] Now ready: [Client pid: 597] 
  118. [2012-01-16 19:54:51 - ddm-thread] Sending THEN: true 
  119. [2012-01-16 19:54:51 - ddms] Calling handler for TEST [com.android.ddmlib.HandleTest@718723] (len=8) 
  120. [2012-01-16 19:54:51 - ddm-test] handling TEST 
  121. [2012-01-16 19:54:51 - ddm-test] Received: 
  122. [2012-01-16 19:54:51 - ddm-test] 0000- 01 02 03 04 fc fd fe ff                          ........          
  123. [2012-01-16 19:54:51 - ddms] Calling handler for TEST [com.android.ddmlib.HandleTest@718723] (len=8) 
  124. [2012-01-16 19:54:51 - ddm-test] handling TEST 
  125. [2012-01-16 19:54:51 - ddm-test] Received: 
  126. [2012-01-16 19:54:51 - ddm-test] 0000- 01 02 03 04 fc fd fe ff                          ........          
  127. [2012-01-16 19:54:51 - ddms] Calling handler for REAQ [com.android.ddmlib.HandleHeap@1eebbe4] (len=1) 
  128. [2012-01-16 19:54:51 - ddm-heap] handling REAQ 
  129. [2012-01-16 19:54:51 - ddm-heap] REAQ says: enabled=false 
  130. [2012-01-16 19:54:51 - ddms] Calling handler for HELO [com.android.ddmlib.HandleHello@4367a2] (len=42) 
  131. [2012-01-16 19:54:51 - ddm-hello] handling HELO 
  132. [2012-01-16 19:54:51 - ddm-hello] HELO: v=1, pid=597, vm='Dalvik v1.1.0', app='' 
  133. [2012-01-16 19:54:51 - ddms] Calling handler for FEAT [com.android.ddmlib.HandleHello@4367a2] (len=86) 
  134. [2012-01-16 19:54:51 - ddm-hello] handling FEAT 
  135. [2012-01-16 19:54:51 - ddm-hello] Feature: method-trace-profiling 
  136. [2012-01-16 19:54:51 - ddm-hello] Feature: hprof-heap-dump 
  137. [2012-01-16 19:54:51 - ddms] Calling handler for MPRQ [com.android.ddmlib.HandleProfiling@1bdaf5a] (len=1) 
  138. [2012-01-16 19:54:51 - ddm-prof] handling MPRQ 
  139. [2012-01-16 19:54:51 - ddm-prof] Method profiling is not running 
  140. [2012-01-16 19:54:51 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=16) 
  141. [2012-01-16 19:54:51 - ddm-thread] handling THCR 
  142. [2012-01-16 19:54:51 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=16) 
  143. [2012-01-16 19:54:51 - ddm-thread] handling THCR 
  144. [2012-01-16 19:54:51 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=36) 
  145. [2012-01-16 19:54:51 - ddm-thread] handling THCR 
  146. [2012-01-16 19:54:51 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=28) 
  147. [2012-01-16 19:54:51 - ddm-thread] handling THCR 
  148. [2012-01-16 19:54:51 - ddms] Got empty reply for 0x4000011c from [Client pid: 597] 
  149. [2012-01-16 19:54:51 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=40) 
  150. [2012-01-16 19:54:51 - ddm-thread] handling THCR 
  151. [2012-01-16 19:54:51 - ddms] Calling handler for THCR [com.android.ddmlib.HandleThread@13a3252] (len=40) 
  152. [2012-01-16 19:54:51 - ddm-thread] handling THCR 
  153. [2012-01-16 19:54:51 - ddms] Calling handler for APNM [com.android.ddmlib.HandleAppName@148fc6a] (len=38) 
  154. [2012-01-16 19:54:51 - ddm-appname] handling APNM 
  155. [2012-01-16 19:54:51 - ddm-appname] APNM: app='<pre-initialized>' 
  156. [2012-01-16 19:54:51 - ddms] Calling handler for APNM [com.android.ddmlib.HandleAppName@148fc6a] (len=26) 
  157. [2012-01-16 19:54:51 - ddm-appname] handling APNM 
  158. [2012-01-16 19:54:51 - ddm-appname] APNM: app='my.contacts' 
  159. [2012-01-16 19:54:56 - ddms] Closing [Client pid: 597] 
  160. [2012-01-16 19:54:56 - ddms] broadcast 3: [Client pid: 597] 
  161. [2012-01-16 19:54:56 - ddm-hello] Now disconnected: [Client pid: 597] 

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 17 янв 2012, 16:23 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Вроде все верно. Только вот DataBase extends Activity - почему не разделите на два разных класса?

А в какой именно строке ошибка и какая ошибка?

Тут немного советов про log. viewtopic.php?f=3&t=110

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 17 янв 2012, 17:33 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Сразу оговорюсь. в манифесте ни слова про DataBase.java , который содержит 2 класса для работы с базой данных. Наверное в этом ошибка. Но я исходил из логики, что у нас этот класс не отображается и по сути нам надо просто создать его объект и использовать. Но он расширяет Activity.. Значит надо в манифесте его прописывать? Но он не нуждается в файле xml..
Цитата:
Вроде все верно. Только вот DataBase extends Activity - почему не разделите на два разных класса?

Потому что не могу потом искать такие вещик, как findViewById, а также не может найти конструкторы (The constructor Intent(DataBase, Class<ContactListActivity>) is undefined) для dbHelper = new DBHelper(this); , LayoutInflater ltInflater = getLayoutInflater(); , Intent intent = new Intent(this, ContactListActivity.class); .

логи появились, нужно было перезапустить приложение. У меня 3 файла .java и 4 класса в общем.
Главный Activity доходит до момента, когда надо создать объект с DataBase классом.
Код: [ Загрузить ] [ Скрыть ]
  1. db = new DataBase(); 

Далее в конструкторе DataBase приложение падает на
Код: [ Загрузить ] [ Скрыть ]
  1.     DataBase() {  
  2.         ... 
  3.         etId = (EditText) findViewById(R.id.etId); 
  4.         etJob = (EditText) findViewById(R.id.etJob); 
  5.         etName = (EditText) findViewById(R.id.etName); 
  6.         etPhone = (EditText) findViewById(R.id.etPhone); 
  7.         etEmail = (EditText) findViewById(R.id.etEmail); 
  8.     } 

этих строках. Вот лог
Цитата:
01-17 13:41:45.302: E/AndroidRuntime(310): Uncaught handler: thread main exiting due to uncaught exception
01-17 13:41:45.322: E/AndroidRuntime(310): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.contacts/my.contacts.EditContactDBActivity}: java.lang.NullPointerException
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.os.Handler.dispatchMessage(Handler.java:99)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.os.Looper.loop(Looper.java:123)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-17 13:41:45.322: E/AndroidRuntime(310): at java.lang.reflect.Method.invokeNative(Native Method)
01-17 13:41:45.322: E/AndroidRuntime(310): at java.lang.reflect.Method.invoke(Method.java:521)
01-17 13:41:45.322: E/AndroidRuntime(310): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-17 13:41:45.322: E/AndroidRuntime(310): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-17 13:41:45.322: E/AndroidRuntime(310): at dalvik.system.NativeStart.main(Native Method)
01-17 13:41:45.322: E/AndroidRuntime(310): Caused by: java.lang.NullPointerException
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.Activity.findViewById(Activity.java:1612)
01-17 13:41:45.322: E/AndroidRuntime(310): at my.contacts.DataBase.<init>(DataBase.java:40)
01-17 13:41:45.322: E/AndroidRuntime(310): at my.contacts.EditContactDBActivity.onCreate(EditContactDBActivity.java:55)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-17 13:41:45.322: E/AndroidRuntime(310): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
01-17 13:41:45.322: E/AndroidRuntime(310): ... 11 more

Доступ я никакой не прописывал приложению. Вы в своем уроке тоже не прописывали доступ. может он еще как-то роль играет...

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 17 янв 2012, 18:18 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
Ошибка идет на findViewById скорее всего потому, что Activity не создалось само нормальным способом через Intent. Создание нового класса недостаточно.

Класс по работе с БД и не должен уметь вызывать Intent-ы и выполнять findViewById. Это дело Activity. И логически их лучше разделить.

DBClass - умеет работать с БД, он должен содержать методы, которые возвращают Cursor с записями.
А Activity эти методы вызывает, получает курсор и из него использует данные.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 17 янв 2012, 19:14 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Я уже что-то совсем запутался. Изначально проблема была в том, что нельзя создать элементы на другом Activity, обращаясь к другим элементам чужого Activity. Как мне вот с этим поступить? Допустим я разделю базу от другого Activity.
Тоесть получится: первая Activity создает объект базы данных, через методы базы данных мы с ней работаем. А теперь допустим нам надо вывести информацию во второй Activity, еще не созданный до этого. Но мы этого не можем сделать.
damager82 писал(а):
Метод findViewById, который вы вызываете, ищет компоненты на текущей Activity. Он не найдет компоненты с другой и поэтому возвращает null.

Или нам надо создавать второй Activity и передавать как-то в него Cursor? Подскажите, пожалуйста саму схему работы.

Цитата:
Ошибка идет на findViewById скорее всего потому, что Activity не создалось само нормальным способом через Intent. Создание нового класса недостаточно.

Тоесть объект класса мы не можем создать через new нормально? Только через Intent?

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку в коде.
СообщениеДобавлено: 18 янв 2012, 09:46 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1400
Благодарил (а): 0 раз.
Поблагодарили: 75 раз.
no-- писал(а):
Тоесть объект класса мы не можем создать через new нормально? Только через Intent?

Создать то можем, только вот это не будет полноценным Acvtivity, с которым получится работать.

Есть отличный пример, демонстрирующий схему работы с БД и двумя Activity:
http://developer.android.com/resources/ ... index.html

Там можно скачать исходники и посмотреть, как лучше делать.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB