我有一段代码,我正试图追踪它。代码是:
if(response != null)
{
String line="";
String strLine[]=new String[7];
docids.clear();
names.clear();
specl.clear();
qual.clear();
exp.clear();
loc.clear();
cid.clear();
passmsg="";
//ArrayList<String> arrloc = new ArrayList<String>();
InputStream inputstream = response.getEntity().getContent();
//line[] = convertStreamToString(inputstream);
BufferedReader rd = new BufferedReader(new InputStreamReader(inputstream));
try
{
while ((line = rd.readLine()) != null)
{
Toast.makeText(this,"Line:"+line , Toast.LENGTH_LONG).show();
strLine= line.split(",");
String errmsg,errno;
Integer a=Integer.parseInt(strLine[0]);
if(a==0)
{
Toast.makeText(this,"NO SESSION!!!" , Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(getApplicationContext(),LoginActivity.class);
startActivityForResult(myIntent, 0);
}
else if(a==1)
{
errno=strLine[1];
if(errno.equals("61")||errno.equals("49"))
{
errmsg=strLine[2];
Toast.makeText(this,errmsg , Toast.LENGTH_LONG).show();
}
else if(errno.equals("194"))
{
errmsg=strLine[2];
Toast.makeText(this,errmsg , Toast.LENGTH_LONG).show();
e1.setText("");
e1.requestFocus();
}
else if(errno.equals("195"))
{
errmsg=strLine[2];
Toast.makeText(this,errmsg , Toast.LENGTH_LONG).show();
e2.setText("");
e2.requestFocus();
}
else if(errno.equals("62"))
{
//whc=strLine[3];
whc=which.toString();
if(whc.equals("1"))
{
passmsg="Doctor List,Specialties";
}
else if(whc.equals("2"))
{
passmsg="Doctor List,City Locations";
}
docids.add(strLine[3]);
names.add("Dr."+strLine[4]);
String sp=replace(strLine[5]);
specl.add("Specialities:"+sp);
String q=replace(strLine[6]);
qual.add("Qual:"+q);
exp.add("Exp:"+strLine[7]+"yrs");
if(whc.equals("1"))
{
loc.add(replace(strLine[8]));
}
else if(whc.equals("2"))
{
cid.add(strLine[9]);
loc.add(strLine[8]+","+strLine[10]);
}
代码执行完美但我怀疑的是当数组声明为7个值时 String strLine [] = new String [7]; 我们只能存储0到6位的值。如何存储和检索第7个位置的值?
cid.add(strLine[9]);
loc.add(strLine[8]+","+strLine[10]);
为什么我没有得到ArrayOutOfBoundException?
答案 0 :(得分:0)
字符串数组只能初始化一次,只能初始化一次。
你的解决方案是:
String a[];
a = new String[no_of_strings_received];
根据动态接收的响应数量实例化数组!
答案 1 :(得分:0)
strLine= line.split(",");
由于上面的行,创建了一个新的字符串数组。 因此,此数组的大小与split函数返回的元素相同。
strLine= new String[7];
上面的行是没有意义的,因为当你为strLine分配一个新数组时参考被破坏了。
你可以写 strLine中= NULL;
并致信:
strLine= line.split(",");
将初始化你的字符串数组。