Member 14016088 Ответов: 2

Приложение падает, как только он будет запущен


Это простое приложение, которое использует общие настройки, запрашивает имя пользователя и пароль. Кнопка Saveinfo сохраняет имя пользователя и пароль, а кнопка Displayinfo отображает его в текстовом представлении приложение выходит из строя, как только оно запускается, я не могу найти, что не так с этим крошечным кусочком кода. Пожалуйста помочь.

Что я уже пробовал:

\package com.example.lenovo.shared_pref;

import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    EditText username = (EditText) findViewById(R.id.username);
    EditText password = (EditText) findViewById(R.id.Password);
    TextView mytext = (TextView) findViewById(R.id.myText);


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

        public void Saveinfo (View view) {
            SharedPreferences sharedPrefs = getSharedPreferences("Userinfo", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPrefs.edit();
            editor.putString("username", username.getText().toString());
            editor.putString("password", password.getText().toString());
            editor.apply();

            Toast.makeText(this, "Saved!", Toast.LENGTH_SHORT).show();
        }

        //print saved data

    public void DisplayInfo (View view){
        SharedPreferences sharedPrefs = getSharedPreferences("Userinfo", Context.MODE_PRIVATE);
        String name = sharedPrefs.getString("username", "");
        String pw = sharedPrefs.getString("password", "");
        mytext.setText(name + " " + pw);



    }
    }


XML :
Sure, here it is 
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.lenovo.splashscreen">

    <application

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:roundIcon="@mipmap/ic_launcher_round"

        android:supportsRtl="true"

        android:theme="@style/AppTheme">
        <activity android:name=".SplashActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            
        
        <activity android:name=".MainActivity">

Maciej Los

В чем вопрос?

Richard MacCutchan

Можете ли вы показать XML для вашего представления?

Member 14016088

Перешел к вопросу ...

David Crow

Это файл AndroidManifest, а не файл макета, который запросил Ричард.

Вы намеренно не использовали его try/catch блоки? Вы прошли через код с помощью отладчика? Когда/где это происходит DisplayInfo() тебе позвонили?

Где username, password и mytext присвоено значение? Скорее всего, это и есть проблема.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Интересно, могут ли три строчки в начале вашего урока быть проблемой:

public class MainActivity extends AppCompatActivity {

    EditText username = (EditText) findViewById(R.id.username);
    EditText password = (EditText) findViewById(R.id.Password);
    TextView mytext = (TextView) findViewById(R.id.myText);

Вы пытаетесь подключить переменные к вашему представлению до того, как оно будет создано. Измените код таким образом, чтобы вы просто объявили переменные на этом этапе, но не связывали их с объектами представления до тех пор, пока ваш OnCreate метод.


Рейтинг:
10

Patrice T

Цитата:
Приложение падает, как только он будет запущен

И вы получили сообщение об ошибке ?

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.