在返回行上获取错误,也不确定检查大小是否正确。
private byte[] Get(String urlIn)
{
URL url = null;
String urlStr = urlIn;
if (urlIn!=null)
urlStr=urlIn;
try
{
url = new URL(urlStr);
} catch (MalformedURLException e)
{
e.printStackTrace();
return null;
}
HttpURLConnection urlConnection = null;
try
{
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
byte[] buf=new byte[10*1024];
int szRead = in.read(buf);
byte[] bufOut;
if (szRead==10*1024)
{
throw new AndroidRuntimeException("the returned data is bigger than 10*1024.. we don't handle it..");
}
else
{
if (szRead > 0) {
bufOut = Arrays.copyOf(buf, szRead);
}
}
return bufOut;
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
finally
{
if (urlConnection!=null)
urlConnection.disconnect();
}
}
部分:
if (szRead > 0) {
bufOut = Arrays.copyOf(buf, szRead);
}
不确定这是否是在java中检查它的正确方法,而且在执行此操作时,我在变量bufOut上出错可能不是此行中的init:
return bufOut;
答案 0 :(得分:0)
为什么不尝试返回if
返回的值,而不是将其存储在变量中,然后将其返回。
答案 1 :(得分:0)
您可能未获得初始化错误,因为如果szRead
为零或更少,则bufOut
未初始化。根据{{3}},如果szRead
为负数(例如,如果文件在调用read()
时处于EOF状态),则会抛出异常,因此您可以执行以下任一操作:
if (szRead==10*1024)
{
throw new AndroidRuntimeException("the returned data is bigger than 10*1024.. we don't handle it..");
}
else
{
bufOut = Arrays.copyOf(buf, szRead);
}
return bufOut;
抓住NegativeArraySizeException
,或者为szRead<抛出另一个AndroidRuntimeException
0,或只是做:
bufOut = Arrays.copyOf(buf, szRead < 0 ? 0 : szRead);