Androidアプリのクリック処理でNullPointerExceptionが発生する

このQ&Aのポイント
  • Androidアプリのクリック処理でNullPointerExceptionが発生してしまいます。修正したい部分はonCreateメソッド内のnextButton.setOnClickListener(this)の部分です。
  • 質問者はAndroidアプリを修正していて、画面下にボタンを追加し、ボタンをタップすると別サイトを表示したいと考えています。しかし、nextButton.setOnClickListener(this)の行でNullPointerExceptionが発生してしまい、解決できない状況です。
  • 質問者はAndroidアプリのクリック処理でNullPointerExceptionが発生し、その解決方法が分からないと困っています。具体的には、ボタンのクリック処理を受け取る設定ができていないため、ボタンをタップしても何もイベントが発生しない状態です。お知恵をお貸しください。
回答を見る
  • ベストアンサー

Androidアプリのクリック処理

とても初歩的な問題で申し訳ないのですが、 3日悩んで解決できなかったので、質問させてください。 現在、Androidアプリの修正を行っています。 現状: 画面いっぱいにWebViewを表示させ、あるサイトを表示させる 改修案: 画面下にボタンを1つ追加し、このボタンをタップすると別サイトを表示させたい 表示するサイトは、サーバー上の特定テキストファイルから引っこ抜いてくる ※現状のアプリは、他の人から引き継がれたもので、当時開発には一切関わっておりません。 まず、XMLファイルでボタンを追加し、IDを「button1」としました。 次に、ActivityクラスにLoaderCallbacksクラスを継承しました。 同時に、AsyncTaskLoaderクラスを作成し、非同期でテキストファイルの内容を取得し、 任意のサイトを表示させる、というところまでは完成しています。 最後に、ボタンタップでクリック処理を行う、というところなのですが、 ここでつまづいてしまいました。 public class Frame extends Activity implements View.OnClickListener, LoaderCallbacks<xxxxxx> { private Button nextButton; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // レイアウトで指定したWebViewのIDを指定する。 nextButton = (Button)findViewById(R.id.button1); setContentView(R.layout.frame); // クリック処理をセット nextButton.setOnClickListener(this);   ←ここでNullPointerException発生!        } public void onClick(View v) { if (v == nextButton) { // ここに、ボタンタップ後に行う処理を記述 } } } 追加した部分だけを抜き出したのが上記の処理なのですが、 onCreate内の【nextButton.setOnClickListener(this)】の部分で、 NullPointerExceptionが発生してしまいます。 この部分だけコメントアウトすると処理はとりあえず通るのですが、 クリック処理を受け取る設定ができていないので、もちろんボタンをタップしても 何もイベントは発生しません。 初歩的な質問で大変申し訳ないのですが、本当に解決法が分からず困っています。 どうぞ知恵をお貸しください、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

public class Frame extends Activity implements View.OnClickListener, LoaderCallbacks<xxxxxx> { private Button nextButton; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // レイアウトで指定したWebViewのIDを指定する。 nextButton = (Button)findViewById(R.id.button1); (※1) setContentView(R.layout.frame); (※2) // クリック処理をセット nextButton.setOnClickListener(this);   ←ここでNullPointerException発生! (※3)        } public void onClick(View v) { if (v == nextButton) { // ここに、ボタンタップ後に行う処理を記述 } } } ※3でNullPointerExceptionが発生するのはほぼ間違いなくnextButtonがnullだからだろう。 で、なぜnextButtonがnullかと言うと単純に※1と※2が逆なだけなんじゃないか。 ※1の時点ではまだthis(つまりActivity)はR.id.button1のIDであらわされるリソースが登録されていない。 それを行うのが※2だからだ。

yukie1101
質問者

お礼

上記の通り修正したところ、正しく表示できました! きちんと説明していただくと、至極当然のことですね。。。 これからも精進いたします。 本当に本当に、ありがとうございました!

関連するQ&A

  • androidアプリ開発 youtube表示方法

    androidアプリをjavaで開発してます。youtube動画を見れるアプリにしたいです。下記のコードでyoutubeサイトには行けるんですが、画象をクリックしても動画を見ることができません。どのようにすれば動画を見れるようになるでしょうか?どうぞよろしくお願いします。 package com.XXX; import android.app.Activity; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class WebViewActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web); WebView webView = (WebView)findViewById(R.id.main_webview); webView.setWebViewClient(new WebViewClient()); webView.loadUrl(url); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); } }

  • androidアプリ開発について

    androidアプリ開発初心者です。 やりたいことは、 スタートボタンを押して、自分のお気に入りのページに飛び、(例えばオークションなど)サイトを表示させ、何分間ごとに更新できるループ処理?などができればいいなと考えています。 スタートボタンを押してサイトを表示するまでは何とか作れたのですが、それ以降をどのように作ったらいいのか分かりません。 初心者的な質問で申し訳ないのですが、どのように書いたらよいのか教えてください。 コードはこのようになっています。 <<main.xml>> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="192dp" android:layout_height="wrap_content" android:text="スタート" /> </LinearLayout> <<MainActivity.java>> import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { Button btn =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ Uri uri =Uri.parse("http://"); Intent intent=new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 長文で申し訳ありません。どうぞ宜しくお願い致します。

  • Androidで画面遷移ができません.

    初心者ながら,Android向けにアプリを開発しています. ページXXXXXでボタンを表示させ,ページYYYYYで画像が表示されるようにしたいのですが,ページXXXXXで表示されたボタンを押すとエラーが出て強制終了となってしまいます. 画面遷移されるページ(YYYYY)には,適当な位置にタッチさせるとタッチした位置に移動する画像についてプログラミングしてあります.ページYYYYYは個別で実行すると正常に起動します. どこに原因があるのか教えてください.よろしくお願いします. ページXXXXXのソースは以下のとおりです. 【ソース】 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.content.Intent; public class XXXXX extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent intent = new Intent(XXXXX.this, YYYYY.class); startActivity(intent); } }); } }

    • ベストアンサー
    • Java
  • Androidプログラミング アプリが停止する

    eclipseでボタンを押すと画像が表示されるアプリをつくろうとしていましたがボタンをを押すとポップアップで「~を停止します。」と表示されアプリが落ちてしまいます。 Ver4.0を使用しています。 package my.application.imageviewer; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; public class ImageViewer extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void showImage(View view) { ImageView imageView1 = (ImageView)findViewById(R.id.imageView1); imageView1.setImageResource(R.drawable.sample); } } プログラムにミスがあるのでしょうか? 宜しくお願い致します。

  • androidブラウザ開発について

    先日、androidでwebviewクラスを使って簡単なブラウザを開発し始めたのですが、一部のサイトで表示がおかしくなったりして困っています。 あるサイトというのは、1つがMobageのゲーム「アイドルマスターシンデレラガールズ」です。 画像が一部表示されなかったり、jqueryを使っ(ていると思われる)た画像のスライドや、音声の再生等が機能してくれません。 少し詳しく書くと、スライドショーの方は縦に画像が連続で並んで表示されていて、音声の方はゲーム内の設定画面でONとOFFの切り替えが出来るのですが、その設定ページを見ると「ご利用されている端末では、この設定項目を利用することができません。」と表示されており何もすることができない状態です。 一応フラッシュは再生できます。 もう1つのサイトはyoutubeです。 動画を再生しようとしても、プログレスバーは表示されるんですが一向に動画は再生されません。 色々と調べてみたのですが全く原因が分からず・・・。 どなたかご教授いただければ幸いです。 よろしくお願い致します。 経験不足なので役に立つかは分かりませんが、以下がSDKとソースコードです。 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView myWebView = (WebView)findViewById(R.id.webView1); myWebView.setWebViewClient(new WebViewClient()); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("https://www.google.co.jp/"); } ちなみにisw13htで実行しています。

  • Android JAVAへでの質問です

    (←※この部分!) の意味がわからないのでどなたか教えていただけないでしょうか? private EditText edit1; ですが、なぜ private がついているのでしょうか?なくても動きましたが何か意味があるのでしょうか? そしてどうして、この子はここにいるのでしょうか? Button btn1 と一緒に仲良くいてもいいんじゃないでしょうか? ================ import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.view.*; import android.view.View.OnClickListener; import android.widget.*; public class Test2Activity extends Activity { private EditText edit1;(←※この部分!) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit1 = (EditText)this.findViewById(R.id.EditText1); Button btn1 = (Button)this.findViewById(R.id.button1); btn1.setOnClickListener(new MyClickA()); } class MyClickA implements OnClickListener { public void onClick(View view){ Editable e = edit1.getText(); int n = Integer.parseInt(e.toString()); Toast toast = Toast.makeText(getApplicationContext(), "数値=" + n, Toast.LENGTH_SHORT); toast.show(); } } }

    • ベストアンサー
    • Java
  • androidでアプリを作ろうとしてるのですが

    package com.example.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class InOutTest extends Activity { /** Called when the activity is first created. */ public TextView txtInfo; public EditText edtText; public Button outputbutton; public TextView txtResult; public TextView txtjudge; public String strInch; public String gettext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //レイアウト作成 ここから LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); //レイアウトを見えるようにする //レイアウト作成 ここまで //GUI部品作成 ここから // ラベル txtInfo = new TextView(this); txtInfo.setText("check"); strInch = ("check"); layout.addView(txtInfo); // エディタ edtText = new EditText(this); layout.addView(edtText); // ボタン txtResult = new Button(this); txtResult.setText("same or difference"); layout.addView(txtResult); // 結果表示用ラベル txtjudge = new TextView(this); txtjudge.setText("check"); layout.addView(txtjudge); //GUI部品作成 ここまで txtResult.setOnClickListener(new OnClickListener(){ public void onClick(View v) { gettext = edtText.toString(); if (strInch==gettext){ txtjudge.setText("ok"); } }; }); }} 上のプログラムで strInchに入ってるデータとgettextで取得した文章を比較して同じなら txtjudgeにOKと引き渡して表示させたいのですがうまく動きません 何方かどうぞよろしくお願い致します

    • ベストアンサー
    • Java
  • すいません、Android初心者です

    最近EclipseでAndroidの勉強を始めたものです。 早速ですが、以下のソースを実行すると、何故か「[アプリ名](パッケージ名)が予期せず停止 しました。やり直してください」と出てきます・・・コメントの部分をコメントアウトするとうまく動作 するのですが、何故でしょうか?なお、ターゲットは2.3.3のものを利用しています。 /* +++ Javaソース +++ */ import android.app.Activity; import android.os.Bundle; import android.widget.Button; public class Android_Test01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button button1 = (Button) findViewById(R.id.button1); //button1.setText("button1"); setContentView(R.layout.main); } } /* +++ XMLソース +++ */ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>

    • ベストアンサー
    • Java
  • Androidアプリ・SDKでの実行時エラー

    初めてアンドロイドアプリの開発をしています(多言語のプログラミング経験はありますが、JAVAは初めてです)。Eclipseで開発を行っていますが、ボタンをクリックしたら画面遷移をする、という処理を追加したところ、Android SDKで実行した際に 「アプリ名(パッケージ名)が予期せず停止しました。やり直してください。」 と出て、トップの画面も表示されなくなってしまいました。なお、Eclipse上ではエラーなどが出ていません。原因が解らず困っています。何かわかる方がいらっしゃいましたらお教え下さい。 以下がソースになります。 ■トップのActivity--------------------- package jp.xxxxx.xxxxx; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //ボタンを定義 Button btn1 = (Button) findViewById(R.id.btn1); //クリックイベント btn1.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent intent = new Intent( getApplicationContext() , SubActivity.class); startActivity(intent); } }); } } ■トップ画面のXML--------------------- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"> <ImageView android:id="@+id/topLogo" android:src="@drawable/logo" /> <LinearLayout android:id="@+id/linearLayout1"> <TextView android:id="@+id/btn1" android:text="@string/btn1text"></TextView> </LinearLayout> </LinearLayout> ■トップのAndroidManifest.xml--------------------- <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.xxxxx.xxxxx" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:label="@string/app_name" android:name="MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/screenName2" android:name="SubActivity"> </activity> </application> </manifest> なお、Activityの「//ボタンを定義」以下をコメントアウトした際には画面は出てきます。何か初歩的な間違いをしているかもしれませんが、どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • nullpointexceptionについて

    プログラミング初心者です。 エラーが全くわかりません。 ボタンを押すと、リストビューに移動するというものなんですが、ボタンを押すとnullpointexceptionが出ます。 最後の、et.setText(str);でエラーになっているようなんですが、 お分かりになる方いらっしゃいますか・・・? よろしくお願いいたします。 public class MainActivity extends Activity { EditText text_naiyou =null; Button save=null; Button buck=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); save=(Button)findViewById(R.id.save); buck=(Button)findViewById(R.id.buck); text_naiyou=(EditText)findViewById(R.id.text_naiyou); save.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EditText et = (EditText)findViewById(R.id.text_naiyou); String str = et.getText().toString(); Intent intent = new Intent(); intent.setClass(getApplicationContext(), ListActivity.class); String pkg = getPackageName(); intent.putExtra(pkg + ".input",str); startActivity(intent); public class ListActivity extends Activity { EditText text_naiyou =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); Intent intent = getIntent(); String pkg = getPackageName(); String str = intent.getStringExtra(pkg + ".input"); EditText et = (EditText)findViewById(R.id.text_naiyou); et.setText(str);

専門家に質問してみよう