0

下面这段代码有问题。它应该做的是获取 arrDBNumbers 中的数字并使用这些数字用 6 个不同的图像填充列表视图。arrDBNumbers 已满,并通过 int a - f 他们被填满,但在

hm.put("flag1", Integer.toString(balls[a]) ); 

一切都挂了???它不会超过这个,我得到一个 Array Index Out Of Bounds 异常

    public class ResLotto extends Activity {



int[][] arrDBNumbers = new int[100][8];
String[] arrDBNumbersS = new String[60];
String st0, st1, st2, st3, st4, st5, st6, st7, st8, st9, st10, st11, st12, st13, st14, st15, st16, st17, st18, st19, st20, st21, st22, st23, st24, st25, st26, st27, st28, st29;
private DownloadWebPageTask mTask = null;
private final static String Array="LottoArray.txt"; 
final Context context = this;
int[] balls = new int[]{R.drawable.b1, R.drawable.b2, R.drawable.b3, R.drawable.b4, R.drawable.b5, R.drawable.b6, R.drawable.b7, R.drawable.b8, R.drawable.b9,
R.drawable.b10, R.drawable.b11, R.drawable.b12, R.drawable.b13, R.drawable.b14, R.drawable.b15, R.drawable.b16, R.drawable.b17, R.drawable.b18, R.drawable.b19,
R.drawable.b20, R.drawable.b21, R.drawable.b22, R.drawable.b23, R.drawable.b24, R.drawable.b25, R.drawable.b26, R.drawable.b27, R.drawable.b28, R.drawable.b29,
R.drawable.b30, R.drawable.b31, R.drawable.b32, R.drawable.b33, R.drawable.b34, R.drawable.b35, R.drawable.b36, R.drawable.b37, R.drawable.b38, R.drawable.b39,
R.drawable.b40, R.drawable.b41, R.drawable.b42, R.drawable.b43, R.drawable.b44, R.drawable.b45, R.drawable.b46, R.drawable.b47, R.drawable.b48, R.drawable.b49,
};
int a = 0;
int b = 0; 
int c = 0;
int d = 0;
int e = 0;
int f = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.activity_res_lotto);
    RelativeLayout rel = (RelativeLayout)findViewById(R.id.baseLayer);
    rel.setBackgroundColor(Color.WHITE);
    if ( customTitleSupported ) {
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
    }
    final TextView myTitleText = (TextView) findViewById(R.id.myTitle);

    File fileArray = getBaseContext().getFileStreamPath(Array);
    if(fileArray.exists()) { 
        try {
            InputStream in=openFileInput(Array);            
            if (in!=null) {
                InputStreamReader tmp=new InputStreamReader(in);
                BufferedReader reader=new BufferedReader(tmp);
                String str;
                while ((str = reader.readLine()) != null) {
                    for (int i = 0; i < 52; i++){
                        for (int j = 0; j < 8; j++){                            
                            arrDBNumbers[i][j] = Integer.parseInt(str);
                            str = reader.readLine();    
                        }
                    }
                }   
                in.close();     
            }
        }
        catch (java.io.FileNotFoundException e) {
            Toast
            .makeText(this, "Error opening database file", Toast.LENGTH_LONG)
            .show();
        }
        catch (Exception e) {

        }   

        try {
            StringBuffer buf = new StringBuffer(String.valueOf(arrDBNumbers[0][0]));
            if (buf.length() == 7)
                buf.insert(0, "0");
            buf.insert(4, "/");
            buf.insert(2, "/");
            myTitleText.setText("Lotto, Last updated: " + buf);
            myTitleText.setTextColor(Color.WHITE);


        } catch (Exception e) {
            Toast
            .makeText(this, "Error reading date to title", Toast.LENGTH_LONG)
            .show();
        }
        loadListBox();

    }   
    else if (!(fileArray.exists())){
        myTitleText.setText("Lotto, Last updated: Never");
        myTitleText.setTextColor(Color.WHITE);
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
        alertDialogBuilder.setTitle("First time use!");
        alertDialogBuilder.setMessage("Data will now be downloaded to populate grid");
        alertDialogBuilder.setCancelable(false).setNegativeButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                dialog.cancel();
                checkconnection();

            }
        });
        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

}

private void loadListBox(){


    List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();     
    for(int i = 0; i < 50; i++){
        a = arrDBNumbers[i][1];
        b = arrDBNumbers[i][2];
        c = arrDBNumbers[i][3];
        d = arrDBNumbers[i][4];
        e = arrDBNumbers[i][5];
        f = arrDBNumbers[i][6];


        HashMap<String, String> hm = new HashMap<String,String>();

        hm.put("flag1", Integer.toString(balls[a]) ); 
        hm.put("flag2", Integer.toString(balls[b]) ); 
        hm.put("flag3", Integer.toString(balls[c]) ); 
        hm.put("flag4", Integer.toString(balls[d]) ); 
        hm.put("flag5", Integer.toString(balls[e]) ); 
        hm.put("flag6", Integer.toString(balls[f]) );            
        aList.add(hm);        
    }
    String[] from = { "flag1","flag2","flag3","flag4","flag5","flag6" };

    int[] to = { R.id.ivB1,R.id.ivB2,R.id.ivB3,R.id.ivB4,R.id.ivB5,R.id.ivB6};

    SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.results_row, from, to);
    ListView listView = ( ListView ) findViewById(R.id.listView1);
    listView.setAdapter(adapter);  
}

下面的代码可以工作,并将 6 个图像放在一个列表视图中。但他们所有相同的图像 1 - 6 重复。

    List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();     
    for(int i = 0; i < 50; i++){        

        HashMap<String, String> hm = new HashMap<String,String>();

        hm.put("flag1", Integer.toString(balls[1]) ); 
        hm.put("flag2", Integer.toString(balls[2]) ); 
        hm.put("flag3", Integer.toString(balls[3]) ); 
        hm.put("flag4", Integer.toString(balls[4]) ); 
        hm.put("flag5", Integer.toString(balls[5]) ); 
        hm.put("flag6", Integer.toString(balls[6]) );            
        aList.add(hm);        
    }
    String[] from = { "flag1","flag2","flag3","flag4","flag5","flag6" };

    int[] to = { R.id.ivB1,R.id.ivB2,R.id.ivB3,R.id.ivB4,R.id.ivB5,R.id.ivB6};

    SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.results_row, from, to);
    ListView listView = ( ListView ) findViewById(R.id.listView1);
    listView.setAdapter(adapter); 

有人知道出了什么问题吗?我试过了

        hm.put("flag1", String.valueOf(balls[a]) );
        hm.put("flag1", balls[a].toString() ); 

提前致谢

4

0 回答 0