Hi i'm new to android development.... I'm writing an app that will allow the user to enter values and they will be used to plot on a chart. The last few days I have been stuck on a particular problem and can't seem to get over it. The user will input 2 values and from these 3 values will be calculated and passed to an inner class to be plotted on the chart. These values are of the TextView form. I know most of the code works as i have been testing it, and i'm pretty sure that the error has something to do with the TextView values. Below is the code used for the calculations and drawing the chart.
package com.example.ballanimation;
import java.math.BigDecimal;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class calculations extends Activity {
EditText firstVal, secondVal;
TextView resultA, resultB, resultC;
Button button3;
BigDecimal firstNum, secNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.calculations_page);
button3 = (Button) findViewById(R.id.button3);
firstVal = (EditText) findViewById(R.id.editTXT1);
secondVal = (EditText) findViewById(R.id.editTXT2);
resultA = (TextView) findViewById(R.id.result1);
resultB = (TextView) findViewById(R.id.result2);
resultC = (TextView) findViewById(R.id.result3);
button3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
firstNum = new BigDecimal(firstVal.getText().toString());
secNum = new BigDecimal(secondVal.getText().toString());
resultA.setText(firstNum.add(secNum).toString());
resultB.setText(firstNum.subtract(secNum).toString());
resultC.setText(firstNum.multiply(secNum).toString());
}
});
}
class TestA1 extends View{
public TestA1(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public void onDraw(Canvas canvas){
super.onDraw(canvas);
String TestA = resultA.getText().toString();
String TestB = resultB.getText().toString();
String TestC = resultC.getText().toString();
int A = Integer.parseInt(TestA);
int B = Integer.parseInt(TestB);
int C = Integer.parseInt(TestC);
Paint red = new Paint();
red.setColor(Color.RED);
red.setStyle(Paint.Style.STROKE);
Paint black = new Paint();
black.setColor(Color.BLACK);
black.setStyle(Paint.Style.STROKE);
canvas.drawCircle(A, B, C, black);
canvas.drawCircle(canvas.getWidth()*1/2, canvas.getHeight()*3/8, canvas.getWidth()*475/1000, black);
canvas.drawCircle(canvas.getWidth()*5/8, canvas.getWidth()*5/8, canvas.getWidth()*349/1000, black);
canvas.drawCircle(canvas.getWidth()*6/8, canvas.getWidth()*5/8, canvas.getWidth()*228/1000, black);
canvas.drawCircle(canvas.getWidth()*7/8, canvas.getWidth()*5/8, canvas.getWidth()*103/1000, black);
canvas.drawLine((canvas.getWidth()-canvas.getWidth()) + 10, (canvas.getHeight()*3)/8, canvas.getWidth() - 10, (canvas.getHeight()*3)/8, black);
float a, b, c, d, e, f, g, h, i, j, k, l;
a = 90; //degrees
b = 90;
c = 90;
d = 50;
e = 90;
f = 134;
g = -90;
h = -90;
i = -90;
j = -50;
k = -90;
l = -134;
RectF arc0 = new RectF();
RectF arc1 = new RectF();
RectF arc2 = new RectF();
RectF arc3 = new RectF();
RectF arc4 = new RectF();
RectF arc5 = new RectF();
/*left The X coordinate of the left side of the rectangle
top The Y coordinate of the top of the rectangle
right The X coordinate of the right side of the rectangle
bottom The Y coordinate of the bottom of the rectangle */
arc0.set(canvas.getWidth()*1/2, canvas.getHeight()*-139/700, canvas.getWidth()*100/69, canvas.getHeight()*3/8);
arc1.set(canvas.getWidth()*-6/112, canvas.getHeight()*-80/100, canvas.getWidth()*195/100, canvas.getHeight()*72/192);
arc2.set(canvas.getWidth()*7/10, canvas.getHeight()*70/700, canvas.getWidth()*125/100, canvas.getHeight()*3/8);
arc3.set(canvas.getWidth()/2, canvas.getHeight()*3/8, canvas.getWidth()*100/69, canvas.getHeight()*91/96);
arc4.set(canvas.getWidth()*-8/112, canvas.getHeight()*3/8, canvas.getWidth()*195/100, canvas.getHeight()*150/100);
arc5.set(canvas.getWidth()*7/10, canvas.getHeight()*3/8, canvas.getWidth()*125/100, canvas.getHeight()*65/100);
/*oval The bounds of oval used to define the shape and size of the arc
startAngle Starting angle (in degrees) where the arc begins
sweepAngle Sweep angle (in degrees) measured clockwise
useCenter If true, include the center of the oval in the arc, and close it if it is being stroked. This will draw a wedge
paint The paint used to draw the arc */
canvas.drawArc(arc0, a, b, false, red);
canvas.drawArc(arc1, c, d, false, red);
canvas.drawArc(arc2, e, f, false, red);
canvas.drawArc(arc3, g, h, false, red);
canvas.drawArc(arc4, i, j, false, red);
canvas.drawArc(arc5, k, l, false, red);
}
}
}
The logcat error's i am getting are:
01-04 13:08:46.764: E/Trace(918): error opening trace file: No such file or directory (2)
01-04 13:08:47.593: D/dalvikvm(918): GC_FOR_ALLOC freed 59K, 3% free 8053K/8259K, paused 105ms, total 108ms
01-04 13:08:47.604: I/dalvikvm-heap(918): Grow heap (frag case) to 8.305MB for 412064-byte allocation
01-04 13:08:47.703: D/dalvikvm(918): GC_FOR_ALLOC freed 1K, 3% free 8454K/8711K, paused 61ms, total 61ms
01-04 13:08:47.764: D/dalvikvm(918): GC_FOR_ALLOC freed 0K, 3% free 8454K/8711K, paused 57ms, total 57ms
01-04 13:08:47.794: I/dalvikvm-heap(918): Grow heap (frag case) to 9.189MB for 928216-byte allocation
01-04 13:08:47.964: D/dalvikvm(918): GC_CONCURRENT freed 0K, 4% free 9361K/9671K, paused 98ms+6ms, total 168ms
01-04 13:08:47.964: D/dalvikvm(918): WAIT_FOR_CONCURRENT_GC blocked 11ms
01-04 13:08:48.344: I/Choreographer(918): Skipped 36 frames! The application may be doing too much work on its main thread.
01-04 13:08:48.374: D/gralloc_goldfish(918): Emulator without GPU emulation detected.
01-04 13:08:50.025: I/Choreographer(918): Skipped 46 frames! The application may be doing too much work on its main thread.
01-04 13:08:56.844: I/Choreographer(918): Skipped 38 frames! The application may be doing too much work on its main thread.
01-04 13:08:57.514: D/AndroidRuntime(918): Shutting down VM
01-04 13:08:57.514: W/dalvikvm(918): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
01-04 13:08:57.614: E/AndroidRuntime(918): FATAL EXCEPTION: main
01-04 13:08:57.614: E/AndroidRuntime(918): java.lang.NullPointerException
01-04 13:08:57.614: E/AndroidRuntime(918): at com.example.ballanimation.calculations$TestA1.onDraw(calculations.java:68)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.View.draw(View.java:13458)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.View.draw(View.java:13342)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.View.draw(View.java:13461)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.widget.FrameLayout.draw(FrameLayout.java:467)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.View.draw(View.java:13342)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.View.draw(View.java:13340)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewGroup.drawChild(ViewGroup.java:2929)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.View.draw(View.java:13461)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.widget.FrameLayout.draw(FrameLayout.java:467)
01-04 13:08:57.614: E/AndroidRuntime(918): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2183)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2256)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2151)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2019)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1830)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.Choreographer.doFrame(Choreographer.java:525)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.os.Handler.handleCallback(Handler.java:615)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.os.Handler.dispatchMessage(Handler.java:92)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.os.Looper.loop(Looper.java:137)
01-04 13:08:57.614: E/AndroidRuntime(918): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-04 13:08:57.614: E/AndroidRuntime(918): at java.lang.reflect.Method.invokeNative(Native Method)
01-04 13:08:57.614: E/AndroidRuntime(918): at java.lang.reflect.Method.invoke(Method.java:511)
01-04 13:08:57.614: E/AndroidRuntime(918): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-04 13:08:57.614: E/AndroidRuntime(918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-04 13:08:57.614: E/AndroidRuntime(918): at dalvik.system.NativeStart.main(Native Method)
01-04 13:08:59.854: I/Process(918): Sending signal. PID: 918 SIG: 9
01-04 13:09:13.584: E/Trace(960): error opening trace file: No such file or directory (2)
01-04 13:09:14.364: D/dalvikvm(960): GC_FOR_ALLOC freed 63K, 3% free 8053K/8259K, paused 73ms, total 76ms
01-04 13:09:14.364: I/dalvikvm-heap(960): Grow heap (frag case) to 8.305MB for 412064-byte allocation
01-04 13:09:14.445: D/dalvikvm(960): GC_FOR_ALLOC freed 1K, 3% free 8454K/8711K, paused 42ms, total 42ms
01-04 13:09:14.494: D/dalvikvm(960): GC_FOR_ALLOC freed 0K, 3% free 8454K/8711K, paused 48ms, total 48ms
01-04 13:09:14.514: I/dalvikvm-heap(960): Grow heap (frag case) to 9.189MB for 928216-byte allocation
01-04 13:09:14.684: D/dalvikvm(960): GC_CONCURRENT freed 0K, 4% free 9361K/9671K, paused 80ms+18ms, total 162ms
01-04 13:09:15.024: D/gralloc_goldfish(960): Emulator without GPU emulation detected.
01-04 13:09:16.874: I/Choreographer(960): Skipped 94 frames! The application may be doing too much work on its main thread.
01-04 13:09:20.643: I/Choreographer(960): Skipped 31 frames! The application may be doing too much work on its main thread.
01-04 13:09:32.394: W/ResourceType(960): No package identifier when getting value for resource number 0x00000064
01-04 13:09:32.394: D/AndroidRuntime(960): Shutting down VM
01-04 13:09:32.394: W/dalvikvm(960): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
01-04 13:09:32.454: E/AndroidRuntime(960): FATAL EXCEPTION: main
01-04 13:09:32.454: E/AndroidRuntime(960): android.content.res.Resources$NotFoundException: String resource ID #0x64
01-04 13:09:32.454: E/AndroidRuntime(960): at android.content.res.Resources.getText(Resources.java:229)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.widget.TextView.setText(TextView.java:3620)
01-04 13:09:32.454: E/AndroidRuntime(960): at com.example.ballanimation.calculations$1.onClick(calculations.java:49)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.view.View.performClick(View.java:4084)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.view.View$PerformClick.run(View.java:16966)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.os.Handler.handleCallback(Handler.java:615)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.os.Handler.dispatchMessage(Handler.java:92)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.os.Looper.loop(Looper.java:137)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-04 13:09:32.454: E/AndroidRuntime(960): at java.lang.reflect.Method.invokeNative(Native Method)
01-04 13:09:32.454: E/AndroidRuntime(960): at java.lang.reflect.Method.invoke(Method.java:511)
01-04 13:09:32.454: E/AndroidRuntime(960): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-04 13:09:32.454: E/AndroidRuntime(960): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-04 13:09:32.454: E/AndroidRuntime(960): at dalvik.system.NativeStart.main(Native Method)
01-04 13:09:34.894: I/Process(960): Sending signal. PID: 960 SIG: 9
I'm sorry if this is a lot of information, but i'm really stuck on this problem. Any help would be greatly appreciated.
Regards P
Since View.getText()
never returns null
, only String resultA
, resultB
or resultC
can be null
:
are R.id.result1
, R.id.result2
, R.id.result3
declared inside R.layout.calculations_page
?
I think problem lies here
android.content.res.Resources$NotFoundException: String resource ID #0x64
01-04 13:09:32.454: E/AndroidRuntime(960): at android.content.res.Resources.getText(Resources.java:229)
01-04 13:09:32.454: E/AndroidRuntime(960): at android.widget.TextView.setText(TextView.java:3620)
01-04 13:09:32.454: E/AndroidRuntime(960): at **com.example.ballanimation.calculations$1.onClick(calculations.java:49)**
Just for experiment Change your lines
resultA.setText(firstNum.add(secNum).toString());
resultB.setText(firstNum.subtract(secNum).toString());
resultC.setText(firstNum.multiply(secNum).toString());
To
resultA.setText("234234"));
resultB.setText("123123");
resultC.setText("1232122");
ANd see the difference
User contributions licensed under CC BY-SA 3.0