Android 使用崩溃报告切换活动时应用程序崩溃

Android 使用崩溃报告切换活动时应用程序崩溃,android,crash,crash-reports,Android,Crash,Crash Reports,当我在两个活动之间切换时,效果很好,它们切换时没有问题。但是在切换了几次之后,它就不工作了,应用程序崩溃了。即使我关闭并打开了应用程序,它仍然不工作。我的应用程序有什么问题。以下是主要活动文件: package com.example.navjeevenmann.mytycoon; import android.content.Context; import android.content.Intent; import android.os.Bundle; import androi

当我在两个活动之间切换时,效果很好,它们切换时没有问题。但是在切换了几次之后,它就不工作了,应用程序崩溃了。即使我关闭并打开了应用程序,它仍然不工作。我的应用程序有什么问题。以下是主要活动文件:

 package com.example.navjeevenmann.mytycoon;

 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.View;
 import android.widget.ImageButton;
 import android.widget.TextView;

 import java.io.BufferedReader;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;

 import static com.example.navjeevenmann.mytycoon.R.id.textView;


public class MainActivity extends AppCompatActivity {
private ImageButton myButton;
private int Counter;
private ImageButton autoclick;
private TextView myTextView;
Handler handler = new Handler();
private int add;
private TextView myAddView;
private ImageButton singleclick;
private int Singleadd = 1;
private ImageButton money;
private boolean[] array;

@Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_main);
    getSupportActionBar().hide();
    super.onCreate(savedInstanceState);
    Bundle bundle = getIntent().getExtras();
    Counter = readCountFromFile();
    add = readAddFromFile();
    Singleadd=readSingleFromFile();
    if(Singleadd==0){
        Singleadd=1;
    }

    if (bundle != null) {
        if (bundle.containsKey("Count")) {
            Counter = bundle.getInt("Count");
        }
        if (bundle.containsKey("Add")) {
            add = bundle.getInt("Add");
        }
        if (bundle.containsKey("Single")) {
            Singleadd = bundle.getInt("Single");
        }

    }


    money = (ImageButton) findViewById(R.id.imageButton2);
    myButton = (ImageButton) findViewById(R.id.button);
    autoclick = (ImageButton) findViewById(R.id.autoclick);
    singleclick = (ImageButton) findViewById(R.id.singleclick);
    myTextView = (TextView) findViewById(textView);
    myAddView = (TextView) findViewById(R.id.textView2);
    myButton.setBackgroundColor(0);
    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Counter = ButtonCounter(Counter);
        }
    });
    autoclick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
            intent.putExtra("Count", Counter);
            intent.putExtra("Add", add);
            intent.putExtra("Single", Singleadd);

            startActivity(intent);
        }

    });

    singleclick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);
            intent.putExtra("Count", Counter);
            intent.putExtra("Single", Singleadd);
            intent.putExtra("Add", add);
            startActivity(intent);
        }
    });

}

public void onStop() {
    super.onStop();
    writeCounttofile();
    writeAddtofile();
    writeSingletofile();
}


public void onResume() {
    super.onResume();

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Counter = AutoCounter(Counter, add);
            handler.postDelayed(this, 1000);
        }
    }, 1000);

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Display(Counter, add);
            handler.postDelayed(this, 1);
        }
    }, 50);
}


public int ButtonCounter(int Counter) {
    Counter += Singleadd;
    return Counter;
}

public int AutoCounter(int Counter, int add) {
    Counter = Counter + add;
    return Counter;
}

public void Display(int Counter, int add) {
    String money = String.valueOf(Counter);
    myTextView.setText(":" + money);
    myAddView.setText("$" + add + "/Per Second");

}

public void writeCounttofile() {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("countvalue.txt", Context.MODE_PRIVATE));
        outputStreamWriter.write(String.valueOf(Counter));
        outputStreamWriter.close();
    } catch (IOException e) {
        Log.v("MyActivity", e.toString());
    }
}


private int readCountFromFile() {

    String result = "";
    int countervalue = 0;
    try {

        InputStream inputStream = openFileInput("countvalue.txt");

        if (inputStream != null) {

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String tempString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((tempString = bufferedReader.readLine()) != null) {

                stringBuilder.append(tempString);

            }

            inputStream.close();

            result = stringBuilder.toString();
            countervalue = Integer.parseInt(result);

        }


    } catch (FileNotFoundException e) {
        Log.v("MyActivity", "File not found" + e.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return countervalue;
}

public void writeAddtofile() {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("addvalue.txt", Context.MODE_PRIVATE));
        outputStreamWriter.write(String.valueOf(add));
        outputStreamWriter.close();
    } catch (IOException e) {
        Log.v("MyActivity", e.toString());
    }
}


private int readAddFromFile() {

    String result = "";
    int add = 0;
    try {

        InputStream inputStream = openFileInput("addvalue.txt");

        if (inputStream != null) {

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String tempString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((tempString = bufferedReader.readLine()) != null) {

                stringBuilder.append(tempString);

            }

            inputStream.close();

            result = stringBuilder.toString();
            add = Integer.parseInt(result);

        }


    } catch (FileNotFoundException e) {
        Log.v("MyActivity", "File not found" + e.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return add;
}

public void writeSingletofile() {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("singlevalue.txt", Context.MODE_PRIVATE));
        outputStreamWriter.write(String.valueOf(singleclick));
        outputStreamWriter.close();
    } catch (IOException e) {
        Log.v("MyActivity", e.toString());
    }
}


private  int readSingleFromFile() {

    String result = "";
    int single = 1;
    try {

        InputStream inputStream = openFileInput("singlevalue.txt");

        if (inputStream != null) {

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String tempString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((tempString = bufferedReader.readLine()) != null) {

                stringBuilder.append(tempString);

            }

            inputStream.close();

            result = stringBuilder.toString();
            single = Integer.parseInt(result);

        }


    } catch (FileNotFoundException e) {
        Log.v("MyActivity", "File not found" + e.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return single;
}


 }
事故日志:

08-17 23:57:07.124 21715-21715/? I/art: Late-enabling -Xcheck:jni
08-17 23:57:07.226 21715-21715/com.example.navjeevenmann.mytycoon       
W/System: ClassLoader referenced unknown path:/data/app/com.example.navjeevenmann.mytycoon-1/lib/arm64
08-17 23:57:07.236 21715-21715/com.example.navjeevenmann.mytycoon I/InstantRun: starting instant run server: is main process
08-17 23:57:07.287 21715-21715/com.example.navjeevenmann.mytycoon W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
08-17 23:57:07.308 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: mAcquireFunc method = public int com.qualcomm.qti.Performance.perfLockAcquire(int,int[])
08-17 23:57:07.308 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: mReleaseFunc method = public int com.qualcomm.qti.Performance.perfLockRelease()
08-17 23:57:07.308 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: mAcquireTouchFunc method = public int com.qualcomm.qti.Performance.perfLockAcquireTouch(android.view.MotionEvent,android.util.DisplayMetrics,int,int[])
08-17 23:57:07.308 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: mIOPStart method = public int com.qualcomm.qti.Performance.perfIOPrefetchStart(int,java.lang.String)
08-17 23:57:07.308 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: mIOPStop method = public int com.qualcomm.qti.Performance.perfIOPrefetchStop()
08-17 23:57:07.310 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@ca25221
08-17 23:57:07.310 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@ca93646
08-17 23:57:07.403 21715-21715/com.example.navjeevenmann.mytycoon D/AndroidRuntime: Shutting down VM
08-17 23:57:07.404 21715-21715/com.example.navjeevenmann.mytycoon E/AndroidRuntime: FATAL EXCEPTION: main 
                                                                               Process: com.example.navjeevenmann.mytycoon, PID: 21715         java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.navjeevenmann.mytycoon/com.example.navjeevenmann.mytycoon.MainActivity}: java.lang.NumberFormatException: For input string: "android.widget.ImageButton{8f1bae8 VFED..C.. ......ID 97,1733-209,1845 #7f0d0081 app:id/singleclick}"
                                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2728)
                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2814)
                                                                                    at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                    at android.os.Looper.loop(Looper.java:154)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:6290)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                                 Caused by: java.lang.NumberFormatException: For input string: "android.widget.ImageButton{8f1bae8 VFED..C.. ......ID 97,1733-209,1845 #7f0d0081 app:id/singleclick}"
                                                                                    at java.lang.Integer.parseInt(Integer.java:521)
                                                                                    at java.lang.Integer.parseInt(Integer.java:556)
                                                                                    at com.example.navjeevenmann.mytycoon.MainActivity.readSingleFromFile(MainActivity.java:282)
                                                                                    at com.example.navjeevenmann.mytycoon.MainActivity.onCreate(MainActivity.java:44)
                                                                                    at android.app.Activity.performCreate(Activity.java:6760)
                                                                                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
                                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2681)
                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2814) 
                                                                                    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527) 
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                    at android.os.Looper.loop(Looper.java:154) 
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:6290) 
                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
 08-17 23:57:07.404 21715-21715/com.example.navjeevenmann.mytycoon D/AppTracker: App Event: crash
 08-17 23:57:07.412 21715-21715/com.example.navjeevenmann.mytycoon I/Process: Sending signal. PID: 21715 SIG: 9
请&谢谢。

根据此日志判断

 java.lang.NumberFormatException: For input string: 
 "android.widget.ImageButton{8f1bae8 VFED..C.. ......ID 97,1733-
 209,1845 #7f0d0081 app:id/singleclick}"
我认为您在writeSingleToFile和readSingleFromFile方面存在问题

在writeSingleToFile中,您正在调用String.valueofsingleclick。这将最终调用ImageButton类的toString方法。然后,在readSingleFromFile中,您试图将该值解析为int,但失败了


我认为您需要修改您的逻辑并仔细检查您试图保存的内容。

您认为从文件中读取的值始终是一个整数

single = Integer.parseInt(result);
但事实并非如此。因此,它抛出一个异常:

java.lang.NumberFormatException: For input string: "android.widget.ImageButton{8f1bae8 VFED..C.. ......ID 97,1733-209,1845 #7f0d0081 app:id/singleclick}"
看,它试图将此字符串转换为int:

android.widget.ImageButton{8f1bae8 VFED..C....ID 971733-2091845 7f0d0081应用程序:ID/singleclick}

您需要检查您的逻辑并将您想要的值写入文件。 无论如何,当您从远程存储读取某些内容时,您需要检查它是否适合您。此外,您还需要开发逻辑,使其能够工作,即使从文件读取的值是意外的


您可以尝试包装Integer.parseIntresult;例如,在try/catch并正确处理catch部分中的异常时,您可以返回一些符合逻辑的默认值。

您的错误在readCountFromFile方法内的MainActivity中

问题就在这里

        result = stringBuilder.toString();
        single = Integer.parseInt(result);
因为结果可以是空的或其他东西

Integer.parseInt(result);
可能导致NumberFormatException

所以试着抓住它

private  int readSingleFromFile() {

String result = "";
int single = 1;
try {

    InputStream inputStream = openFileInput("singlevalue.txt");

    if (inputStream != null) {
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String tempString = "";
        StringBuilder stringBuilder = new StringBuilder();

        while ((tempString = bufferedReader.readLine()) != null) {
            stringBuilder.append(tempString);
        }

        inputStream.close();

        result = stringBuilder.toString();
        single = Integer.parseInt(result);

    }


} catch (FileNotFoundException e) {
    Log.v("MyActivity", "File not found" + e.toString());
} catch (IOException e) {
    e.printStackTrace();
} catch (NumberFormatException() {
  //here you catch and watch the problem
  Log.e("MyActivity", "cant parse string: "+result); 
}
return single;
}

请将您的活动拆分为两个单独的代码块exception是不言自明的字符串android.widget.ImageButton{8f1bae8 VFED..C..ID 971733-2091845 7f0d0081 app:ID/singleclick}不是整数您至少读取了一个异常吗?显示singlevalue.txt