2016-06-06 2 views
0

Мое мобильное приложение перестало работать после того, как я добавил проверку для раздела ip в моей функции onCreate, чтобы зарегистрированные пользователи обошли экран входа. Это может иметь какое-то отношение к объявлениям переменных, но я все еще не уверен, что происходит.Приложение для Android с общим предпочтением прекращено Работа

private EditText etUsername; 
private EditText etPassword; 
private EditText etIpAddress; 
private Button btnLogin; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    String username = etUsername.toString(); 
    String password = etPassword.toString(); 
    String ipAddress = etIpAddress.toString(); 

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this); 
    if (sharedPreferences.contains("ip")) { 
     performLogin(username, password, sharedPreferences.getString("ip", ipAddress)); 
    } 

    // declaring variebles 
    etUsername = (EditText)findViewById(R.id.etUsername); 
    etPassword= (EditText)findViewById(R.id.etPassword); 
    btnLogin = (Button)findViewById(R.id.btnLogin); 
    etIpAddress = (EditText) findViewById(R.id.etIpAddress); 

    // setting up things for login button 
    btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String ipAddress = etIpAddress.getText().toString(); 

      SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this); 

      sharedPreferences.edit() 
        .putString("ip", ipAddress) 
        .apply(); 

      String username = etUsername.getText().toString().trim(); 
      String password = etPassword.getText().toString().trim(); 

      performLogin(username, password, ipAddress); 
     } 
    }); 
} 

private void performLogin(String username, String password, String ipAddress) { 
    try { 
     Device.login(username, password, ipAddress, this); 
    } catch (JSONException e) { 
     onLoginFailure(e); 
    } 
} 

Logcat:

06-06 16:40:11.408 4000-4000/com.itemlocator.findit E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.itemlocator.findit, PID: 4000 
                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.itemlocator.findit/com.itemlocator.findit.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.widget.EditText.toString()' on a null object reference 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.widget.EditText.toString()' on a null object reference 
                      at com.itemlocator.findit.LoginActivity.onCreate(LoginActivity.java:32) 
                      at android.app.Activity.performCreate(Activity.java:6237) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                      at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:148)  
                      at android.app.ActivityThread.main(ActivityThread.java:5417)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
+0

пост logcat error – Shubhank

+0

Поделиться вы logcat файл – SaravInfern

+0

Что вы подразумеваете под 'String username = etUsername.toString();' line ?? это должно быть 'String username = etUsername.getText(). toString();' и после 'etUsername = (EditText) findViewById (R.id.etUsername);' строка –

ответ

1
String username = etUsername.toString(); 
String password = etPassword.toString(); 
String ipAddress = etIpAddress.toString(); 

будет производить NullPointerExceptions так как ваши EditTexts еще не инициализирован. Вы должны назвать первым:

etUsername = (EditText)findViewById(R.id.etUsername); 
etPassword= (EditText)findViewById(R.id.etPassword); 
btnLogin = (Button)findViewById(R.id.btnLogin); 
etIpAddress = (EditText) findViewById(R.id.etIpAddress); 

Кроме того, я думаю, что вы имеете в виду

String username = etUsername.getText().toString(); 
+0

Да, это помогло. Еще одна вещь, когда я снова открываю приложение, говорит о неверных учетных данных на экране входа в систему, который мне нужен, чтобы обойти это. Как я могу подойти к этому? – Lotse

+0

Ваши переменные username, password и ipAddress будут пустыми, так как эти переменные инициализируются из содержимого EditTexts. Вероятно, они пустуют при запуске. Вам необходимо сохранить имя пользователя ... и восстановить его перед вызовом вашего кода для входа –

+0

Так что для целей тестирования я в настоящее время вызываю данные из таблицы под названием «Устройство» и что только сохраненные пользователи могут получить доступ к приложению. Сохраняем ли мы данные в приложении, чтобы мы могли позвонить позже или есть другой подход? – Lotse

0

В Вход экране поместить этот код после login_WS позвонить

`SharedPreferences прив = getActivity () .getSharedPreferences (MyPre, Context.MODE_PRIVATE); Редактор редактора = pref.edit(); editor.putString (PARAMS.KEY_PROFILE_DATA, jsonObject.get ("data"). ToString()); editor.putString (PARAMS.KEY_USER_ID, ConstantData.USER_ID); editor.putBoolean (PARAMS.KEY_STAY_LOGGED_IN, true); editor.commit();

В заставке поместить этот код

`частное Runnable mRunnable = новый Runnable() {

@Override 
    public void run() { 

     pref = getSharedPreferences(MyPre, Context.MODE_PRIVATE); 

     //Log.i("splash","Boolen value 1" + pref.getBoolean(PARAMS.KEY_STAY_LOGGED_IN,false)); 

     is = Boolean.parseBoolean(String.valueOf((pref.getBoolean(PARAMS.KEY_STAY_LOGGED_IN, false)))); 

     Log.i("splash","Boolen value 2" + is); 

     if (is) { 

      Intent mIntent = new Intent(SplashScreenActivity.this, MainActivity.class); 
      startActivity(mIntent); 
      // overridePendingTransition(R.anim.enter, R.anim.no_anim); 
      finish(); 

     } else { 

      Intent mIntent = new Intent(SplashScreenActivity.this, LoginActivity.class); 
      startActivity(mIntent); 
      overridePendingTransition(R.anim.enter, R.anim.no_anim); 
      finish(); 

     }` 

Надеюсь, что это работает для вас

Смежные вопросы