[英]Unfortunately <app> has stopped in android emulator error. How to solve this?
[英]How to solve the error : Unfortunately <my app> has stopped
我是Android編程的新手。 我正在制作的第一個應用程序遇到一些問題。 每次我運行該應用程序時,都會在我的手機(用於測試和調試應用程序)上彈出一條消息,提示“不幸的是,MyNewApp3已停止”。 此錯誤甚至都無法打開我的應用。 我該如何解決這個問題?
這是我的代碼:
package newapp.com.bipl.mynewapp3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class Page2 extends AppCompatActivity {
RadioGroup Rg;
RadioButton B;
RadioButton O;
RadioButton H;
EditText Dec;
TextView Ans;
int Num;
String Result;
int b;
int c;
char z;
String s;
String d;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page2);
Toast.makeText(getBaseContext(),"Successful Login",Toast.LENGTH_LONG).show();
Rg = (RadioGroup) findViewById(R.id.RGroup);
B = (RadioButton) findViewById(R.id.Binary_rb);
O = (RadioButton) findViewById(R.id.Octal_rb);
H = (RadioButton) findViewById(R.id.Hexa_rb);
Dec = (EditText) findViewById(R.id.NumEntry_txt);
Ans = (TextView) findViewById(R.id.Answer_lbl);
Num = Integer.parseInt(Dec.getText().toString());
//Num = 161;
if(B.isSelected())
Binary(Num);
if(O.isSelected())
Octal(Num);
if (H.isSelected())
Hexal(Num);
}
/* public void Conversion(){
if(B.isSelected())
Binary(Num);
if(O.isSelected())
Octal(Num);
if (H.isSelected())
Hexal(Num);
}*/
public void Binary(int a){
while(b > 0){
c = a % 2;
b = a/2;
d = "" + c;
s = d.concat(s);
a = b;
}
Result = s;
Toast.makeText(getBaseContext(), "" + Result, Toast.LENGTH_SHORT).show();
Ans.setText("" + Result);
}
public void Octal(int a){
while(b > 0){
c = a % 8;
b = a/8;
d = "" + c;
s = d.concat(s);
a = b;
}
Result = s;
Toast.makeText(getBaseContext(), "" + Result, Toast.LENGTH_SHORT).show();
Ans.setText("" + Result);
}
public void Hexal(int a){
while(b > 0){
c = a % 16;
b = a/16;
if(c>9){
switch (c){
case 10 : z = 'A';
break;
case 11 : z = 'B';
break;
case 12 : z = 'C';
break;
case 13 : z = 'D';
break;
case 14 : z = 'E';
break;
case 15 : z = 'F';
break;
}
d = "" + z;
}
else
d = "" + c;
s = d.concat(s);
a = b;
}
Result = s;
Toast.makeText(getBaseContext(), "" + Result, Toast.LENGTH_SHORT).show();
Ans.setText("" + Result);
}
}
我的LogCat輸出(在看到人們建議其他人放置Logcat輸出之后,我發布了此內容;我不知道它的用途):
01-12 11:45:52.559 15441-15441 / newapp.com.bipl.mynewapp3 V / TextView:stopSelectionActionMode()01-12 11:45:52.572 15441-15441 / newapp.com.bipl.mynewapp3 D / AndroidRuntime:Shutting VM 01-12 11:45:52.573 15441-15441 / newapp.com.bipl.mynewapp3 E / AndroidRuntime:致命例外:主進程:newapp.com.bipl.mynewapp3,PID:15441 java.lang.RuntimeException:無法開始活動ComponentInfo {newapp.com.bipl.mynewapp3 / newapp.com.bipl.mynewapp3.Page2}:java.lang.NumberFormatException:無效的int:“”位於android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2521) android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1470)上的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)在android.app.ActivityThread.access $ 800(ActivityThread.java:178)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1470)在android。 os.Handler.dispatchMessage(Handler.java:111)位於android.os.Looper.loop(Looper.java:194)位於android.app.ActivityThread.main(ActivityThread.java:5631)在java.lang.reflect.Method .invoke(Nativ e方法),位於com.android.internal.os處com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:959)處的java.lang.reflect.Method.invoke(Method.java:372)。 ZygoteInit.main(ZygoteInit.java:754)原因:java.lang.NumberFormatException:無效的int:“”,位於java.lang.Integer.invalidInt(Integer.java:138),位於java.lang.Integer.parseInt(Integer。 java:358)at java.lang.Integer.parseInt(Integer.java:334)at newapp.com.bipl.mynewapp3.Page2.onCreate(Page2.java:41)at android.app.Activity.performCreate(Activity.java :6092)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)在android android.os.Handler.dispatchMessage(Handler.java:111)上的.app.ActivityThread.access $ 800(ActivityThread.java:178)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1470)在android.os .Looper.loop(Looper.jav a:194),位於android.app.ActivityThread.main(ActivityThread.java:5631),位於java.lang.reflect.Method.invoke(本機方法),位於java.lang.reflect.Method.invoke(Method.java:372)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:959)處com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)01-12 11:50:52.616 15441- 15441 / newapp.com.bipl.mynewapp3 I / Process:正在發送信號。 PID:15441 SIG:9
每次顯示或使用任何變量進行轉換時,您都必須檢查null,這是因為您沒有檢查字符串是否為null,在您的情況下為null。 所以執行
if(Dec != null){
if(Dec.getText() != null){
Num = Integer.parseInt(Dec.getText().toString());
}
}
它應該工作正常!
聲明並為“ Num”變量分配零,如下所示
int Num = 0;
然后首先以字符串格式獲取您的EditText值,然后解析
String mynum = Dec.getText().toString();
Num = Integer.parseInt(mynum);
在這里,您可以檢查myNum
是否為null。
您可以添加try-catch將String轉換為int。 如果它得到無法轉換的空字符串之類的信息,則不會崩潰。
try
{
if(str != null){
Num = Integer.parseInt(Dec.getText().toString());
}
else{
Num = 0;
}
}
catch (NumberFormatException e)
{
Num = 0;
}
該實現將停止因任何錯誤的輸入轉換而崩潰。
當在onCreate()方法中初始化EditText時,沒有輸入任何內容,因此Dec.getText().toString
為""
,當然,您無法調用Integer.parseInt("")
從而得到NumberFormatException
。
因此,您應該在parseInt()
之前添加檢查
if (!"".equal(Dec.getText().toString)){
Num = Integer.parseInt(Dec.getText().toString());
}
問題是,您嘗試在應用啟動后立即使用parse Int將空字符串轉換為整數。 有關更多信息,請參見此stackoverflow帖子 。 因此,您只需檢查editText是否返回空字符串,或者也可以嘗試捕獲異常。
logcat也是非常有用的,它可以幫助您確定導致問題的代碼的哪一部分。 檢查logcat-
Caused by: java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:334)
at newapp.com.bipl.mynewapp3.Page2.onCreate(Page2.java:41)
它清楚地告訴您parseInt方法引發異常,然后單擊下面一行中的41,甚至將您帶到那段代碼。
newapp.com.bipl.mynewapp3.Page2.onCreate(Page2.java:41)
試試這個代碼-
package newapp.com.bipl.mynewapp3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class Page2 extends AppCompatActivity {
RadioGroup Rg;
RadioButton B;
RadioButton O;
RadioButton H;
EditText Dec;
TextView Ans;
int Num;
String Result;
int b;
int c;
char z;
String s;
String d;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page2);
Toast.makeText(getBaseContext(),"Successful Login",Toast.LENGTH_LONG).show();
Rg = (RadioGroup) findViewById(R.id.RGroup);
B = (RadioButton) findViewById(R.id.Binary_rb);
O = (RadioButton) findViewById(R.id.Octal_rb);
H = (RadioButton) findViewById(R.id.Hexa_rb);
Dec = (EditText) findViewById(R.id.NumEntry_txt);
Ans = (TextView) findViewById(R.id.Answer_lbl);
//Num = 161;
if ("".equals(Dec.getText().toString()))
{ if(B.isSelected() || O.isSelected() || H.isSelected())
Ans.setText("Empty field"); }
else{if(B.isSelected())
Binary(Num);
if(O.isSelected())
Octal(Num);
if (H.isSelected())
Hexal(Num);}
}
/* public void Conversion(){
if(B.isSelected())
Binary(Num);
if(O.isSelected())
Octal(Num);
if (H.isSelected())
Hexal(Num);
}*/
public void Binary(int a){
Num = Integer.parseInt(Dec.getText().toString());
while(b > 0){
c = a % 2;
b = a/2;
d = "" + c;
s = d.concat(s);
a = b;
}
Result = s;
Toast.makeText(getBaseContext(), "" + Result, Toast.LENGTH_SHORT).show();
Ans.setText("" + Result);
}
public void Octal(int a){
Num = Integer.parseInt(Dec.getText().toString());
while(b > 0){
c = a % 8;
b = a/8;
d = "" + c;
s = d.concat(s);
a = b;
}
Result = s;
Toast.makeText(getBaseContext(), "" + Result, Toast.LENGTH_SHORT).show();
Ans.setText("" + Result);
}
public void Hexal(int a){
Num = Integer.parseInt(Dec.getText().toString());
while(b > 0){
c = a % 16;
b = a/16;
if(c>9){
switch (c){
case 10 : z = 'A';
break;
case 11 : z = 'B';
break;
case 12 : z = 'C';
break;
case 13 : z = 'D';
break;
case 14 : z = 'E';
break;
case 15 : z = 'F';
break;
}
d = "" + z;
}
else
d = "" + c;
s = d.concat(s);
a = b;
}
Result = s;
Toast.makeText(getBaseContext(), "" + Result, Toast.LENGTH_SHORT).show();
Ans.setText("" + Result);
}
}
檢查Null
異常:
if (TextUtils.isEmpty(Dec.getText().toString())){
//value is empty
}else {
Num = Integer.parseInt(Dec.getText().toString());
}
if(B.isSelected())
Binary(Num);
if(O.isSelected())
Octal(Num);
if (H.isSelected())
Hexal(Num);
......
.............
您必須創建一些按鈕或某些動作偵聽器(例如edittext ontextchangeListener),然后必須將代碼如下所示:
如果您使用按鈕:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(!Dec.getText.toString.equals(""))
Num = Integer.parseInt(Dec.getText().toString());
}
});
如果您正在使用edittext textchangelistener:
TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 0)
Num = Integer.parseInt(s.getText().toString());
}
};
您的代碼的問題是,在解析時,edittext沒有任何值。 因此要解析它,ParseInt需要一些值。 因此,更好的方法是采取一些按鈕操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.