Android:求助!应用程序已停止工作

问题描述 投票:-1回答:3

我正在尝试创建一个应用程序,我可以阅读通过Array存储的诗。它包含2个按钮“下一步”和“后退”

一切似乎工作正常,但当我到达阵列的末尾,然后我按下它停止工作。反之亦然。

    package com.example.haziqsheikhlocal.ghanwapoems;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;


public class GhanwaPoems extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ghanwa_poems);

        final TextView myPoem1 = (TextView) findViewById(R.id.myPoem);
         final Button nextButton = (Button) findViewById(R.id.buttonNext);
        final Button backButton = (Button) findViewById(R.id.backButton);



        View.OnClickListener backListen = new View.OnClickListener() {
            public int kK =0;
            @Override
            public void onClick(View v) {
                String[] mPoemBooks = getStrings();


                if (kK <= mPoemBooks.length - 1 || kK >= 1 ){
                    switch (v.getId())   // v is the button that was clicked
                    {
                        case(R.id.buttonNext):
                            kK++;
                            break;
                        case (R.id.backButton):
                            kK--;
                            break;
                        default:   // this will run the same code for any button clicked that doesn't have id of button1 defined in xml

                            break;

                    }
                    int k = kK;
                    String myPoem = "";
                    myPoem = mPoemBooks[k];



                    myPoem1.setText(myPoem);
                }
else {
                    Toast.makeText(getApplicationContext(), " Sorry No More To Show" , Toast.LENGTH_LONG).show();
                }

            }
};
                       backButton.setOnClickListener(backListen);
                       nextButton.setOnClickListener(backListen);

    }

    private String[] getStrings() {
        return new String[]{"","a","b","c","d","e","f"};
    }
}

我需要的是一个逻辑或条件,以便当我到达我的阵列的末尾时,它应该显示“抱歉没有更多的诗歌”。反之亦然。

对于我第一次做某事的乱码我很抱歉:P

android toast
3个回答
0
投票

这里有很多需要注意的事情:

1:onCreate()方法只应用于为活动创建时需要发生的事情设置活动。在这里设置监听器很好,但是在那里定义匿名类是很糟糕的代码实践

2:使用两个侦听器或在布局中使用onClick属性更简单

3:当前的诗是属于该活动的项目,因此它应该是该类的成员

4:我假设你想要一个更好的持久存储你显示的项目,但这是几个步骤

这是前3个的快速实现:

public class Poems extends Activity {

    private int currentPoem;
    private TextView mPoemView;
    private String[] mPoems = new String[] {...}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super(savedInstanceState);
        setContentView(R.layout.activity_ghanwa_poems);

        mPoemView = (TextView) findViewById(R.id.myPoem);
        Button nextButton = (Button) findViewById(R.id.nextButton);
        Button backButton = (Button) findViewById(R.id.backButton);

        nextButton.setOnClickListener(mNextListener);
        backButton.setOnClickListener(mBackListener);
    }

    private View.OnClickListerner mNextListener
            = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (currentPoem < mPoems.length - 1) {
                mPoemView.setText(mPoems[++currentPoem])
            }
        }
    };

    private View.OnClickListerner mBackListener
            = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (currentPoem > 0) {
                mPoemView.setText(mPoems[--currentPoem])
            }
        }
    };
}

祝你好运,欢迎来编码。


1
投票

你if语句总是如此。这应该适合你:

if(kK <= mPoemBooks.length - 1 && kK> = 0){


0
投票

看起来您正在获得索引超出范围的错误。这意味着您正在尝试访问不存在的数组(mPoemBooks)中的对象。在backButton的情况下,你最有可能得到-1作为索引,而使用buttonNext你得到的东西比数组大。

要解决这个问题,你应该确保索引在边界内

int k = kK;
String myPoem = "";

if (k < 0) {
    k = 0;
}

if (k >= mPoemBooks.length()) {
    k = mPoemBooks.length() -1; //Subtract 1 since arrays are 0 indexed and length is 1 indexed.
}
myPoem = mPoemBooks[k];
© www.soinside.com 2019 - 2024. All rights reserved.