現在、とある機器からデータをMain Activityの配列で取得して
それをNextActivityにIntentで流して、
それとはさらにChartActivityにてCanvasとPaintを使って
グラフを描こうとしています。
ChartActivityは横向き(landscape)表示でx,y,z値の3本を表示させます。
ここで、TextViewを使って都度可変するグラフの目盛の表示を変えて
併せて表示したいのですが、普通にCanvasとPaintにTextViewを乗せると
エラーで終了してしまいます。(CanvasとPaintでのグラフのみの描画は成功しています)
そこでこちらの情報をもとに
TestViewクラスを作成しレイアウトにタグを追加してみたのですが
MainActivityやIntentでNextActivityに流したデータが
【NullPointerException】で取得が出来ずNextActivityに切り替えると強制終了してしまいます。
###やってみたこと:
MainActivityをNewして変数を取りに行ってみましたが
宣言している段階で代入されていれば、それはNullPointerExceptionになりません(当然ですが)
グローバル変数にして、やってみましたが同じ状態です。
どのように対応すれば、CanvasとPaintにTextViewを乗せることができるでしょうか。
よろしくお願いします。
Java
1MainActivity 2 3public class MainActivity extends AppCompatActivity { 4 5 int data1[] ; //これだとNullPointerException 6 int data2[] ={55,60,100}; //エラーにならない 7 common Common; //グローバル変数 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_main); 12 } 13 public void onNext(View view){ 14 Intent intent = new Intent(this,NextActivity.class); 15 16 data1 = new int [3]; 17 data1[0]=55; 18 data1[1]=60; 19 data1[2]=100; 20 intent.putExtra("data",data1); 21 startActivity(intent); 22 } 23}
Java
1NextActivity 2 3public class NextActivity extends AppCompatActivity { 4 5 Intent intent =getIntent(); 6 private TextView label; 7 private TestView testView; 8 public int data[] = intent.getIntArrayExtra("data"); 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_next); 14 15 label = (TextView) this.findViewById(R.id.label); 16 label.setText("abcd123456789cdefg\n" + "1234567893456978\n" + 17 "hijklmnopq012698745rst4565848uvwxlmnopq\n" + 18 "\n\n\n012698745rst4565848\nuvwx" ); 19 20 testView = (TestView) this.findViewById(R.id.test_view); 21 22 } 23}
Java
1TestView.java 2 3public class TestView extends View { 4 Paint paint; 5 MainActivity ma = new MainActivity(); 6 7 public TestView(Context context, AttributeSet attrs) { 8 super(context, attrs); 9 paint = new Paint(); 10 } 11 12 @Override 13 protected void onDraw(Canvas canvas) { 14 15 // 背景、半透明 16 canvas.drawColor(Color.argb(125, 0, 0, 255)); 17 18 // 円 19 paint.setColor(Color.argb(255, 68, 125, 255)); 20 paint.setStrokeWidth(30); 21 paint.setAntiAlias(true); 22 paint.setStyle(Paint.Style.STROKE); 23 // (x1,y1,r,paint) 中心x1座標, 中心y1座標, r半径 24 canvas.drawCircle(450, 450, 100, paint); 25 26 // 矩形 27 paint.setColor(Color.argb(255, 255, 0, 255)); 28 paint.setStrokeWidth(10); 29 paint.setStyle(Paint.Style.STROKE); 30 // (x1,y1,x2,y2,paint) 左上の座標(x1,y1), 右下の座標(x2,y2) 31 canvas.drawRect(480, 480, 850, 880, paint); 32 33 // 線 34 paint.setStrokeWidth(15); 35 paint.setColor(Color.argb(255, 0, 255, 120)); 36 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 37 canvas.drawLine(350, 850, 750, 630, paint); 38 39 // 線 40 paint.setStrokeWidth(15); 41 paint.setColor(Color.argb(255, 0, 255, 120)); 42 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 43 canvas.drawLine(ma.data1[0], ma.data1[1], ma.data1[2], 630, paint); //ここがエラー 44 45 } 46} 47
エラーメッセージ(activity_next.xml):
java.lang.NullPointerException
at com.example.zd2565.testchart20171204_2.TestView.onDraw_Original(TestView.java:53)
at com.example.zd2565.testchart20171204_2.TestView.onDraw(TestView.java)
at android.view.View.draw(View.java:17071)
at android.view.View.draw(View.java:16979)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3764)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.draw(View.java:16977)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3764)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.draw(View.java:16977)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3764)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)
at android.view.ViewGroup.drawChild(ViewGroup.java:3764)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550)
at android.view.View.draw(View.java:17074)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:401)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:539)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:422)
at com.android.layoutlib.bridge.BridgeRenderSession.render(BridgeRenderSession.java:104)
at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:154)
at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:136)
at com.android.tools.idea.rendering.RenderTask.lambda$renderInner$3(RenderTask.java:752)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/07 06:16
2017/12/07 13:33
2017/12/11 00:11