###Androidアプリを実機でデバッグしていたら、「問題が発生したため、○○○○を終了します」と表示される。
JavaでAndroidアプリを開発しているのですが、カスタムビューでタッチイベントを受け取って、Intentを投げるプログラムをかいてデバッグしたところ、「問題が発生したため、○○○○を終了します」と表示されて、終了してしまうのですが、どうしたらよいでしょうか。
###発生している問題・エラーメッセージ
アプリを起動し、画面をタッチした時に、
「問題が発生したため、○○○○を終了します」
###TestView.java
package
1 2import android.content.Intent; 3import android.content.res.Resources; 4import android.util.AttributeSet; 5import android.view.MotionEvent; 6import android.view.View; 7import android.graphics.Rect; 8import android.graphics.Bitmap; 9import android.graphics.Point; 10import android.view.Display; 11import android.app.Activity; 12import android.graphics.Canvas; 13import android.graphics.BitmapFactory; 14 15/** 16 * Created by hidemaru on 2016/03/19. 17 */ 18public class TestView extends View { 19 20 //画面サイズ定数 21 private final static int 22 W = 480,//画面幅 23 H = 800;//画面高さ 24 25 //システム 26 private Graphics g; //グラフィックス 27 private Rect gSrc; //グラフィックス描画元 28 private Rect gDst; //グラフィックス描画先 29 private Bitmap bmp;//ビットマップ 30 31 public TestView(Activity activity) { 32 super(activity); 33 Display display = activity.getWindowManager().getDefaultDisplay(); 34 Point p = new Point(); 35 display.getSize(p); 36 int dh = W * p.y / p.x; 37 38 //グラフィックスの生成(2) 39 g = new Graphics(W, dh); 40 g.setOrigin(0, (dh - H) / 2); 41 gSrc = new Rect(0, 0, W, dh); 42 gDst = new Rect(0, 0, p.x, p.y); 43 44 Resources resources = getResources(); 45 bmp = BitmapFactory.decodeResource(resources,R.drawable.vult); 46 47 48 } 49 50 @Override 51 protected void onDraw(Canvas canvas){ 52 //背景の描画 53 g.drawBitmap(bmp, 0, 0); 54 canvas.drawBitmap(bmp,null,gDst,null); 55 56 } 57 58 59 @Override 60 public boolean onTouchEvent(MotionEvent event) { 61 int touchAction = event.getAction(); 62 if (touchAction == MotionEvent.ACTION_DOWN) { 63 getContext().startActivity(new Intent(getContext(), SelectView.class)); 64 65 } 66 return true; 67 } 68 69 70}
###IndexActivity.java
package
1 2import android.app.Activity; 3import android.os.Bundle; 4import android.view.WindowManager; 5import android.view.Window; 6 7 8/** 9 * Created by hidemaru on 2016/02/29. 10 */ 11public class IndexActivity extends Activity { 12 13 private TestView testView; 14 @Override 15 protected void onCreate(Bundle bundle){ 16 super.onCreate(bundle); 17 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 18 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 19 requestWindowFeature(Window.FEATURE_NO_TITLE); 20 testView = new TestView(this); 21 setContentView(testView); 22 } 23}
###試したこと
TestView.javaに、
public boolean performClick() { super.performClick(); return true; } ```を追加してみましたが、変わりませんでした。 ※yonaさんの意見により、performClickメソッドは、削除しました。 ###logcat
Caused by: java.lang.NullPointerException
at jp.co.hokkaido.nakafurano.hideo.kodama.vulkan.SelectActivity.onCreate(SelectActivity.java:55)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2193)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2310)
at android.app.ActivityThread.access$600(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1274)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5323)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:974)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:741)
at dalvik.system.NativeStart.main(Native Method)
###NullPointerExceptionについて(SelectActivity.java) yonaさんのご指摘により、SelectActivityの56行目でNullPointerExceptionが発生しているようなので、コードを掲載しておきます。
package jp.co.hokkaido.nakafurano.hideo.kodama.vulkan;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Point;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup.MarginLayoutParams;
/**
- Created by hidemaru on 2016/03/25.
*/
public class SelectActivity extends Activity {
@Override
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Display display = this.getWindowManager().getDefaultDisplay(); Point p = new Point(); display.getSize(p); LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); linearLayout.setBackgroundColor(Color.argb(255, 100, 149, 237)); ImageButton imgMap = new ImageButton(this); ImageButton imgLive = new ImageButton(this); ImageButton imgAVS = new ImageButton(this); Resources r = getResources(); Bitmap bmpM = BitmapFactory.decodeResource(r, R.drawable.vutton0); imgMap.setImageBitmap(bmpM); imgMap.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(SelectActivity.this,VolMap.class); startActivity(intent); } }); LayoutParams lp = imgMap.getLayoutParams(); MarginLayoutParams mlpM = (MarginLayoutParams)lp; mlpM.setMargins((p.x-60)/2,(p.y-272*3)/4,(p.x-60)/2,0); imgMap.setLayoutParams(mlpM); linearLayout.addView(imgMap); //TODO continue this proccess Resources r2 = getResources(); Bitmap bmpL = BitmapFactory.decodeResource(r2, R.drawable.vutton1); imgLive.setImageBitmap(bmpL); imgLive.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(SelectActivity.this,LiveCameraActivity.class); startActivity(intent); } }); LayoutParams lp2 = imgLive.getLayoutParams(); MarginLayoutParams mlpL = (MarginLayoutParams)lp2; mlpL.setMargins((p.x-60)/2,(p.y-272*3)/4,(p.x-60)/2,0); imgLive.setLayoutParams(mlpL); linearLayout.addView(imgLive); Resources r3 = getResources(); Bitmap bmpA = BitmapFactory.decodeResource(r3,R.drawable.vutton2); imgAVS.setImageBitmap(bmpA); imgAVS.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); LayoutParams lp3 = imgAVS.getLayoutParams(); MarginLayoutParams mlpA = (MarginLayoutParams)lp3; mlpA.setMargins((p.x-60)/2,(p.y-272*3)/4,(p.x-60)/2,0); imgAVS.setLayoutParams(mlpA); linearLayout.addView(imgAVS); }
}
解決につながることを願います。 ###補足情報(環境) OS OSX Yosemite 10.10.5 開発環境 Android studio 1.3.1 JAVA JRE 1.7.0 です。是非お願いいたします。
回答2件
あなたの回答
tips
プレビュー