2017-08-18 8 views
-2

Lorsque je passe entre deux de mes activités, cela fonctionne très bien, ils changent sans problème. Mais après avoir changé plusieurs fois, cela ne fonctionne pas et l'application plante. Même après avoir fermé et ouvert l'application, cela ne fonctionne toujours pas. Quel est le problème avec mon application.Here est le fichier Activité principale:App s'écraser lors de la commutation des activités avec rapport d'accident

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; 
} 


} 

journal des blocages:

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 = [email protected] 
08-17 23:57:07.310 21715-21715/com.example.navjeevenmann.mytycoon V/BoostFramework: BoostFramework() : mPerf = [email protected] 
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 

S'il vous plaît & Merci.

+0

Pouvez-vous s'il vous plaît diviser votre activ ities dans deux bloc de code séparé – MJK

+1

exception est auto-explicative ** chaîne "android.widget.ImageButton {8f1bae8 VFED..C .. ...... ID 97,1733-209,1845 # 7f0d0081 app: id/singleclick} "n'est pas un entier ** avez-vous au moins lu une exception? – Selvin

+0

Montrez votre singlevalue.txt " – DEADMC

Répondre

0

Eh bien votre erreur est dans MainActivity à l'intérieur de la méthode readCountFromFile().

Le problème est ici

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

Depuis résultat peut être vide ou quelque chose

Integer.parseInt(result); 

peut causer NumberFormatException

Donc, essayez juste pour attraper

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; 
} 
0

A en juger par ce journal

java.lang.NumberFormatException: For input string: 
"android.widget.ImageButton{8f1bae8 VFED..C.. ......ID 97,1733- 
209,1845 #7f0d0081 app:id/singleclick}" 

Je pense que vous avez un problème avec writeSingleToFile() et readSingleFromFile().

Dans writeSingleToFile, vous appelez String.valueof(singleclick). Cela finira par appeler la méthode toString() de la classe ImageButton. Ensuite, dans readSingleFromFile() vous essayez d'analyser cette valeur à un int, qui échoue.

Je pense que vous devez réviser votre logique et vérifier ce que vous essayez d'économiser.

0

Vous croyez que valeur lue à partir du fichier est toujours un entier

single = Integer.parseInt(result); 

Mais ce n'est pas. Par conséquent, il lance une exception:

java.lang.NumberFormatException: For input string: "android.widget.ImageButton{8f1bae8 VFED..C.. ......ID 97,1733-209,1845 #7f0d0081 app:id/singleclick}" 

Regardez, il tente de convertir cette chaîne int:

android.widget.ImageButton {8f1bae8 VFED..C .. ...... ID 97,1733-209,1845 # 7f0d0081 app: id/singleclick}

Vous devez vérifier votre logique et écrire dans le fichier la valeur voulue. Quoi qu'il en soit, lorsque vous lisez quelque chose à partir du stockage "à distance", vous devez vérifier si elle est éligible pour vous. En outre, vous devez développer votre logique de telle sorte qu'elle fonctionne même si la valeur que vous lisez dans le fichier est inattendue.

Vous pouvez essayer d'envelopper Integer.parseInt (résultat); dans try/catch et traiter correctement une exception dans la section catch, par exemple, vous pouvez retourner une valeur par défaut qui convient à votre logique.