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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

3回答

4111閲覧

クラス間の変数の受け渡し

uedayuya

総合スコア17

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/12/28 11:45

編集2017/12/29 11:32

追記(目標としてはonSensorChangedの中にあるx,yを自分で作ったクラスで使いたいです。)

関数setDatax,setDatayを用いるとLog.iでx、yの値を見たところセンサーからの値を更新することができました。しかし他のクラスで値を受け取ろうとすると0のままです。これを0ではなく更新された値を獲得するには何を学べばいいでしょうか?

activityはインスタンス化できないということなのでこの方法が根本的に違うのでしたら、どういう方法を用いればいいでしょうか?教えてください

値を渡す側のプログラムはSBクリエイティブの『初めてのandroidプログラミング』の6章に乗っているコードを参考にしており、SBクリエイティブのサイトからサンプルプログラムをダウンロードできます。

#値を渡す側

java

1import android.content.Context; 2import android.content.pm.ActivityInfo; 3import android.graphics.Canvas; 4import android.graphics.Color; 5import android.graphics.Paint; 6import android.hardware.Sensor; 7import android.hardware.SensorEvent; 8import android.hardware.SensorEventListener; 9import android.hardware.SensorManager; 10import android.os.Bundle; 11import android.support.v7.app.AppCompatActivity; 12import android.util.Log; 13import android.view.SurfaceHolder; 14import android.view.SurfaceView; 15 16 17 18public class MainActivity extends AppCompatActivity 19 implements SensorEventListener, SurfaceHolder.Callback { 20 //SurfaceView生成時のイベントをコールバックで受け取るためにMainActivityにSurfaceHolder.Callback を実装 21 SensorManager mSensorManager; 22 Sensor mAccSensor; 23 SurfaceHolder mHolder; 24 int mSurfaceWidth = 0;//画面の幅 25 int mSurfaceHeight = 0;//画面の高さ 26 float y; 27 float x; 28 29 30 31 32 @Override 33 protected void onCreate(Bundle savedInstanceState) { 34 super.onCreate(savedInstanceState); 35 setContentView(R.layout.activity_main); 36 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 37 mAccSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); 38 39 } 40 41 public void setDatax(float data1){ 42 this.x = data1; 43 } 44 public void setDatay(float data1){ 45 this.y = data1; 46 } 47 48 @Override 49 public void onSensorChanged(SensorEvent event) { 50 if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { 51 y = event.values[0]; 52 x = event.values[1]; 53 setDatax(x); 54 setDatay(y); 55 } 56 } 57 58 @Override 59 public void onAccuracyChanged(Sensor sensor, int i) { 60 } 61 62 @Override 63 public void surfaceCreated(SurfaceHolder surfaceHolder) { 64 registerSensor(); 65 } 66 67 public void registerSensor() { 68 mSensorManager.registerListener(this, mAccSensor, SensorManager.SENSOR_DELAY_GAME); 69 } 70 @Override 71 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 72 mSurfaceWidth = width; 73 mSurfaceHeight = height; 74 } 75 76 @Override 77 public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 78 mSensorManager.unregisterListener(this); 79 } 80 81}

#受け取る側

java

1public class myclass { 2MainActivity ma = new MainActivity 3float x1 = ma.x; 4float y1 = ma.y; 5 6}

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

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

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

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

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

guest

回答3

0

ベストアンサー

回答のスタンス

私は基本的に「初心者のうちは何がわからないのかさえわからない。」という状態にあると思うので、何がわかってないのか、具体的に何がわかればこの問題が解決するのかを回答したいと思います。
事実、私もjavaを学習し始めてすぐには同じような疑問を持ちました。ですが、これはteratailのような質問サイトを使うよりも、「java インスタンス クラス」などの単語でググった方がはるかに理解しやすい答えを得ることができると思います。

その上で、説明したいと思います。

どんな分野がわからないのか

わかってないのは、基礎的なところから順に、「クラスとインスタンス」「AndroidのActivityについて」だと感じました。ですので、この二つを理解しましょう。

具体的な問題点は

クラスとインスタンス

インスタンスというものは、いわばクラスという雛形から、具体的に生成されたものです。例えていうなら、たい焼きのくり抜く型がクラスで、できたたい焼きがインスタンスです。
そこで、たい焼きを作るという宣言が、newという宣言になるわけです。実際の生活でもわかると思いますが、もちろん新しく作ったものは、昔のものとは別物ですね?
質問者様が行なっているnewとはそれと同じで新しいものを生成していて、自分が本当に参照したいものを得ることではないのです。

AndroidのActiviy

これに関しては他の方もおっしゃっているように、Activityは自分でインスタンスを生成するものではありません。「なぜ?」と思われるかもしれませんが、これはAndroidが内部で制御していることですのでまずは「Activity遷移の方法」などで調べるのがよろしいと思います。正直なところ私も厳密に理解しているわけではないので正しい回答をできる自信がありません。

解決方法

myClassの中に、MainActivityから受け渡す方法を考えます。
1:myClassのコンストラクタの引数に、xとyを入れて初期化する。
2:myClass.update(float x, float y)のようなメソッドを用意し、そこに引数でxとyを渡す。
この辺でしょうか。

最後に

私も初学者のうちは似たようなことで苦しんでいました。私は初学者に対してただ厳しく突っぱねる態度はどうかと思う立場ですのでこのように丁寧に回答しましたが、まずは「どのようなことを調べたのか、自分が何を努力したのか」を書いていただけると、回答者も快く答えることができるかと思います。頑張ってください。

投稿2017/12/29 16:11

hiramekun

総合スコア428

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

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

0

Activityのインスタンス化はOSが行う仕事で、ユーザーのプログラムで勝手に生成しても意図した結果を得ることはできません。と、前回の質問でも指摘されているはずですが・・・。

「ではどうすればいいのか」という回答をすべきところかもしれませんが、これはAndroidがどうこうではなくJavaの基礎の理解度の問題です。丸写しで動作するコードを提示するのは簡単ですが、それでは「理解した」ことにはならないでしょう。Javaの基礎を学び直すのが近道です。

投稿2017/12/28 12:57

編集2017/12/28 13:22
keicha_hrs

総合スコア6766

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

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

uedayuya

2017/12/29 04:57

この質問は解決できるけど、自分で理解しなさいということでいいですよね?どこを学べばいいのか教えていただけないでしょうか?自分がどこが理解できていないのか理解できていません。
keicha_hrs

2017/12/29 12:00 編集

「teratailとは?」という質問は拝見しました。相当な不快感を与えてしまったようで、それについてはお詫びします。ただ、「どこを学べばいいのか」というご要望にどう答えれば良いのか、私にとっても非常に難しい回答を迫られているのだということもわかっていただきたいです。敢えて「どこ」と明示するならば、「Java入門本を読了程度」と答えざるを得ません。例えばnewで作成される「オブジェクト」とは何者なのか、参照型変数(クラス名で宣言する変数)とは何を示すのかなど、「オブジェクト指向」と呼ばれる概念の基礎は押さえておいてほしいところです。 なにか返信しなければと思って書いているのですが、自分でも何書いているのかわけわかんない。こうなると、「回答しなければ良かったのだろうか」と後悔してしまいます。
guest

0

MainActivity ma = new MainActivity

これはMainActivityクラスのインスタンスを新規に作成してmaに代入するという意味です。
とうぜん中身は空っぽです。

投稿2017/12/28 12:29

編集2017/12/28 12:31
hichon

総合スコア5737

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問