Android: исключение нулевого указателя при просмотре текста

#java #android

#java #Android

Вопрос:

Вот код, для которого я сталкиваюсь с исключением

 public class SHOSuper extends Activity{

String officerName;
String arr[];
String[] offN;
public void onCreate(Bundle savedInstanceState) {
    try{
        super.onCreate(savedInstanceState);
        final TextView tv;
        tv=(TextView)findViewById(R.id.txt1);
        System.out.println("I AM NEW ACTIVITY");
        arr=Receiver.split(Receiver.orignal, ","); 
        String value1= arr[1];
        System.out.println("Array index "   value1);
        String value2=arr[2];
        System.out.println("Array 2nd index "   value2);
        tv.setText(value1   " At "   value2);
        officerName= arr[5];
        offN =new String[officerName.length()];
        offN=Receiver.split(officerName, "_");
    }
    catch(Exception e){
        e.printStackTrace();
    }

setContentView(R.layout.main);
  }
}
  

В строке tv.setText(value1 " At " value2); я сталкиваюсь с исключением нулевого указателя, подобным этому

 **04-12 13:25:18.105: WARN/System.err(527): java.lang.NullPointerException
04-12 13:25:18.265: WARN/System.err(527):     at com.sho.SHOSuper.onCreate(SHOSuper.java:24)**
  

Можете ли вы мне помочь?

Комментарии:

1. на этот вопрос было получено множество ответов всего через 5 минут после публикации запроса…….

Ответ №1:

findViewById() находит представление в вашем текущем contentView , а не случайный идентификатор в xml.

Итак, когда вы делаете это:

 tv=(TextView)findViewById(R.id.txt1);
  

Он не может найти идентификатор, даже если он доступен в вашем layout.main : макет еще не установлен. Вызовите setContentView(R.layout.main); , прежде чем пытаться найти какие-либо представления.

(вы также можете использовать inflater для получения «случайного» представления, а затем добавить его в другое представление, но это не похоже на то, что вы ищете)

Ответ №2:

Переместите setContentView(R.layout.main); , прежде чем выполнять tv=(TextView)findViewById(R.id.txt1);

Ответ №3:

Вызовите эту функцию

 setContentView(R.layout.main)
  

перед вызовом

 tv=(TextView)findViewById(R.id.txt1);
  

потому что findViewById() выполняет поиск в иерархии представлений, установленной setContentView()

Ответ №4:

Казалось бы, что

 tv=(TextView)findViewById(R.id.txt1);
  

возвращает значение null