2015-01-02 2 views
0

Так что я до сих пор очень хорошо справлялся, пока мне не нужно сохранять текст на parse.com. Код не будет игнорировать пустые поля EditText, которые, как мне кажется, вызывают ошибку. Я попытался использовать setText (""), поэтому он будет сохранять пустой, но все равно создает ошибку. Кто-нибудь знает, как игнорировать пустые поля EditText?Нужно игнорировать пустой EditText при сохранении на parse.com

Вот мой код ниже:

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



    psnEditText1 = (EditText) findViewById (R.id.psnEditText); 

    xboxEditText2 = (EditText) findViewById (R.id.xboxEditText); 
    lolEditText3 = (EditText) findViewById (R.id.lolEditText); 

    ParseQuery<ParseObject> query = ParseQuery.getQuery("User"); 
    query.whereEqualTo("username", UserId); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(List<ParseObject> objects, ParseException e) { 
      if (e == null) { 
       for(ParseObject thisUser : objects){ 
        //access the data associated with the ParseUser using the get method 
        //pu.getString("key") or pu.get("key") 
        //UNAME = thisUser.getUsername(); 
        PlayStationId = thisUser.getString("PlayStation ID"); 
        XboxLiveID = thisUser.getString("Xbox Live ID"); 
        LeagueofLegendsId = thisUser.getString ("League of Legends ID"); 
        oid = thisUser.getObjectId(); 
       } 


       psnEditText1.setText (PlayStationId); 
       xboxEditText2.setText(XboxLiveID); 
       lolEditText3.setText (LeagueofLegendsId); 


      } else { 
       Log.d ("query", "Error: " + e.getMessage()); 
      } 
     } 
    }); 




    saveButton = (Button) findViewById (R.id.saveButton); 
    saveButton.setOnClickListener (new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final ParseUser currentUser = ParseUser.getCurrentUser(); 
      if (currentUser != null) { 

       final String psnID = psnEditText1.getText().toString(); 
       final String xboxID = xboxEditText2.getText().toString(); 
       final String lolID = lolEditText3.getText().toString(); 

       UserId = currentUser.getObjectId(); 

       ParseQuery<ParseObject> query = ParseQuery.getQuery ("User"); 
       query.whereEqualTo("username", UserId); 
       // Retrieve the object by id 
       query.getInBackground (oid, new GetCallback<ParseObject>() { 
        @Override 
        public void done(ParseObject UserDataUpdate, ParseException e) { 

         // if (psnID.isEmpty() || xboxID.isEmpty() || 
           //lolID.isEmpty()) { 

          // psnEditText1.setText ("Not Available", TextView.BufferType.EDITABLE); 
          // xboxEditText2.setText ("Not Available", TextView.BufferType.EDITABLE); 
          //lolEditText3.setText ("Not Available", TextView.BufferType.EDITABLE); 


          // Toast.makeText (EditProfileActivity.this, 
            //"Be sure all fields are checked", Toast.LENGTH_LONG).show(); 



         // } else { 


          //Add on extra information to current user then save to parse.com 



           if (psnID.matches ("")){ 
            psnEditText1.setText ("No information entered"); 


            Toast.makeText (EditProfileActivity.this, 
              "PlayStation ID is empty", Toast.LENGTH_LONG).show(); 
           } else { 
            UserDataUpdate.put ("PlayStation ID", psnID); 

           } 


           if (xboxID.matches ("")) { 
            xboxEditText2.setText ("No information entered"); 

            Toast.makeText (EditProfileActivity.this, 
              "Xbox Live ID is empty",Toast.LENGTH_LONG).show(); 
           } else { 
            UserDataUpdate.put ("Xbox Live ID", xboxID); 
           } 


           if (lolID.matches ("")) { 
            lolEditText3.setText ("No information entered"); 

            Toast.makeText (EditProfileActivity.this, 
              "League of Legends ID is empty",Toast.LENGTH_LONG).show(); 
           } else { 
            UserDataUpdate.put ("League of Legends ID", lolID); 
           } 


          UserDataUpdate.saveInBackground (new SaveCallback() { 
           @Override 
           public void done(ParseException e) { 
            Toast.makeText (EditProfileActivity.this, "Saved", Toast.LENGTH_LONG).show(); 

            Intent intent = new Intent (EditProfileActivity.this, MainActivity.class); 
            startActivity (intent); 
           } 
          }); 

         } 

       }); 


      } 
      } 

     }); 

Вот ошибка, которую выбрасывают: (это произошло после того, как я изменил матчей ("") на равных (""))

01 -02 16: 20: 46.537 31994-31994/com.ionictech.gamerzio E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at com.ionictech.gamerzio.UI.EditProfileActivity $ 2 $ 1.done (EditProfileActivity.java: 141) at com.parse.GetCallback.internalDone (GetCallback.java:43) на com.parse.GetCallback.internalDone (GetCallback.java:29) на com.parse.Parse $ 6 $ 1.run (Parse.java:975) на android.os.Handler.handleCallback (Handler.java:605) на android.os.Handler.dispatchMessage (Handler.java:92) на android.os.Looper.loop (Looper.java:137) на android.app.ActivityThread.main (ActivityThread.java:4424) на java .lang.reflect.Method.invokeNative (собственный метод) в java.lang.reflect.Method.invoke (Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 787) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:554) at dalvik.system.NativeStart.main (родной метод)

+0

где EditProfileActivity.java:141? в вашем коде? – cbrulak

+0

Это строка UserDataUpdate.put («Xbox Live ID», xboxID); – user3900101

+0

Вы подтвердили, что UserDataUpdate не является нулевой в этой частной функции? потому что это может быть. – cbrulak

ответ

0

Учитывая тот факт, что UserUpdateData всегда нуль, одна главная проблема здесь состоит в том, что вы на самом деле не запрашивая пользователей. Для запроса пользователей, ваша линия

ParseQuery<ParseObject> query = ParseQuery.getQuery("User"); 

Должен сказать

ParseQuery<ParseUser> query = ParseUser.getQuery(); 

Это как Анализировать сохраняет объект пользователя по умолчанию. Если у вас нет пользовательского класса под названием «Пользователь», это заставит ваш запрос всегда возвращать нулевые объекты. Вы можете увидеть больше об этом здесь: https://parse.com/docs/android_guide#users-querying

Кроме того, в соответствии с руководством синтаксического анализа строки

query.getInBackground (oid, new GetCallback<ParseObject>() { 
    @Override 
    public void done(ParseObject UserDataUpdate, ParseException e) 

Должен быть

query.findInBackground(new FindCallback<ParseUser>() { 
    public void done(List<ParseUser> objects, ParseException e) { 
+0

Правильно, я обнаружил, что я не называю это правильно. – user3900101

-1

Использование equals

if (psnID.equals("")) { 

      } 

Поскольку

"hello".equals(".*e.*"); // false 
"hello".matches(".*e.*"); // true 
+0

Позвольте мне проверить его прямо сейчас – user3900101

+0

, посмотрев на stacktrace, вы можете ясно видеть, что это не часть проблемы. – cbrulak

+0

@cbrulak OP ранее не добавил никаких исключений ... Он сказал, что не может проверить пустое edittexts. Мой ответ отвечает ему ... Почему ты не отвечаешь на его вопрос ...? –

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