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

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

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

Server+は、IT業界団体CompTIAが認定しているサーバー業務に関する資格です。サーバーのHW/SW構築・メンテナンス・仮想化など、サーバー運営上の運用・管理において幅広く対応できるスキルを評価します。

Java

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

Android

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

Android Studio

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

Q&A

解決済

1回答

6063閲覧

Androidアプリで2つのonClick()をif文で判断し、その片方は、別の保存が成功したかのif文の結果によってActivityを変更するかを決めたいです。

edoooooo

総合スコア476

Server+

Server+は、IT業界団体CompTIAが認定しているサーバー業務に関する資格です。サーバーのHW/SW構築・メンテナンス・仮想化など、サーバー運営上の運用・管理において幅広く対応できるスキルを評価します。

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2016/10/31 09:11

編集2016/11/01 13:11

Androidアプリで2つのonClick()をif文で判断し、その片方はif文の結果によってActivityを変更するかを決めたいです。

if (v.getId() == R.id.ToLogin) であった場合は、そのままLoginページにActivityを移動するのですが、
もしif (v.getId() == R.id.NewUserSet)だった場合は、TextViewのユーザー名とパスワードをNewUserSetボタンでサーバーに送信しエラーがなかった場合のみ
NewUserSetボタンを押した時のonClick()を使ってLoginページにActivityを移動したいです。

どうぞよろしくお願いします。
9:18分のActivitySecond.java
もともとのコードにNewUserSet()のように引数を空に変更した状態になりました。

java

1package ncmbdataquick.mbaas.com.nifty.datastorequickstart; 2 3import android.app.Activity; 4import android.app.AlertDialog; 5import android.content.Intent; 6import android.os.Bundle; 7import android.support.design.widget.FloatingActionButton; 8import android.support.design.widget.Snackbar; 9import android.support.v7.app.AppCompatActivity; 10import android.support.v7.widget.Toolbar; 11import android.view.View; 12import android.widget.Button; 13import android.widget.EditText; 14import com.nifty.cloud.mb.core.DoneCallback; 15import com.nifty.cloud.mb.core.NCMB; 16import com.nifty.cloud.mb.core.NCMBException; 17import com.nifty.cloud.mb.core.NCMBObject; 18import javax.security.auth.callback.PasswordCallback; 19 20public class ActivitySecond extends Activity { 21 22 //変数を宣言する 23 private EditText mUserName; 24 private EditText mPassword; 25 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_activity_second); 31 32 33 //**************** APIキーの設定とSDKの初期化 ********************** 34 NCMB.initialize(this, ""); 35 36 37 Button sendButton = (Button) findViewById(R.id.ToLogin); 38 sendButton.setOnClickListener(new View.OnClickListener() { 39 40 //ここに新規登録へのボタンを押した時を作る 41 @Override 42 //登録ボタンを押したら、登録完了のポップを出しログインへボタンを押しログインページに戻るようにする。 43 44 public void onClick(View v) { 45 if (v.getId() == R.id.ToLogin) { 46 //この下のclassはログインページ 47 Intent intent = new Intent(getApplication(), ActivityThird.class); 48 startActivity(intent); 49 } 50 51 } 52 }); 53 } 54 55 //このメソッドを呼び出せば、PasswordとUserIdがセットされるようにする。 56 public void NewUserSet() { 57 58 //NewUserAddというデータベースのクラス 59 final NCMBObject obj2 = new NCMBObject("NewUserAdd"); 60 61 mUserName = (EditText) findViewById(R.id.UserName);//ユーザーが入力するUserName 62 mPassword = (EditText) findViewById(R.id.Password);//ユーザーが入力するPassword 63 64 String userName = mUserName.getText().toString(); 65 String password = mPassword.getText().toString(); 66 67 obj2.put("Password", password); 68 obj2.put("UserName", userName); 69 obj2.saveInBackground(new DoneCallback() { 70 @Override 71 public void done(NCMBException e) { 72 if (e != null) { 73 //保存失敗 74 new AlertDialog.Builder(ActivitySecond.this) 75 .setTitle("Notification from Nifty") 76 .setMessage("Error:" + e.getMessage()) 77 .setPositiveButton("OK", null) 78 .show(); 79 } else { 80 //保存成功 81 new AlertDialog.Builder(ActivitySecond.this) 82 .setTitle("Notification from Nifty") 83 .setMessage("Save successfull! with ID:" + obj2.getObjectId()) 84 .setPositiveButton("OK", null) 85 .show(); 86 87 //ここにActivityの変更を入れればいきなり成功したらログイン画面のActivityThirdにいける 88 Button newUserSetButton = (Button) findViewById(R.id.NewUserSet); 89 newUserSetButton.setOnClickListener(new View.OnClickListener() { 90 91 //この下のonClickがNewUserSetボタンが押された時に起動するようにしたい 92 @Override 93 public void onClick(View v) { 94 //本当はThirdに行くのはToLoginだけどこの場合はNewUserSet 95 if (v.getId() == R.id.NewUserSet) { 96 Intent intent = new Intent(getApplication(), ActivityThird.class); 97 startActivity(intent); 98 } 99 } 100 }); 101 102 103 } 104 } 105 }); 106 107 } 108} 109 110

できました。

java

1package ncmbdataquick.mbaas.com.nifty.datastorequickstart; 2 3import android.app.Activity; 4import android.app.AlertDialog; 5import android.content.Intent; 6import android.os.Bundle; 7import android.support.design.widget.FloatingActionButton; 8import android.support.design.widget.Snackbar; 9import android.support.v7.app.AppCompatActivity; 10import android.support.v7.widget.Toolbar; 11import android.view.View; 12import android.widget.Button; 13import android.widget.EditText; 14import com.nifty.cloud.mb.core.DoneCallback; 15import com.nifty.cloud.mb.core.NCMB; 16import com.nifty.cloud.mb.core.NCMBException; 17import com.nifty.cloud.mb.core.NCMBObject; 18import javax.security.auth.callback.PasswordCallback; 19 20public class ActivitySecond extends Activity implements View.OnClickListener { 21 22 //変数を宣言する 23 private EditText mUserName; 24 private EditText mPassword; 25 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_activity_second); 31 32 //**************** APIキーの設定とSDKの初期化 ********************** 33 NCMB.initialize(this, ""); 34 35 36 findViewById(R.id.ToLogin).setOnClickListener(this); 37 findViewById(R.id.NewUserSet).setOnClickListener(this); 38 39 } 40 //ここに新規登録へのボタンを押した時を作る 41 @Override 42 //登録ボタンを押したら、登録完了のポップを出しログインへボタンを押しログインページに戻るようにする。 43 public void onClick(View v) { 44 45 if (v.getId() == R.id.ToLogin) { 46 //この下のclassはログインページ 47 Intent intent = new Intent(getApplication(), ActivityThird.class); 48 startActivity(intent); 49 } else if (v.getId() == R.id.NewUserSet) { 50 51 //ここにActivityの変更を入れればいきなり成功したらログイン画面のActivityThirdにいける 52 NewUserSet(); 53 } 54 } 55 56 //このメソッドを呼び出せば、PasswordとUserIdがセットされるようにする。 57 public void NewUserSet() { 58 59 //NewUserAddというデータベースのクラス 60 final NCMBObject obj2 = new NCMBObject("NewUserAdd"); 61 62 mUserName = (EditText) findViewById(R.id.UserName);//ユーザーが入力するUserName 63 mPassword = (EditText) findViewById(R.id.Password);//ユーザーが入力するPassword 64 65 String userName = mUserName.getText().toString(); 66 String password = mPassword.getText().toString(); 67 68 obj2.put("Password", password); 69 obj2.put("UserName", userName); 70 obj2.saveInBackground(new DoneCallback() { 71 @Override 72 public void done(NCMBException e) { 73 if (e != null) { 74 //保存失敗 75 new AlertDialog.Builder(ActivitySecond.this) 76 .setTitle("Notification from Nifty") 77 .setMessage("Error:" + e.getMessage()) 78 .setPositiveButton("OK", null) 79 .show(); 80 } else { 81 //保存成功 82 new AlertDialog.Builder(ActivitySecond.this) 83 .setTitle("Notification from Nifty") 84 .setMessage("Save successfull! with ID:" + obj2.getObjectId()) 85 .setPositiveButton("OK", null) 86 .show(); 87 88 89 Intent intent = new Intent(getApplication(), ActivityThird.class); 90 startActivity(intent); 91 92 93 94 95 } 96 } 97 }); 98 99 } 100 101 102} 103

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

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

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

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

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

guest

回答1

0

ベストアンサー

画面遷移までの処理順を整理してください。
1-newUserSetButtonを押す。
2-NewUserSetを実行する。
3-doneで成功なら次の画面へ、失敗ならエラーダイアログの表示

また、Buttonそれぞれに個別のリスナーを設定しているのでidを見る必要はありません。

投稿2016/10/31 10:55

yona

総合スコア18155

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

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

edoooooo

2016/10/31 12:02

ありがとうございます。 newUserButtonを押して、 NewUserSetを実行して、 doneで成功の場合に次の画面に行く場合は、自分のコードだと、NewUserSetを実行してから、その下の Loginへ ボタンを押さなくてはなりません。 doneで成功の場合にLoginへボタンを押さずにActivityを変えたいためコードを Button newUserSetButton=(Button)findViewById(R.id.NewUserSet); newUserSetButton.setOnClickListener(new View.OnClickListener() { Intent intent = new Intent(getApplication(), ActivityThird.class); startActivity(intent); // @Override // public void onClick(View v) { //本当はThirdに行くのはToLoginだけどこの場合はNewUserSet // if (v.getId() == R.id.NewUserSet) { // } このようにコメントアウトしたのですが、 Class'Anonymous class derived from OnClickListener' must either be declared abstract or implement abstract method 'onClick(View)' in 'OnClickListener'がView.OnClickListenerにでて、 Invalid method declaration; return type required Mis sing method body, or declare abstract がstartActivity(intent);にでたため、 onClick()の部分をコメントアウトすることは間違えだと思ったのですが、どうすれば良いのでしょうか? idを見るとは、if文のことであっているでしょうか どうぞよろしくお願いします。
yona

2016/10/31 12:12

理解せずに適当にコメントアウトして動くわけない。 onClickはコメントアウトしてはダメです。 newUserSetButtonの設定している箇所をonCreateに移動してください。 あと、コードを修正したら質問に追記してください。コメント欄ではわかりにくいです。
edoooooo

2016/10/31 12:31

ありがとうございます。 クラスにimplementsするクリックイベントの実装方法に変更し、余分なコードを消した結果やりたいことができました。
edoooooo

2016/10/31 12:35

コードも記載しました。ありがとうございました。
edoooooo

2016/10/31 13:05

すみません public void NewUserSet(View view) { このメソッドなのですが、onClick(){ }からだしたところ呼び出されずに実行されないのですが、どうすれば良いでしょうか?よろしくお願いします。
yona

2016/10/31 13:22

理解もせず、考えもせずButtonに対するリスナーを適当につけてるからじゃないですか? 以前のコードではsetOnClickListnerで各ボタンに個別のリスナーをつけていたのに、今ではその記述がなくなっているのでそのあたりが原因だと思いますよ。 そもそもNewUserSetを呼んでいる処理がないじゃないですか。 Buttonへのリスナーのつけ方を見直したほうがいいですよ。
edoooooo

2016/10/31 14:02

NewUserSetはNewUserSetがonClickの時によばれるようにcontent_activity_second.xmlにセットしたのですが、 onClickを今のコードに入れようとしてもエラーが出ない場所がわかりません。 どこにonClickを書けばいいのか教えていただけないでしょうか。
yona

2016/10/31 14:15

xmlで設定する必要はありません。 NewUserSetのボタンに設定するリスナーにNewUserSetメソッドを呼ぶようにしてください。
edoooooo

2016/11/01 03:56

ありがとうございます。昨日このアドバイスをいただいてからずっと考えているのですが、 新しく質問欄に記載したコードにたどり着きました。 しかし、NewUserSet(android.view.View)in ActivitySecond can not be applied to (int) onClickした際にこのメソッドを呼び出す際に表示したいxmlはactivity_activity_secondなのですが、どうすれば良いのでしょうか? 下記のようなonCreate()のコードでも書かれていたので記載手段は間違えていないと思っていたのですが、どうすればいいのでしょうか?申し訳ありません どうぞよろしくお願いします。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_activity_second);
yona

2016/11/01 05:01

だから、適当に変えて動くわけがないと言っているじゃないですか。 下記のことを行なって質問のコードを修正してください。エラーは出ますが、それ以外のことはしないでください。 ・xmlで指定しているonClick属性を削除してください。 ・implementしているOnClickListnerを削除してください。 ・NewUserSet(View view)をnewUserSet()に修正してください。
edoooooo

2016/11/01 10:48

ありがとうございます。 エラーは、 findViewById(R.id.ToLogin).setOnClickListener(this); findViewById(R.id.NewUserSet).setOnClickListener(this); のthisと、 this.NewUserSet(R.layout.activity_activity_second);にでました。 どうぞよろしくお願いします。
yona

2016/11/01 10:53

質問を修正してください ・setOnClickListener(this)をsetOnClickListener(new View.OnClickListener() {以外略の書き方に修正してください。
edoooooo

2016/11/01 11:11

ありがとうございます。個別のリスナーをセットしているコードをメモに保存していたので、それの xmlのonClickを削除して、 implementsを削除し、 newUserSet()に変更しました。 よろしくお願いします。
edoooooo

2016/11/01 12:21 編集

setOnClickListener(new View.OnClickListener() の書き方に修正したコードが大幅に変わり質問欄の上の方のコードにNewUserSet()の変更を加えた状態になりました。 めちゃめちゃなコードを送ってしまっていました。申し訳ありません。 これで教えていただいている通りの状態になったと思っています。 どうぞよろしくお願いします
edoooooo

2016/11/01 13:08

最初の方におしえていただいたことを実践したところ できました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問