我正在尝试制作这个应用程序来计算你的平均成绩(基于瑞典成绩系统),并且我已经制作了图形布局并在 Eclipse 中编写了我认为正确的 Java 代码,但是当我尝试启动它时在模拟器中它不起作用。应用程序启动,但只是黑屏。这是我的第一个应用程序和我的第一个编程项目,所以我真的不知道我做错了什么。
它应该是三个编辑文本,您可以在其中输入特定等级的分数(我们有三个等级),然后根据等级将分数乘以 10、15 或 20,并且然后除以总点数。我不知道这是否有意义,但最高等级应该是 20(所有 mvgs)。我用 C# 制作了一个类似的应用程序,它可以工作,但我猜当涉及到 android 和 java 时,事情会有所不同。
package com.dlol.gradeaverage;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class GradeaverageActivity extends Activity {
EditText editText1, editText2, editText3;
String gtext, vgtext, mvgtext, str;
Double gpoäng, vgpoäng, mvgpoäng;
Double gvärde, vgvärde, mvgvärde;
Double allapoäng, allavärde;
Double snittbetyg;
Button button1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText1 = (EditText)findViewById(R.id.editText1);
editText2 = (EditText)findViewById(R.id.editText2);
editText3 = (EditText)findViewById(R.id.editText3);
gtext = editText1.getText().toString();
vgtext = editText2.getText().toString();
mvgtext = editText3.getText().toString();
gpoäng = Double.parseDouble(gtext);
vgpoäng = Double.parseDouble(vgtext);
mvgpoäng = Double.parseDouble(mvgtext);
gvärde = gpoäng*10;
vgvärde = vgpoäng*15;
mvgvärde = mvgpoäng*20;
allapoäng = (gpoäng + vgpoäng + mvgpoäng);
allavärde = (gvärde + vgvärde + mvgvärde);
snittbetyg = (allavärde / allapoäng);
str = "Ditt snitt är " + snittbetyg;
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(getBaseContext(), str,
Toast.LENGTH_SHORT).show();
}
});
}}
<?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" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/info_text_G"
android:textSize="16sp">
</TextView>
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text">
</EditText>/
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/info_text_VG"
android:textSize="16sp" />
<EditText
android:id="@+id/editText2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text">
</EditText>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/info_text_MVG"
android:textSize="16sp">
</TextView>
<EditText
android:id="@+id/editText3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text">
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Button" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, GradeaverageActivity!</string>
<string name="app_name">Gradeaverage</string>
<string name="info_text_G">Skriv in antal G-poäng</string>
<string name="info_text_VG">Skriv in antal VG-poäng</string>
<string name="info_text_MVG">Skriv in antal MVG-poäng</string>
<string name="Button">Räkna ut snitt!</string>
</resources>
02-05 17:07:06.184: D/AndroidRuntime(1230):关闭虚拟机 02-05 17:07:06.184: W/dalvikvm(1230): threadid=3: 线程因未捕获的异常而退出 (group=0x4000fe70) 02-05 17:07:06.184:E/AndroidRuntime(1230):未捕获的处理程序:由于未捕获的异常,线程主退出 02-05 17:07:06.194:E/AndroidRuntime(1230):java.lang.RuntimeException:无法启动 Activity ComponentInfo {com.dlol.gradeaverage/com.dlol.gradeaverage.GradeaverageActivity}:java.lang.NumberFormatException: 02-05 17:07:06.194:E/AndroidRuntime(1230):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 02-05 17:07:06.194:E/AndroidRuntime(1230):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 02-05 17:07:06.194: E/AndroidRuntime(1230): 在 android.app.ActivityThread.access$1800(ActivityThread.java:112) 02-05 17:07:06.194: E/AndroidRuntime(1230): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 02-05 17:07:06.194: E/AndroidRuntime(1230): 在 android.os.Handler.dispatchMessage(Handler.java:99) 02-05 17:07:06.194: E/AndroidRuntime(1230): 在 android.os.Looper.loop(Looper.java:123) 02-05 17:07:06.194:E/AndroidRuntime(1230):在android.app.ActivityThread.main(ActivityThread.java:3948) 02-05 17:07:06.194:E/AndroidRuntime(1230):在java.lang.reflect.Method.invokeNative( native 方法) 02-05 17:07:06.194:E/AndroidRuntime(1230):在java.lang.reflect.Method.invoke(Method.java:521) 02-05 17:07:06.194: E/AndroidRuntime(1230): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 02-05 17:07:06.194:E/AndroidRuntime(1230):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 02-05 17:07:06.194:E/AndroidRuntime(1230):在dalvik.system.NativeStart.main( native 方法) 02-05 17:07:06.194:E/AndroidRuntime(1230):引起:java.lang.NumberFormatException: 02-05 17:07:06.194:E/AndroidRuntime(1230):在org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:258) 02-05 17:07:06.194:E/AndroidRuntime(1230):在java.lang.Double.parseDouble(Double.java:323) 02-05 17:07:06.194:E/AndroidRuntime(1230):在com.dlol.gradeaverage.GradeaverageActivity.onCreate(GradeaverageActivity.java:37) 02-05 17:07:06.194:E/AndroidRuntime(1230):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 02-05 17:07:06.194:E/AndroidRuntime(1230):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) 02-05 17:07:06.194: E/AndroidRuntime(1230): ... 11 更多 02-05 17:07:06.225: I/dalvikvm(1230): threadid=7: 对信号 3 使用react 02-05 17:07:06.244:I/dalvikvm(1230):将堆栈跟踪写入“/data/anr/traces.txt” 02-05 17:07:06.344:I/jdwp(1230):从 ADB 接收到文件描述符 24 02-05 17:07:06.354: W/System.err(1230): 无法分派(dispatch) DDM block 46454154: 未定义处理程序 02-05 17:07:06.354: W/System.err(1230): 无法分派(dispatch) DDM block 4d505251: 未定义处理程序
最佳答案
您会得到 NumberFormatException
因为当您创建Activity
时( onCreate()
方法)您已经尝试解析 EditText
中的文本(您有空文本 ""
并尝试将其解析为 Double
将抛出 Exception
)尽管您尚未输入任何数字。您必须将计算成绩的代码移至按钮的 OnCLickListener
上像这样:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText1 = (EditText)findViewById(R.id.editText1);
editText2 = (EditText)findViewById(R.id.editText2);
editText3 = (EditText)findViewById(R.id.editText3);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
gtext = editText1.getText().toString();
vgtext = editText2.getText().toString();
mvgtext = editText3.getText().toString();
gpoäng = Double.parseDouble(gtext);
vgpoäng = Double.parseDouble(vgtext);
mvgpoäng = Double.parseDouble(mvgtext);
gvärde = gpoäng*10;
vgvärde = vgpoäng*15;
mvgvärde = mvgpoäng*20;
allapoäng = (gpoäng + vgpoäng + mvgpoäng);
allavärde = (gvärde + vgvärde + mvgvärde);
snittbetyg = (allavärde / allapoäng);
str = "Ditt snitt är " + snittbetyg;
Toast.makeText(getBaseContext(), str,
Toast.LENGTH_SHORT).show();
}
});
}
关于java - Gradeaverage 应用程序无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149849/