Почему условие if всегда истинно или ложно? - PullRequest
0 голосов
/ 11 апреля 2020

У меня сложная проблема, и мой Engli sh недостаточно хорош для объяснения, но я собираюсь попробовать.

У меня есть 3 действия: MainActivity, SecondActivity и ThirdActivity. В SecondActivity у меня есть интерактивный ListView. В ThirdActivity у меня есть TextView, и я вставляю результаты с этим кодом mantraEditText.setText(name);

. Сначала я должен получить результаты по нажатому элементу в MainActivity, а затем отправить в ThirdActivity из MainActivity. (Я не знаю почему, но только если я отправляю из MainActivity в ThirdActivity, приложение работает хорошо, если я отправляю напрямую из SecondActivity в ThirdActivity, я не могу сохранить результаты.)

Я получаю результаты от SecondActivity к MainActivity и отправьте его из MainActivity в ThirdActivity с этим кодом

        if (KEY_NAME != null){

             final Intent intent = new Intent(MainActivity.this, MainActivity.class);

                     startActivity(intent);
        }else {
            final Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    intent.putExtra(KEY_NAME, name);
                    startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
                }
            });
        }

С этим кодом при запуске приложения оно переходит непосредственно в ThirdActivity с пустыми результатами. Но это то, что я хочу. Я должен запустить приложение, и я должен увидеть MainActivity. Если я нажму SecondActivity, я должен увидеть ListView. Если я щелкнул по элементу ListView, мне нужно было бы go перейти к ThirdActivity с результатами, по которым я щелкнул.

Я знаю, что пустой не означает ноль, и это нормально, что приложение думает, даже если оно пустое, у меня есть результаты. Я искал много тем об условиях if / else в StackOverflow и пробовал множество решений.

Если мое состояние true, мое приложение запускает ThirdActivity напрямую с пустыми результатами. Когда я go вернусь в MainActivity, щелкните SecondActivity и выберите какой-то элемент, я смогу go в ThirdActivity с правильными результатами. Если мое состояние false, мое приложение запускает MainActivity, но даже если я щелкаю элемент ListView, я не могу получить результаты.

Вот то, что я пробовал до сих пор

KEY_NAME != null

KEY_NAME == null

KEY_NAME.isEmpty()

!KEY_NAME.isEmpty()

KEY_NAME.equals("")

в SecondActivity или MainActivity

final String KEY_NAME = null;

final String KEY_NAME = "";

и многие другие.

Все, что я пытался, я пытался снова только с таким условием if, как это

if (KEY_NAME.equals("")){

            final Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    intent.putExtra(KEY_NAME, name);
                    startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
                }
            });
        }

Я надеюсь, что смогу объяснить себя по-настоящему. Можете ли вы помочь мне, пожалуйста?

EDITED

Я получаю KEY_NAME отсюда (SecondActivity)

try{
            ArrayList<HashMap<String, String>> userList = new ArrayList<>();
            HashMap<String,String> user = new HashMap<>();
            ListView lv = getListView();
            InputStream istream = getAssets().open("userdetails.xml");
            XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = parserFactory.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,false);
            parser.setInput(istream,null);
            String tag = "" , text = "";
            int event = parser.getEventType();
            while (event!= XmlPullParser.END_DOCUMENT){
                tag = parser.getName();
                switch (event){
                    case XmlPullParser.START_TAG:
                        if(tag.equals("user"))
                            user = new HashMap<>();
                        break;
                    case XmlPullParser.TEXT:
                        text=parser.getText();
                        break;
                    case XmlPullParser.END_TAG:
                        switch (tag){
                            case "name": user.put("name",text);
                                break;
                            case "designation": user.put("designation",text);
                                break;
                            case "location": user.put("location",text);
                                break;
                            case "user":
                                if(user!=null)
                                    userList.add(user);
                                break;
                        }
                        break;
                }
                event = parser.next();
            }
            ListAdapter adapter = new SimpleAdapter(SecondActivity.this, userList, R.layout.list_row,new String[]{KEY_NAME, KEY_DESC, KEY_COST}, new int[]{R.id.name, R.id.designation, R.id.location});
            lv.setAdapter(adapter);


            // listening to single listitem click
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                    // getting values from selected ListItem
                    String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                    String designation = ((TextView) view.findViewById(R.id.designation)).getText().toString();
                    String location = ((TextView) view.findViewById(R.id.location)).getText().toString();

                    // Starting new intent
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    intent.putExtra(KEY_NAME, name);
                    intent.putExtra(KEY_COST, designation);
                    intent.putExtra(KEY_DESC, location);
                    if (intent.resolveActivity(getPackageManager()) != null) {
                        startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
                    }
                       }
            });
        }

И после KEY_NAME здесь (ThirdActivity)

public class ThirdActivity extends AppCompatActivity {
    static final String KEY_NAME = "name";
    private EditText mantraEditText;
    private TextInputEditText malasEditText;
    private Button saveButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_mantra);

        Intent in = getIntent();

        // Get XML values from previous intent
        String name = in.getStringExtra(KEY_NAME);

        overridePendingTransition(R.anim.fade_in_layout,R.anim.fade_out_layout);

        CardView mantraNote = findViewById(R.id.cv_mantra_note);

        Animation mantraNoteAnim = AnimationUtils
                .loadAnimation(NewMantraActivity.this,R.anim.mantra_note_anim);
        mantraNote.startAnimation(mantraNoteAnim);

        mantraEditText = findViewById(R.id.et_new_mantra);
        mantraEditText.setText(name);

        malasEditText = findViewById(R.id.et_total_malas);
        saveButton = findViewById(R.id.done_chanting_button);

        PushDownAnim.setPushDownAnimTo(saveButton);
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addMantra();
            }
        });
    }

    private void addMantra() {
        final String mantra = mantraEditText.getText().toString();
        final String malas = malasEditText.getEditableText().toString();

        Animation shake = AnimationUtils.loadAnimation(NewMantraActivity.this, R.anim.shake);
        Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        // Mantra is empty
        if (TextUtils.isEmpty(mantra)) {
            mantraEditText.startAnimation(shake);
            mantraEditText.setError("Required");
            if (vibrator != null)
                vibrator.vibrate(30);
            return;
        }

        // Malas is empty
        if (TextUtils.isEmpty(malas)) {
            malasEditText.startAnimation(shake);
            malasEditText.setError("Required");
            if (vibrator != null)
                vibrator.vibrate(30);
            return;
        }

        // Save the mantra
        Intent intent = new Intent(ThirdActivity.this, MainActivity.class);
        intent.putExtra("mantra_name", mantraEditText.getText().toString().trim());
        intent.putExtra("total_malas",Integer.parseInt(malasEditText.getEditableText().toString().trim()));
        setResult(RESULT_OK, intent);
        finish();
    }

А это MainActivity

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get XML values from previous intent
        final String name = getIntent().getStringExtra(KEY_NAME);

  final Button addMantraButton = findViewById(R.id.add_mantra_button);
        PushDownAnim.setPushDownAnimTo(addMantraButton, settingsButton, helpButton);
        addMantraButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ThirdActivity.class);

                 if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
                }
            }
        });


         if (!KEY_NAME.equals("")){

            final Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    intent.putExtra(KEY_NAME, name);
                    startActivityForResult(intent, MANTRA_DETAILS_ACTIVITY_REQUEST_CODE);
                }
            });
        }

  @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case (MANTRA_DETAILS_ACTIVITY_REQUEST_CODE): {
                if (resultCode == RESULT_OK) {
                    String mantraName = data.getStringExtra("mantra_name");
                    int totalMalas = data.getIntExtra("total_malas", 0);
                    Mantra mantra = new Mantra(mantraName, totalMalas);
                    mMantraViewModel.insert(mantra);
                }
            }
        }
    }
}

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