I have several activities in my app. I'd like to start an activity say A from other two separate ones, B and C. From B A starts good, from C it alerts me with ANR advise. Cosidering that:

  1. Activities are all declared in the Manifest
  2. There are no incoerent castings

And this is the activity A that must be opened:

package com.wikibuyers.aforismi;

 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;

 import android.app.Activity;
 import android.content.Intent;
 import android.graphics.drawable.LayerDrawable;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewTreeObserver;
 import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.animation.AlphaAnimation;
 import android.view.animation.Animation;
 import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.Toast;


public class ElencoAforismiActivity extends Activity{

  public final static String EXTRA_MESSAGE = "com.example.provacomunicazionefraactivity.MESSAGE";

   @Override
   public void onCreate(Bundle savedInstanceState) 
   {
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.elecoalfabeticoautori);

  Button bottoneA = (Button)findViewById(R.id.buttonA);
  Button bottoneB = (Button)findViewById(R.id.buttonB);
  Button bottoneC = (Button)findViewById(R.id.buttonC);
  [...]
        Button bottoneX = (Button)findViewById(R.id.buttonX);
  Button bottoneY = (Button)findViewById(R.id.buttonY);
  Button bottoneZ = (Button)findViewById(R.id.buttonZ);
  ImageButton Preferiti = (ImageButton)findViewById(R.id.buttonPreferiti);


  bottoneA.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Button myButton = (Button) findViewById(R.id.buttonA ); 
             Animation anim = new AlphaAnimation(0.0f, 1.0f);// LAMPEGGIO BOTTONE 1
              anim.setDuration(20); //SI PUò CONTROLLARE LA DURATA DEL LAMPEGGIO CON QUESTO PARAMETRO
              anim.setStartOffset(20);
              anim.setRepeatMode(Animation.REVERSE);
              myButton.startAnimation(anim);
              anim.setRepeatCount(5);  
                 String message = "A" ;    

                Intent i = new Intent(getApplicationContext(), LetteraElencoSelezionataActivity.class);
                    i.putExtra(EXTRA_MESSAGE, message);
                   startActivity(i);  
        }
    });

  bottoneB.setOnClickListener(new View.OnClickListener() {

      @Override
        public void onClick(View v) {
            Button myButton = (Button) findViewById(R.id.buttonB ); 
             Animation anim = new AlphaAnimation(0.0f, 1.0f);// LAMPEGGIO BOTTONE 1
              anim.setDuration(20); //SI PUò CONTROLLARE LA DURATA DEL LAMPEGGIO CON QUESTO PARAMETRO
              anim.setStartOffset(20);
              anim.setRepeatMode(Animation.REVERSE);
              myButton.startAnimation(anim);
              anim.setRepeatCount(5);  
         String message = "B" ;    

        Intent i = new Intent(getApplicationContext(), LetteraElencoSelezionataActivity.class);
            i.putExtra(EXTRA_MESSAGE, message);
           startActivity(i);  
        }
    });

  bottoneC.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Button myButton = (Button) findViewById(R.id.buttonC ); 
             Animation anim = new AlphaAnimation(0.0f, 1.0f);// LAMPEGGIO BOTTONE 1

              anim.setDuration(20); //SI PUò CONTROLLARE LA DURATA DEL LAMPEGGIO CON QUESTO PARAMETRO
              anim.setStartOffset(20);
              anim.setRepeatMode(Animation.REVERSE);
              myButton.startAnimation(anim);

              anim.setRepeatCount(5);  

              String message = "C" ;    

                Intent i = new Intent(getApplicationContext(), LetteraElencoSelezionataActivity.class);
                    i.putExtra(EXTRA_MESSAGE, message);
                   startActivity(i);  
        }
    });


 [...omissis]

  Preferiti.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {ImageButton myButton = (ImageButton) findViewById(R.id.buttonPreferiti ); 
             Animation anim = new AlphaAnimation(0.0f, 1.0f);// LAMPEGGIO BOTTONE 1
              anim.setDuration(20); //SI PUò CONTROLLARE LA DURATA DEL LAMPEGGIO CON QUESTO PARAMETRO
              anim.setStartOffset(20);
              anim.setRepeatMode(Animation.REVERSE);
              myButton.startAnimation(anim);
              anim.setRepeatCount(5);  

        Intent i = new Intent(getApplicationContext(),  PreferitiActivity.class);
                //    i.putExtra(EXTRA_MESSAGE, message);
                   startActivity(i);  

        }
    });

      final Button BT1 = (Button)findViewById(R.id.buttonA);
        ViewTreeObserver vto1 = BT1.getViewTreeObserver();
        vto1.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
            @Override
            public void onGlobalLayout() {
                LayerDrawable ld1 = (LayerDrawable)BT1.getBackground();
                ld1.setLayerInset(1,0, 0, 0, BT1.getHeight()/2);}});

     final Button BT2 = (Button)findViewById(R.id.buttonB);
        ViewTreeObserver vto2 = BT2.getViewTreeObserver();
        vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
          @Override
          public void onGlobalLayout() {
                LayerDrawable ld1 = (LayerDrawable)BT2.getBackground();
                ld1.setLayerInset(1,0, 0, 0, BT2.getHeight()/2);}});

     final Button BT3 = (Button)findViewById(R.id.buttonC);
        ViewTreeObserver vto3 = BT3.getViewTreeObserver();
        vto3.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
        @Override
        public void onGlobalLayout() {
            LayerDrawable ld1 = (LayerDrawable)BT3.getBackground();
            ld1.setLayerInset(1,0, 0, 0, BT3.getHeight()/2);}});  

   [.........omissis]
     final Button BT16 = (Button)findViewById(R.id.buttonP);
        ViewTreeObserver vto16 = BT16.getViewTreeObserver();
        vto16.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
        @Override
        public void onGlobalLayout() {
        LayerDrawable ld1 = (LayerDrawable)BT16.getBackground();
        ld1.setLayerInset(1,0, 0, 0, BT16.getHeight()/2);}});

}

} The LogCat is this: (excuse me but i never used it before)

 09-09 17:02:54.160: W/dalvikvm(21991): threadid=1: thread exiting with uncaught 
     exception         (group=0x41476930)
09-09 17:02:54.223: E/AndroidRuntime(21991): FATAL EXCEPTION: main
09-09 17:02:54.223: E/AndroidRuntime(21991): java.lang.RuntimeException: Unable to
start           activity ComponentInfo     
  {com.wikibuyers.aforismi/com.wikibuyers.
                                        java.lang.ArrayIndexOutOfBoundsException: length=48; 
 index=48
 09-09 17:02:54.223: E/AndroidRuntime(21991):   at   
 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
 09-09 17:02:54.223: E/AndroidRuntime(21991):   at
 android.app.ActivityThread.handleLaunchActivity  
  (ActivityThread.java:2230)
  09-09 17:02:54.223: E/AndroidRuntime(21991):
at android.app.ActivityThread.access$600(ActivityThread.java:141)
   09-09 17:02:54.223: E/AndroidRuntime(21991):     
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at android.os.Handler.dispatchMessage 
(Handler.java:99)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at android.os.Looper.loop(Looper.java:137)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at android.app.ActivityThread.main  
(ActivityThread.java:5039)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at java.lang.reflect.Method.invokeNative(Native  
Method)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at java.lang.reflect.Method.invoke  
(Method.java:511)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at   
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at com.android.internal.os.ZygoteInit.main  
(ZygoteInit.java:560)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at dalvik.system.NativeStart.main(Native Method)
09-09 17:02:54.223: E/AndroidRuntime(21991): Caused by:   
java.lang.ArrayIndexOutOfBoundsException: length=48; index=48
09-09 17:02:54.223: E/AndroidRuntime(21991):    at   
com.wikibuyers.aforismi.RandomActivity.onCreate  
(RandomActivity.java:1022)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at android.app.Activity.performCreate 
(Activity.java:5104)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at   
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-09 17:02:54.223: E/AndroidRuntime(21991):    at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-09 17:02:54.223: E/AndroidRuntime(21991):    ... 11 more
09-09 17:03:32.918: D/AndroidRuntime(22223): Shutting down VM
09-09 17:03:32.918: W/dalvikvm(22223): threadid=1: thread exiting with uncaught exception   
(group=0x41476930)
09-09 17:03:32.942: E/AndroidRuntime(22223): FATAL EXCEPTION: main
09-09 17:03:32.942: E/AndroidRuntime(22223): java.lang.RuntimeException: Unable to start   
activity ComponentInfo{com.wikibuyers.aforismi/com.wikibuyers.aforismi.PreferitiActivity}:   
java.lang.NullPointerException
09-09 17:03:32.942: E/AndroidRuntime(22223):    at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at   
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2230)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.app.ActivityThread.access$600 
(ActivityThread.java:141)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.app.ActivityThread$H.handleMessage 
(ActivityThread.java:1234)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.os.Handler.dispatchMessage  
(Handler.java:99)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.os.Looper.loop(Looper.java:137)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.app.ActivityThread.main  
(ActivityThread.java:5039)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at java.lang.reflect.Method.invokeNative(Native  
Method)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at java.lang.reflect.Method.invoke   
(Method.java:511)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at   
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at com.android.internal.os.ZygoteInit.main 
(ZygoteInit.java:560)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at dalvik.system.NativeStart.main(Native Method)
09-09 17:03:32.942: E/AndroidRuntime(22223): Caused by: java.lang.NullPointerException
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.app.ContextImpl.makeFilename   
(ContextImpl.java:1963)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.app.ContextImpl.openFileInput  
(ContextImpl.java:692)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.content.ContextWrapper.openFileInput  
(ContextWrapper.java:167)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at  
com.wikibuyers.aforismi.PreferitiActivity.onCreate(PreferitiActivity.java:49)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at android.app.Activity.performCreate 
(Activity.java:5104)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at  
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-09 17:03:32.942: E/AndroidRuntime(22223):    at  
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-09 17:03:32.942: E/AndroidRuntime(22223):    ... 11 more
09-09 17:03:57.676: I/Process(22223): Sending signal. PID: 22223 SIG: 9
09-09 17:03:57.981: D/OpenGLRenderer(22275): Enabling debug mode 0
09-09 17:04:04.801: D/AndroidRuntime(22275): Shutting down VM
09-09 17:04:04.801: W/dalvikvm(22275): threadid=1: thread exiting with uncaught exception  
(group=0x41476930)
09-09 17:04:04.817: E/AndroidRuntime(22275): FATAL EXCEPTION: main
09-09 17:04:04.817: E/AndroidRuntime(22275): java.lang.RuntimeException: Unable to start  
activity ComponentInfo{com.wikibuyers.aforismi/com.wikibuyers.aforismi.PreferitiActivity}:   
java.lang.NullPointerException
09-09 17:04:04.817: E/AndroidRuntime(22275):    at  
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at  
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2230)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.app.ActivityThread.access$600 
(ActivityThread.java:141)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.app.ActivityThread$H.handleMessage 
(ActivityThread.java:1234)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.os.Handler.dispatchMessage  
(Handler.java:99)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.os.Looper.loop(Looper.java:137)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.app.ActivityThread.main 
(ActivityThread.java:5039)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at java.lang.reflect.Method.invokeNative(Native   
Method)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at java.lang.reflect.Method.invoke 
(Method.java:511)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at  
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at com.android.internal.os.ZygoteInit.main  
(ZygoteInit.java:560)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at dalvik.system.NativeStart.main(Native Method)
09-09 17:04:04.817: E/AndroidRuntime(22275): Caused by: java.lang.NullPointerException
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.app.ContextImpl.makeFilename  
(ContextImpl.java:1963)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.app.ContextImpl.openFileInput  
(ContextImpl.java:692)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.content.ContextWrapper.openFileInput  
(ContextWrapper.java:167)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at  
com.wikibuyers.aforismi.PreferitiActivity.onCreate(PreferitiActivity.java:49)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at android.app.Activity.performCreate  
(Activity.java:5104) 
 09-09 17:04:04.817: E/AndroidRuntime(22275):   at  
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-09 17:04:04.817: E/AndroidRuntime(22275):    at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-09 17:04:04.817: E/AndroidRuntime(22275):    ... 11 more
09-09 17:04:04.832: D/dalvikvm(22275): GC_CONCURRENT freed 350K, 4% free 9283K/9664K, paused  
2ms+4ms, total 23ms

Activity PreferitiActivity.java is this:

          package com.wikibuyers.aforismi;

 import java.io.FileNotFoundException;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.InputStreamReader;
 import java.io.Writer;

 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 import android.widget.Toast;

 import java.io.IOException;
 import java.util.ArrayList;


 public class PreferitiActivity extends Activity{

 public final static String EXTRA_MESSAGE = "com.example.provare.MESSAGE";



    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.preferiti);


      Intent intent = getIntent();
      String message = intent.getStringExtra(SingolaFraseSelezionataActivity.EXTRA_MESSAGE);


      Writer writer = null;

        try {
            //FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_APPEND);

            // SPOSTA IL SALVATAGGIO DEL FILE IN PREFERITI IN MODO DA AVERE SALVATAGGIO E LETTURA 
            // INSIEME E DA QUI MANDA SOLO LA FRASE AI PREFERITI

            writer = new OutputStreamWriter(openFileOutput(message,
                    MODE_PRIVATE));  //SE NON VA APPEND TORNIAMO A PRIVATE
            writer.write(message);
            Toast.makeText(getApplicationContext(), "Frase aggiunta ai Preferiti", Toast.LENGTH_LONG).show();
        }

              catch (IOException e) {
                    Log.e("Aforismi", "Impossibile salvare il file", e);
                    Toast.makeText(getApplicationContext(), "Errore", Toast.LENGTH_LONG).show();
                } finally {
                    if (writer != null) {
                        try {
                            writer.close();
                        } catch (Throwable t) {
                        }
                    }
                }

      Reader reader = null;
        try {
            reader = new InputStreamReader(openFileInput(message));

            StringBuffer aux = new StringBuffer();

            char[] buf = new char[1024];
            int len;
            while ((len = reader.read(buf)) != -1) {
                aux.append(buf, 0, len);
            }

        } catch (FileNotFoundException e) {
            message = "";

        } catch (IOException e) {
            Log.e("FileDemo", "Impossibile aprire il file", e);
            message = "";

        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (Throwable t) {
                }
            }
        }

        ArrayList<String> FrasiAggiuntePreferiti = new ArrayList<String>();

        FrasiAggiuntePreferiti.add(message);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, FrasiAggiuntePreferiti);

          ListView listView = (ListView) findViewById(R.id.listView3);
          listView.setAdapter(adapter);


    }
}
有帮助吗?

解决方案

Your issue is something to do with an Array out of bounds:

java.lang.ArrayIndexOutOfBoundsException: length=48;

From what I can tell, this is happenning at line: 2180 of your ActivityThread class.

Bottom line, you have a logic error in your code, which is stopping your Activity from starting up successfully. Fix your Arrary "off by 1" error, and you should be set.

其他提示

do you get the exception on button click? if so check your activity start code

Intent i = new Intent(getApplicationContext(), PreferitiActivity.class);
 startActivity(i);

otherwise i guess from reading your error message you must define activity c in your manifest

<activity android:name="com.wikibuyers.aforismi.C" >

EDIt
you've got an ArrayIndexOutOfBoundsException, you have lists, arrays that you didn't post and they are causing the problem... cheers :)

I must close this discussion because of a change in my stategy. I have understood I should better use a database for my aims so I'll rewrite my app. Thanks to all for their precious answers.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top