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

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

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

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

Android

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

Q&A

解決済

2回答

3544閲覧

Androidで違うクラスの変数を使おうとしてるのですが、エラーがでます。

edoooooo

総合スコア476

Java

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

Android

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

0グッド

0クリップ

投稿2017/05/26 06:25

編集2017/05/26 09:41

LocationActivityで、値を代入したusernmaeをfavoriteクラスの中ので使いたいです。

//コードの変更
//コードの変更後のfavoriteクラス

java

1package com.example.android.sample.new3; 2 3import android.app.Application; 4import android.database.Cursor; 5import android.database.sqlite.SQLiteDatabase; 6import android.util.Log; 7 8/** 9 * Created by endoutaichi on 2017/05/26. 10 */ 11 12public class favorite extends Application { 13 14 15 /**LocationActivity locationActivity = new LocationActivity(); 16 17 18 String username= locationActivity.username; 19 20 String spinnerItems[]= locationActivity.spinnerItems; 21 **/ 22 23 24 25 favorite fa = LocationActivity.getApplication(); 26 27 28 String username= fa.username; 29 30 // Bitmap bmp_sub = fa.getObj(); 31 32 33 String spinnerItems[]= fa.spinnerItems; 34 35 36 //--------------------------------------------------------favorite---------------------------------------------------------------------// 37 //これをログインした時に usernameを使って、と、newPlaceをinsertしたあとに呼び出す、 38 public void favorite(SQLiteDatabase db) { 39 40 41 if (username != null) { 42 String sql = "select placename from favorite where username = '" + username + "';"; 43 Log.v("placename select:", sql); 44 45 //usernameがまだない場合は、とりあえず 46 47 //MyOpenHelper helper = new MyOpenHelper(getfavorite()); 48 // SQLiteDatabase db = helper.getWritableDatabase(); 49 Cursor c =db.rawQuery(sql, null); 50 //これで、4つは設定できる 51 int count = c.getCount(); 52 53 //-----新しいの作るのはいいけど、前のは消さなくていい?-----// 54 spinnerItems = new String[count + 2]; 55 spinnerItems[0] = "GPSの現在地"; 56 spinnerItems[1] = "googlemapで登録"; 57 58 boolean mov = c.moveToFirst(); 59 int mam = 0; 60 while (mov) { 61 62 String in = c.getString(0); 63 fa.spinnerItems[mam + 2] = in; 64 System.out.println("mam+2" + mam + 2); 65 System.out.println("\"" + in + "\""); 66 mov = c.moveToNext(); 67 mam = mam + 1; 68 System.out.println("mam" + mam); 69 } 70 71 fa.onStart(); 72 c.close(); 73 db.close(); 74 } else if (username == null) { 75 76 spinnerItems = new String[2]; 77 spinnerItems[0] = "GPSの現在地"; 78 spinnerItems[1] = "googlemapで登録"; 79 80 locationActivity.onStart(); 81 82 } 83 } 84 85 86}

//コードの変更前のfavoriteクラス

java

1public class favorite { 2 3//この下がエラーの出ているfavoriteの14行目です 4 LocationActivity locationActivity = new LocationActivity(); 5 6String username= locationActivity.username; 7 8} 9

//コードの変更前のfavoriteクラスとLocatiionActivity
違うクラスの変数を使うために、このように、
favoriteをnewして、favorite()を呼び出し、
LocationActivityをnewして、String usernameに代入しているのですが、
一番下に記載したようなエラーがでます。
どうすればいいのでしょうか?

java

1public class favorite { 2 3//この下がエラーの出ているfavoriteの14行目です 4 LocationActivity locationActivity = new LocationActivity(); 5 6String username= locationActivity.username; 7 8} 9

java

1 2public class LocationActivity extends AppCompatActivity implements 3 GoogleApiClient.ConnectionCallbacks, 4 GoogleApiClient.OnConnectionFailedListener, 5 LocationListener,OnMapReadyCallback,GoogleMap.OnMapLongClickListener, 6 ListView.OnItemClickListener,ListView.OnItemLongClickListener { 7 8favorite favorite = new favorite(); 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 14 15MyOpenHelper helper = new MyOpenHelper(LocationActivity.this); 16 SQLiteDatabase db = helper.getWritableDatabase(); 17//この下がエラーの出ているLocationAcitivityの133行目です 18 favorite.favorite(db); 19 } 20 21}

このようなエラーが出ます。

java

1 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 2 at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 3 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 4 at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 5 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 6 at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 7 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 8 at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 9 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 10 at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 11 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 12 at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 13 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 14 at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 15 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 1605-26 15:15:11.390 10062-10062/com.example.android.sample.new3 E/AndroidRuntime: at com.example.android.sample.new3.favorite.<init>(favorite.java:14) 17 at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 18at com.example.android.sample.new3.LocationActivity.<init>(LocationActivity.java:133) 19 at java.lang.Class.newInstance(Native Method) 20 at android.app.Instrumentation.newActivity(Instrumentation.java:1078) 21 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2557) 22 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 23 at android.app.ActivityThread.-wrap12(ActivityThread.java) 24 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 25 at android.os.Handler.dispatchMessage(Handler.java:102) 26 at android.os.Looper.loop(Looper.java:154) 27 at android.app.ActivityThread.main(ActivityThread.java:6119) 28 at java.lang.reflect.Method.invoke(Native Method) 29 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 30 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 31 32 33

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

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

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

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

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

guest

回答2

0

Activityはプログラマーがインスタンス化する物ではありません。
また、favoriteはクラス名なのになぜ大文字で始まらないのでしょうか。

favoriteの役割はなんですか?

投稿2017/05/26 09:14

yona

総合スコア18155

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

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

edoooooo

2017/05/26 09:40 編集

Activityをインスタンス化しないコードへ変更しました。 favoriteは、クラス名ですが、間違えで小文字としてしまいました。 favoriteの役割は、お気に入りに、追加した物を、spinnerItems(spinnerのリスト)に入れることです。 その際にusernameを必要とし、データベースとやりとりをします。
yona

2017/05/26 09:35 編集

なぜグローバル変数する必要があるんですか? 都度データベースから持って来ればいいじゃないですか。 アプリ全体でつかう→グローバル変数にしなくては! なんて安直な考えですか?
edoooooo

2017/05/26 13:25 編集

favoriteクラスの全像を記載したのですが、 usernameは、ログインしているユーザーが変わるごとに、変わるクラス変数なので、favorite()を呼び出した時点で、代入されている値を使いたいと考えていました。 データベースから持ってくるとなると、 新規登録して、usernameが変更された場合 ログインして、usernameが変更された場合、 ログアウトしてusernameが変更された場合、 ログインしていなくて、みログインユーザーの場合でも、usernmaeには、コメントがされるたび、usernameはi++ とし、数字が代入されるため、その度に、 usernameという、現時点のusernameを保存しているデータベースをupdateしないといけないからです。 また、他のクラスでも、現在地などの、可変のデータを扱うクラスもあるので、 LocationAcitivityのクラス変数を、使用する方法を探していました。 favorite(username)としたほうがよかったかもしれないです
yona

2017/05/26 10:14

コメントを投稿する前に読み返してください。そのコメントで相手に伝わると思っているんですか?
edoooooo

2017/05/26 13:27

ちょっと余計な説明が多いせいで、紛らわしくなっていました。 usernameなどの変数の値は、度々、変わるため、データベースとやりとりをするとなると、コードが複雑になるため、グローバル変数を使おうとしていました。
edoooooo

2017/05/26 13:28

しかし、今回は、メソッドを呼び出す際に引数にusernameを指定しようと思います。
guest

0

ベストアンサー

Favoriteをnew
→メンバのLocationActivityをnew
→メンバのFavoriteをnew
→…

の、無限ループです。

前も言いましたが、**Activityを自分でnewしてはいけません。**FavoriteのコンストラクタでLocationActivityを渡してメンバにするなどに変更する必要があります。

あくまで、やるとしたらですが…

java

1public class LocationActivity extends AppCompatActivity implements /* 略 */ { 2 favorite favorite; 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 favorite = new favorite(this); 7 } 8} 9 10public class favorite { 11 12 LocationActivity locationActivity; 13 String username; 14 15 public favorite(LocationActivity lActivity) { 16 locationActivity = lActivity; 17 username = locationActivity.username; 18 } 19 20}

ただこれメモリリークとかしないかな…?

それから、あなたが今自分でも説明できないことをやろうとしていることを自覚してください。
説明できないものを作れるはずがないので、まずはそこを固めてからではないですか?

投稿2017/05/26 06:43

編集2017/05/26 15:06
swordone

総合スコア20649

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

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

edoooooo

2017/05/26 08:38 編集

「FavoriteのコンストラクタでLocationActivityを渡してメンバにする」 ということで、どうすればいいのかを、Activity、コンストラクタ、メンバ、new で検索したところ、 https://techbooster.org/android/application/2353/ の記事にたどり着き、 //favoriteクラス public class favorite extends Application { favorite(SQListeDatabase db){ favorite fa = LocationActivity.getApplication(); String username= fa.username; } } //LocationActivity favorite favorite = new favorite(); favorite.favorite(db); //Manifest.xml <application android:name="favorite" このように変更したのですが、
edoooooo

2017/05/26 08:11 編集

いただいたアドバイスとずれていますでしょうか?
edoooooo

2017/05/26 15:30

ありがとうございます。implements favorite favorite; ということが、できるのですね。ありがとうございました。
swordone

2017/05/26 15:33

全然違うし 何を読んでるんだあんたは
edoooooo

2017/05/26 18:00

FavoriteのコンストラクタでLocationActivityを渡してメンバにするということもがわかったことも書くべきでした。
swordone

2017/05/26 18:07

それはそうなのですが、その前のコメントにおいて… 回答を斜め読みして勘違いしているようではここ使ってる意味ないですよ?
edoooooo

2017/05/26 23:05 編集

しっかり、いただいた回答は理解してました。返信の内容が、足りてなかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問