TextView

Интерфейс, диалоги, темы, стили, меню
LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

TextView

Сообщение LLIPAM » 26 фев 2015, 08:08

Здравствуйте! Есть необходимость проверить наличие текста в TextView.
Я сделал следующее:

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

if(textView.toString().equals("")) {
           setContentView(R.layout.main);
        }
        else {
            setContentView(R.layout.menu);
        }
Но выдаёт ошибка.
Что я делаю не так?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TextView

Сообщение klblk » 26 фев 2015, 08:48

0) "ошибка" понятие многозначительное. Нужна конкретика, логи.
1) "не так" получаете текст из TextView.

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 26 фев 2015, 09:15

0)

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

02-26 00:00:55.868    1231-1231/ru.android.llipam.lli_menu E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: ru.android.llipam.lli_menu, PID: 1231
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.android.llipam.lli_menu/ru.android.llipam.lli_menu.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at ru.android.llipam.lli_menu.MainActivity.onCreate(MainActivity.java:19)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
1) А как правильно получить текст?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TextView

Сообщение klblk » 26 фев 2015, 09:29

ошибка тут: at ru.android.llipam.lli_menu.MainActivity.onCreate(MainActivity.java:19), смотрите 19 строчку, там вы обращаетесь к объекту, который null
klblk писал(а):1) "не так" получаете текст из TextView.
ссылка ведет на функцию которую нужно использовать

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 26 фев 2015, 11:00

Изменил на :

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

if(textView.getText().equals("")) {
           setContentView(R.layout.main);
        }
        else {
            setContentView(R.layout.menu);
        }
ошибка все равно не ушла =(

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 26 фев 2015, 11:20

Еще попробовал таким образом:

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

if(textView.getText().length()==0) {
           setContentView(R.layout.main);
        }
        else {
            setContentView(R.layout.menu);
        }
Ошибка сохраняется. и при :

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

if(textView.getText().toString().equals("")) {
           setContentView(R.layout.main);
        }
        else {
            setContentView(R.layout.menu);
        }
ошибка сохраняется.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TextView

Сообщение klblk » 26 фев 2015, 12:14

ну понятно дело не ушла, NullPointerException эта правка не исправляет.
Либо показывайте весь код, либо 19 строчку, там где у вас ошибка.
Если это "if(textView.getText()...", то значит textView у вас null. и вообще откуда у вас этот textView, откуда вы его берете если setContentView() делается в условии.
Короче показывайте весь код, чувствую, что там какая-то чушь.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: TextView

Сообщение Foenix » 26 фев 2015, 12:29

trim я применяю, когда нужно исключить вероятность пустых пробелов в тексте
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 26 фев 2015, 12:32

Активити:

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

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {

    TextView tV;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        tV=(TextView) findViewById(R.id.textView);

        if(tV.getText().toString().equals("")) {
           setContentView(R.layout.menu);
        }
        else {
            setContentView(R.layout.main);
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}ode]
Меню:

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

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

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView"/>
    </LinearLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button"
            android:layout_marginTop="58dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button2"
            android:layout_below="@+id/button"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="44dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button3"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="244dp" />
    </RelativeLayout>

</LinearLayout>
Маин

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="А вот тут мы получим болт!!!!" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12pt" />

    <AutoCompleteTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New AutoCompleteTextView"
        android:id="@+id/autoCompleteTextView"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>
Последний раз редактировалось LLIPAM 26 фев 2015, 12:34, всего редактировалось 1 раз.

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 26 фев 2015, 12:33

19 строчка: if(tV.getText().toString().equals("")) {

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TextView

Сообщение klblk » 26 фев 2015, 12:48

Нельзя взять яблоко из корзины, которой не существует.
вначале должно быть:
setContentView() //создаем корзину с яблоками
а уже потом:
tV=(TextView) findViewById(R.id.textView); // берем из нее яблоко

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 26 фев 2015, 12:56

Но мне изначально нужно сделать условие для выбора лэйота который будет загружаться. Хм... тогда получается придется делать третий лэйот только с текствивером...

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TextView

Сообщение klblk » 26 фев 2015, 13:05

Что-то делаете не так.
Я вообще не понимаю как можно использовать TextView для выбора layout'а.
И еще не понимаю зачем одной Activity два разных layout'а, почему бы не два разных Activity или Fragment'а.

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 26 фев 2015, 15:25

Ситуация такая: зайдя в приложение в первый раз мне предоставляется список городов, выбрав город, он записывается в текствивер затем сохраняется в преференс. Так вот необходимо определить если в тествивере нечего нет то мне предоставляется список городов, а если в текствивер уже загрузился текст, то мы работаем дальше с программой. как то так =)

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: TextView

Сообщение alexmx » 26 фев 2015, 17:18

Разделите все это на три активити и будет вам счастье

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: TextView

Сообщение Mikhail_dev » 26 фев 2015, 17:39

Ситуация такая: зайдя в приложение в первый раз мне предоставляется список городов, выбрав город, он записывается в текствивер затем сохраняется в преференс. Так вот необходимо определить если в тествивере нечего нет то мне предоставляется список городов, а если в текствивер уже загрузился текст, то мы работаем дальше с программой. как то так =)
Сначала сохраняете в преференсы, а уже при создании активности смотрите в настройки, но никак не на вьюшки! Как можно что-то ехать на машине, когда имеем только её чертёжь?!
И создайте отдельно одну активность для списков, а другую для другого действия. Дальше будет так
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (MYPreferences.hasInfoAboutSelectedCity()) {
startActivity(...);
finish();
return;
} else {
//setCOntentView(...);
}

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 27 фев 2015, 05:59

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

hasInfoAboutSelectedCity()
это функция что делает?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TextView

Сообщение klblk » 27 фев 2015, 07:11

LLIPAM писал(а):

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

hasInfoAboutSelectedCity()
это функция что делает?
в названии метода ответ. Смотрит сохранен ли у вас в настройках город или нет. Предполагается, что вы напишете её сами.

LLIPAM
Сообщения: 24
Зарегистрирован: 11 фев 2015, 06:55

Re: TextView

Сообщение LLIPAM » 27 фев 2015, 07:54

Посидев подумав, я пришел к следующему решению:
0) Я создал файл prefcity.xml

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

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
    <EditTextPreference
        android:key="city"
        android:title="City">
    </EditTextPreference>
</PreferenceScreen>
1) Создал PrefActivity.java(где просто вызывается файл prefcity.xml)
2) В MainActivity.java реализовал следующий метод:

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

 protected void onResume() {
            String city = sp.getString("city", "");
            if (city==""){
                Intent intent =new Intent(this,PrefActivity.class);
                startActivity(intent);
            }else {
                String text =city;
                tvInfo.setText(text);
            }
        super.onResume();
    }
Теперь при первом запуске мне предлагается ввести название города. При последующих запусках программа город берет из преференса. Такая реализация имеет право жить? или она не правильна? =)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: TextView

Сообщение klblk » 27 фев 2015, 09:41

"(city=="")" так строки не сравниваются!!!

Для этого необязательно было создавать PrefActivity.
Урок вообще читали? http://startandroid.ru/ru/uroki/vse-uro ... ences.html

Ответить