質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

4704閲覧

Androidでサーバーとのログイン処理をやりたいのですがすべてログイン完了となります。

edoooooo

総合スコア476

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/11/02 10:18

編集2016/11/03 11:20

このコードでLoginCheckAnswerボタンが押された時のCheckUserNameとCheckPasswordがサーバーにあるかどうかを確認して、if(e!=null){}else{ログイン完了}としているのですが、サーバーにないCheckUserNameとCheckUserPassに入力してLoginCheckAnswerボタンを押しても全て、ログイン完了となっていまいます。
どうすれば良いのでしょうか?

java

1package ncmbdataquick.mbaas.com.nifty.datastorequickstart; 2 3import android.app.Activity; 4import android.app.AlertDialog; 5import android.os.Bundle; 6//いろいろいらなそうなの消した。 7import android.view.View; 8import android.widget.EditText; 9 10import com.nifty.cloud.mb.core.FindCallback; 11import com.nifty.cloud.mb.core.NCMBException; 12import com.nifty.cloud.mb.core.NCMBObject; 13import com.nifty.cloud.mb.core.NCMBQuery; 14 15import java.util.List; 16 17public class ActivityThird extends Activity implements View.OnClickListener{ 18 //変数の宣言 19 private EditText mUserName2; 20 private EditText mPassword2; 21 22 @Override 23 protected void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_activity_third); 26 27 //これはonClick()で doCheckUser(); 28 29 //**************** APIキーの設定とSDKの初期化 ********************** 30 NCMB.initialize(this, ""); 31 32 33 findViewById(R.id.LoginCheckAnswer).setOnClickListener(this); 34 } 35 36 //なにがクリックされたかのリスナー 37 //登録したいのは、LoginCheckAnswer 38 39 40 41 @Override 42 public void onClick(View v) { 43 //ここではデータを送信し、そのデータ(2つ)がサーバーにあったらログインする中ったら画面にログイン失敗と出す。 44 // MainActivityのデータを取得するやつを参考にする 45 //このIDでこのパスワードの人は存在するかを確かめる(if elseで) 46 //public void doGetDemo(View view) { 47 48 49 doCheckUser(); 50 51 } 52 53 public void doCheckUser () { 54 //NewUserAddという新規登録完了者のぱすと、nameがあるサーバーを検索するためのNCMBQueryインスタンスを作成 55 NCMBQuery<NCMBObject> query = new NCMBQuery<>("NewUserAdd"); 56 //keyというフィールドがvalueとなっているデータを検索する条件を設定 57 //ここでボタンからデータを取得 58 //ぼたんから引っ張るコードはまえやった。リスナーを作るやつ。 59 //ボタンのデータの前に 60 //ここで入力したデータを取得するためもう一つのbotannのなんかをつkる 61 62 63 //xmlのidを変えた時にnoを押さないとsecondとthirdの間で同じデータになる。 64 65 //この下のようにcontent_activity_third.xmlのUserNameとPasswordに2をつけた。 66 mUserName2 = (EditText) findViewById(R.id.CheckUserName);//ユーザーが入力するUserName 67 mPassword2 = (EditText) findViewById(R.id.CheckPassword);//ユーザーが入力するPassword 68 String userName2 = mUserName2.getText().toString(); 69 String password2 = mPassword2.getText().toString(); 70 71 query.whereEqualTo("UserName", userName2); 72 //このような下の条件の追加はAndroid入門なんとかっていうブックマークにある 73 query.whereGreaterThan("Password", password2); 74//サーバーからデータを検索 75 query.findInBackground(new FindCallback<NCMBObject>() { 76 @Override 77 public void done(List<NCMBObject> results, NCMBException e) { 78 if (e != null) { 79 80 //検索失敗。 81 82 } else { 83 84 new AlertDialog.Builder(ActivityThird.this) 85 .setTitle("Notification from Nifty") 86 .setMessage("Get successfull!" + results) 87 .setPositiveButton("ログイン完了です", null) 88 .show(); 89 //検索成功時の処理 90 //ここでログインする引数のからのメソッドを呼び出し、 91 //Activityforseに移行させたい。 92 //intentとか使う 93 } 94 95 96 } 97 }); 98 } 99 100 101 } 102

content_activity_third.xmlです。

java

1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" 5 android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 6 android:paddingRight="@dimen/activity_horizontal_margin" 7 android:paddingTop="@dimen/activity_vertical_margin" 8 android:paddingBottom="@dimen/activity_vertical_margin" 9 app:layout_behavior="@string/appbar_scrolling_view_behavior" 10 tools:showIn="@layout/activity_activity_third" 11 tools:context="ncmbdataquick.mbaas.com.nifty.datastorequickstart.ActivityThird"> 12 13 14 15 16 <EditText 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:inputType="textPassword" 20 android:ems="10" 21 android:id="@+id/CheckPassword" 22 android:layout_centerVertical="true" 23 android:layout_centerHorizontal="true" /> 24 25 <EditText 26 android:layout_width="wrap_content" 27 android:layout_height="wrap_content" 28 android:id="@+id/CheckUserName" 29 android:layout_marginTop="52dp" 30 android:layout_below="@+id/textView3" 31 android:layout_alignLeft="@+id/textView3" 32 android:layout_alignStart="@+id/textView3" 33 android:layout_alignRight="@+id/CheckPassword" 34 android:layout_alignEnd="@+id/CheckPassword" /> 35 36 <TextView 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 android:textAppearance="?android:attr/textAppearanceSmall" 40 android:text="UserName" 41 android:id="@+id/textView3" 42 android:layout_alignParentTop="true" 43 android:layout_toLeftOf="@+id/LoginCheckAnswer" 44 android:layout_toStartOf="@+id/LoginCheckAnswer" /> 45 46 <TextView 47 android:layout_width="wrap_content" 48 android:layout_height="wrap_content" 49 android:textAppearance="?android:attr/textAppearanceSmall" 50 android:text="Password" 51 android:id="@+id/textView4" 52 android:layout_below="@+id/CheckUserName" 53 android:layout_alignLeft="@+id/CheckPassword" 54 android:layout_alignStart="@+id/CheckPassword" 55 android:layout_marginTop="84dp" /> 56 57 <Button 58 android:layout_width="wrap_content" 59 android:layout_height="wrap_content" 60 android:text="ログインする" 61 android:id="@+id/LoginCheckAnswer" 62 android:layout_alignParentBottom="true" 63 android:layout_toRightOf="@+id/textView4" 64 android:layout_toEndOf="@+id/textView4" 65 android:layout_marginBottom="82dp" /> 66 67</RelativeLayout> 68

AndroidMoniterには、こんなエラーが出ていました。

このコードでできました。

java

111-02 19:12:01.879 20145-20145/ncmbdataquick.mbaas.com.nifty.datastorequickstart E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 211-02 19:12:01.879 20145-20145/ncmbdataquick.mbaas.com.nifty.datastorequickstart E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 31

どうぞよろしくお願いします。

java

1 @Override 2 public void done(List<NCMBObject> results, NCMBException e) { 3 if (e!= null||results.size()>=1) { 4 //e!=nullかつresult.sizeが1件 5 new AlertDialog.Builder(ActivityThird.this) 6 .setTitle("Notification from Nifty") 7 .setMessage("Get successfull!" + results) 8 .setPositiveButton("ログイン完了です", null) 9 .show(); 10 //検索成功時の処理 11 //ここでログインする引数のからのメソッドを呼び出し、 12 //Activityforseに移行させたい。 13 //intentとか使う 14 15 //elseをけした。 16 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

NIFTYCloudに関するとあるwebページをみて思ったのですが、いわゆるログイン処理を行うならNCMBQuery#findInBackgroundではなくNCMBUser#signUpInBackgroundを使うのではないかと思いました。

次のようになっているような気がします。(きちんと調べてないので推測も含みます)

  1. NIFTYCloudへのログイン

NCMBUser#signUpInBackgroundを使う。ログインに失敗した場合は例外が発生。

  1. NIFTYCloudへログインした後のデータ検索

NCMBQuery#findInBackgroundを使う。おそらく他の方の回答のとおり、検索結果の件数如何にかかわらず(通信エラーや使用方法に誤りがない限り)例外は発生しない。

投稿2016/11/02 14:00

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edoooooo

2016/11/03 11:15

ありがとうございます。 試してみます。
guest

0

ベストアンサー

e!=nullは検索自体の成功、失敗を判定しているものであり、条件にあったユーザーがいるかは判定でき無いと思います。

下記の修正をするといいと思いますよ。
・whereGreaterThan("Password",password2)をwhereEqualTo("Password", password2)に変更する。
・e!=nullかつresult.sizeが1件以上の場合はログイン成功、それ以外はログイン失敗にする。

投稿2016/11/02 13:06

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edoooooo

2016/11/03 11:19

ありがとうございました。 無事できるようになりました。 コードも記載しました ありがとうございました。
guest

0

実際に動かせてないので、予想ですが、
データが取得処理が正常に動作していれば、0件でも「NCMBException e」は常にnullだと思われます。
resultsの件数で判定するべきだと思います。

投稿2016/11/02 10:56

編集2016/11/02 11:41
himakuma

総合スコア952

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edoooooo

2016/11/02 11:05 編集

回答ありがとうございます eがnullでないなら失敗 nullだと成功にしていて、成功だとログインが完了しましたと表示されるようにしているのですが、エラーがnullでないのにもかかわらず成功してログインが完了しましたと表示されていると思うのですが、 おっしゃられていることからずれていましたら申し訳ありません
edoooooo

2016/11/02 11:09

おっしゃられていることがわかった気がします。 NCMBException e はnullだけど、エラーが出ているということであっていますでしょうか? NCMBException eがnullか、エラーが出ていない場合は、ログイン成功というコードにすればいいのでしょうか?
himakuma

2016/11/02 11:35 編集

すいません、見間違えてました。resultsの中身を見て、ログイン判定をするのが正しいのではないでしょうか?例外のオブジェクトがNULLかどうかでは判定できないと思います。後、細かいですが「!=」を使用しているのにelseがあるのは可読性を落とします。
edoooooo

2016/11/03 11:16

ありがとうございます。 resultの値でチェックして、if文もellseを無くしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問