2014-02-15 79 views
0

我是android新手,正在开发真正简单的应用程序。我已经在String.xml中声明了一些字符串数组,并在文本视图中逐个显示这些字符串。用户可以按“Next”和“Previous”按钮更改字符串。当应用程序被启动 Android应用程序崩溃问题

  • 当所有的字符串都结束了再下按钮被按下时,应用程序崩溃是没有得到显示

    1. 第一个字符串:

      问题我面对的问题。

    MainActivity.java

    @Override 
         protected void onCreate(Bundle savedInstanceState) { 
          // TODO Auto-generated method stub 
          super.onCreate(savedInstanceState); 
          setContentView(R.layout.main); 
    
          final String allquotes[] = getResources() 
            .getStringArray(R.array.quotes); 
          counter = 0; 
          display = (TextView) findViewById(R.id.tvdisplay); 
          choosenext = (Button) findViewById(R.id.bnext); 
    
          choosenext.setOnClickListener(new View.OnClickListener() { 
    
           @Override 
           public void onClick(View v) { 
            // TODO Auto-generated method stub 
            counter++; 
            display.setText(allquotes[counter]); 
    
           } 
          }); 
    
          chooseprevious = (Button)findViewById(R.id.bprevious); 
          chooseprevious.setOnClickListener(new View.OnClickListener() { 
    
           @Override 
           public void onClick(View arg0) { 
            // TODO Auto-generated method stub 
           counter--; 
              display.setText(allquotes[counter]); 
    
           } 
          }); 
    
    
         } 
    
    
        } 
    

    logcat的

    02-15 12:52:37.020: W/KeyCharacterMap(405): No keyboard for id 0 
    02-15 12:52:37.020: W/KeyCharacterMap(405): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
    02-15 12:52:47.509: D/dalvikvm(405): GC_EXTERNAL_ALLOC freed 54K, 52% free 2586K/5379K, external 2237K/2793K, paused 382ms 
    02-15 12:52:59.420: D/AndroidRuntime(405): Shutting down VM 
    02-15 12:52:59.420: W/dalvikvm(405): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
    02-15 12:52:59.431: E/AndroidRuntime(405): FATAL EXCEPTION: main 
    02-15 12:52:59.431: E/AndroidRuntime(405): java.lang.ArrayIndexOutOfBoundsException 
    02-15 12:52:59.431: E/AndroidRuntime(405): at com.example.zzzz.MainActivity$1.onClick(MainActivity.java:34) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at android.view.View.performClick(View.java:2485) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at android.view.View$PerformClick.run(View.java:9080) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at android.os.Handler.handleCallback(Handler.java:587) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at android.os.Handler.dispatchMessage(Handler.java:92) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at android.os.Looper.loop(Looper.java:123) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at android.app.ActivityThread.main(ActivityThread.java:3683) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at java.lang.reflect.Method.invokeNative(Native Method) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at java.lang.reflect.Method.invoke(Method.java:507) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    02-15 12:52:59.431: E/AndroidRuntime(405): at dalvik.system.NativeStart.main(Native Method) 
    

    main.xml中

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:weightSum="1" 
        android:background="@drawable/background" 
        android:orientation="vertical" > 
    
        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="0.8" 
         android:gravity="center" 
         android:orientation="vertical" > 
    
         <TextView 
          android:id="@+id/tvdisplay" 
          android:gravity="center" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="" 
          android:textAppearance="?android:attr/textAppearanceLarge" /> 
        </LinearLayout> 
    
        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_weight="0.2" 
         android:gravity="bottom" 
         android:orientation="horizontal" > 
    
         <Button 
          android:id="@+id/bprevious" 
          android:layout_width="154dp" 
          android:layout_height="wrap_content" 
          android:text="@string/previous" /> 
    
         <Button 
          android:id="@+id/bnext" 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:text="@string/next" /> 
    
        </LinearLayout> 
    
    </LinearLayout> 
    
  • +0

    请发表您的XML – user2450263

    +0

    发布logcat的输出 – Srikanth

    +0

    @GopalRao - 对于为什么不显示,以防颜色,背景是相同的(?) – user2450263

    回答

    1
    1. 设置文本之前,增加计数器,所以allcounter指数被认为是1 instea d为0.
    2. 没有错误日志很难说出什么问题。使用logcat。
    +0

    你能告诉,假设有10个字符串显示,然后第10个字符串用户按下,那么如何显示应用的第一个字符串? –

    +0

    是这就是容易, choosenext.setOnClickListener(新View.OnClickListener(){ @Override 公共无效的onClick(视图v){// TODO自动生成方法存根 计数器++; 如果(计数器== 10){ counter; 0;} display.setText(allquotes [counter]); } });如假设有 – timeshift117

    0
    1. 当应用程序启动时,不显示第一个字符串。你可以在某处添加display.setText(allquotes[0]);

    2. 添加检查if (counter < allquotes.length) display.setText(allquotes[counter]);

    0

    好,崩溃是IndexOutOfBounds问题。 onClock增加计数器。如果counter> = allquotes.length,应用程序将访问数组中的索引并崩溃。更改的onClick到

      if(counter < allquotes.length-1){ 
           counter++; 
          } 
          display.setText(allquotes[counter]); 
    
    0

    因为当所有的字符串完成后,仍然下一步按钮被按下时,应用程序崩溃,

    计数器不断递增并达到一个点那里是String数组中的位置没有价值。

    当您启动应用程序并直接按下上一个按钮时会发生什么?然后计数器变成(-1)。需要根据阵列的大小处理计数器的最小值和最大值。

    0

    应用程序因数组越界而崩溃,因为当计数器值大于数组大小时,您尝试访问allquotes [Counter]。

    限制计数器或在达到阵列大小时将其重置为零将解决您的问题。

    1

    试试这个...

     choosenext.setOnClickListener(new View.OnClickListener() { 
    
          @Override 
          public void onClick(View v) { 
           counter++; 
           if (counter >= allquotes.length || counter < 0) { 
            counter = 0; 
           } 
           display.setText(allquotes[counter]); 
          } 
         }); 
    
         chooseprevious.setOnClickListener(new View.OnClickListener() { 
    
          @Override 
          public void onClick(View arg0) { 
           // TODO Auto-generated method stub 
           counter--; 
           if (counter < 0 || counter >= allquotes.length) { 
            counter = 0; 
           } 
           display.setText(allquotes[counter]); 
    
          } 
         }); 
    
    +0

    ,有10个字符串显示,然后在第10个字符串用户按下,如何显示应用程序的第一个字符串? –

    +0

    @bhanukaushik查看编辑答案... –