Страница 1 из 1

ListView nullpointer

Добавлено: 17 янв 2013, 19:56
Makute
nullpointer exception при инициализации списка

Код: Выделить всё

		   ListView list = (ListView)findViewById(R.id.FirstList);
	        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
	                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
	                "Linux", "OS/2" };
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
	                R.layout.sample_item, R.id.textView1, values);//Взято из примера, с любым кодом ошибка
	        list.setAdapter(adapter);
Адаптер

Код: Выделить всё

	public class first_list_adapter extends BaseAdapter {
			private LayoutInflater mLayoutInflater;

			public first_list_adapter(Context ctx) {
				mLayoutInflater = LayoutInflater.from(ctx);
			}

			public int getCount() {
				return elements.size();
			}

			public Object getItem(int position) {
				return position;
			}

			public long getItemId(int position) {
				return position;
			}


			public View getView(int position, View convertView, ViewGroup parent) {

				if(convertView == null)convertView = mLayoutInflater.inflate(R.layout.sample_item, null);
				TextView sign = (TextView) convertView.findViewById(R.id.textView1);
				return convertView;
			}
		} 
sample_item

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="PACPAC"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>
экран с listview

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/FirstList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>
Перепробовал все, разные адаптеры, разные листы, в общем все, ошибка все равно имеет место.
Подскажите как решить или где накосячил, заранее премного благодарен

Re: ListView nullpointer

Добавлено: 17 янв 2013, 21:48
rezak90
на какой строке хоть нулл вылазит?
Из предоставленного лишь видно:
- идёт инициализация листа ListView list = (ListView)findViewById(R.id.SecondList); , а в хмл файле совсем другой айди android:id="@+id/FirstList"
- в адаптере есть return elements.size(); , где переменная elements нигде не объявлена (по крайней мере в адаптере)

Re: ListView nullpointer

Добавлено: 18 янв 2013, 15:31
Makute
rezak90 писал(а):на какой строке хоть нулл вылазит?
Из предоставленного лишь видно:
- идёт инициализация листа ListView list = (ListView)findViewById(R.id.SecondList); , а в хмл файле совсем другой айди android:id="@+id/FirstList"
- в адаптере есть return elements.size(); , где переменная elements нигде не объявлена (по крайней мере в адаптере)
Elements - int массив

Код: Выделить всё

ArrayList<Integer> elements = new ArrayList<Integer>();
По поводу инициализации листов - перепутал, не то скопировал. 2 абслютно одинаковых листа, лишь названия разные. Исправил.

Re: ListView nullpointer

Добавлено: 18 янв 2013, 18:26
Mikhail_dev
Так всё же главный вопрос. Где стектрейс ошибки? Где вылазит исключение? Просьба выложить не указание на строку, а именно стектрейс.

Re: ListView nullpointer

Добавлено: 18 янв 2013, 18:55
Makute
01-18 21:49:28.289: E/AndroidRuntime(13050): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chameleon.assistant/com.chameleon.assistant.MainActivity}: java.lang.NullPointerException
01-18 21:49:28.289: E/AndroidRuntime(13050): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-18 21:49:28.289: E/AndroidRuntime(13050): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-18 21:49:28.289: E/AndroidRuntime(13050): at com.chameleon.assistant.MainActivity.init(MainActivity.java:57)[ list.setAdapter(adapter);]

Код: Выделить всё

package com.chameleon.assistant;

import java.util.ArrayList;

import android.R.integer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;
public class MainActivity extends FragmentActivity {
ArrayList<Integer> elements = new ArrayList<Integer>();
first_list_adapter first_adapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	    requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.main_screen);
		init();//Запуск разметки экрана
	}
	
public void init()
	{
		   //---------------------------------------------------------------------------------------------------
		   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
		   WindowManager.LayoutParams.FLAG_FULLSCREEN); //Полноэкранный режим
		   
		   ListView list = (ListView)findViewById(R.id.SecondList);
		   elements.add(1);
	        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
	                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
	                "Linux", "OS/2" };
	    	 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
	                R.layout.sample_item, R.id.textView1, values);
	        list.setAdapter(adapter);

	}
	  
	  
	  //adapter
		public class first_list_adapter extends BaseAdapter {
			private LayoutInflater mLayoutInflater;

			public first_list_adapter(Context ctx) {
				mLayoutInflater = LayoutInflater.from(ctx);
			}

			public int getCount() {
				return 1;
			}

			public Object getItem(int position) {
				return position;
			}

			public long getItemId(int position) {
				return position;
			}


			public View getView(int position, View convertView, ViewGroup parent) {

				if(convertView == null)convertView = mLayoutInflater.inflate(R.layout.sample_item, null);
				TextView sign = (TextView) convertView.findViewById(R.id.textView1);
				sign.setText("123");
				return convertView;
			}
		}
	}

Активити

Re: ListView nullpointer

Добавлено: 18 янв 2013, 20:53
Mikhail_dev
Не очень понял в чем проблема, но думаю что она довольно очевидная. Думаю что-то не атк с адаптером. Измени адаптер на уже существиющий в андроиде. Если прокатит, то надо смотреть что не так с адаптером.

Код: Выделить всё

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
И еще пару вещей:
1. А для чего указывать целый класс адаптера (public class first_list_adapter extends BaseAdapter), если он нигде не создается? Переменная зарезервирована, но используется обычный ArrayAdapter
2. Советую придерживаться правил именования, а именно - класс всегда с большой буквы. (public class FirstListAdapter extends BaseAdapter)
Если это какой-то пример, то это плохой пример.

Re: ListView nullpointer

Добавлено: 19 янв 2013, 08:27
Makute
no-- писал(а):Не очень понял в чем проблема, но думаю что она довольно очевидная. Думаю что-то не атк с адаптером. Измени адаптер на уже существиющий в андроиде. Если прокатит, то надо смотреть что не так с адаптером.

Код: Выделить всё

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
И еще пару вещей:
1. А для чего указывать целый класс адаптера (public class first_list_adapter extends BaseAdapter), если он нигде не создается? Переменная зарезервирована, но используется обычный ArrayAdapter
2. Советую придерживаться правил именования, а именно - класс всегда с большой буквы. (public class FirstListAdapter extends BaseAdapter)
Если это какой-то пример, то это плохой пример.
Это пример, взятый из интернета. first_list_adapter используется, но с ним nullpointer. Взял пример, дабы проверить - но с примером тоже nullpointer.
За паттерн именования классов - спасибо, буду придерживаться.

Re: ListView nullpointer

Добавлено: 19 янв 2013, 11:06
Mikhail_dev
Если и мой пример не прокатил, то тут проблема остается только в инициализации списка ListView. Что приводит к этому - не понятно на первый взгляд. Тут лучше всего получить весь код программы.

Re: ListView nullpointer

Добавлено: 19 янв 2013, 13:00
rezak90
да мне кажется он использует айдишник с другого лейаута, вот и нулл вылазит

Re: ListView nullpointer

Добавлено: 19 янв 2013, 13:07
Mikhail_dev
А, да, точно! Думаю что наверняка из-за этого.
Проверь с какой активности ID.

Re: ListView nullpointer

Добавлено: 19 янв 2013, 15:23
Makute
no-- писал(а):А, да, точно! Думаю что наверняка из-за этого.
Проверь с какой активности ID.
У меня есть ViewPager, в нем 3 страницы, на каждой странице - листвью. Все они инициализируются раньше, чем листы и адаптеры к ним. Если проблема в этом - как исправить?

Re: ListView nullpointer

Добавлено: 20 янв 2013, 19:33
Makute
Итак, проблема в ViewPager. Если работать с листом непосредственно на главной активити, без ViewPager, все отлично. Если же использовать его - нуллпоинтер. Что делать?

Re: ListView nullpointer

Добавлено: 20 янв 2013, 22:00
neoksi
Makute
Прочитайте внимательно статью: http://startandroid.ru/ru/uroki/vse-uro ... cycle.html

Я думаю, после неё вы поймете, как правильно готовить фрагменты. Активити и АктивитиФрагмент это не одно и тоже, хотя и похоже.

Re: ListView nullpointer

Добавлено: 21 янв 2013, 19:19
Makute
neoksi писал(а):Makute
Прочитайте внимательно статью: http://startandroid.ru/ru/uroki/vse-uro ... cycle.html

Я думаю, после неё вы поймете, как правильно готовить фрагменты. Активити и АктивитиФрагмент это не одно и тоже, хотя и похоже.
Хорошо, спасибо, прочел, понял. Проблема не решилась.
Фрагмент:

Код: Выделить всё

public class FirstFragment extends Fragment {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.first_screen, container, false);
		ListView  list = (ListView) view.findViewById(R.id.FirstList);
		return view;
	}
}
ViewPagerAdapter:

Код: Выделить всё

public class ViewPagerAdapter extends FragmentPagerAdapter {

	      public ViewPagerAdapter(FragmentManager fm) {
	          super(fm);
	      }

	      @Override
	      public Fragment getItem(int position) {
	    	  switch (position) {
	            case 0:
	                return new FirstFragment();
	 
	            default:
	                return null;
	            }
	      }

	      @Override
	      public int getCount() {
	          return 1;
	      }

	      @Override
	      public CharSequence getPageTitle(int position) {
	          switch (position) {
	              case 0: return "1";
	          }
	          return null;
	      }
	  }

Все так же не могу из главного класса взимодействовать с элементами фрагментов. Как их инициализировать, или что ещё нужно с ними делать? В фрагменте опущены лишь необязательные методы, вроде onresume

Re: ListView nullpointer

Добавлено: 21 янв 2013, 20:40
rezak90
Все так же не могу из главного класса взаимодействовать с элементами фрагментов.
это вы имеете в виду с активити взаимодействовать с фрагментами?

Re: ListView nullpointer

Добавлено: 21 янв 2013, 21:18
neoksi
Makute,
Где ошибка то происходит теперь?
Нульпоинт при инициализации ListView явно должен был уйти.

Лог ошибки в студию, мы тут не телепаты.

Re: ListView nullpointer

Добавлено: 22 янв 2013, 12:58
Makute
rezak90 писал(а):
Все так же не могу из главного класса взаимодействовать с элементами фрагментов.
это вы имеете в виду с активити взаимодействовать с фрагментами?
из fragment activity взаимодействовать с содержимым фрагментов

Re: ListView nullpointer

Добавлено: 22 янв 2013, 18:49
rezak90
из fragment activity взаимодействовать с содержимым фрагментов
если с кода создаёте фрагмент то у вас есть объект этого фрагмента и вытаскивайте и делайте что хотите, если в xml задаёте то тоже самое только получаем объект из хмл