我的Android应用程序遇到了一些麻烦。 每当我输入时,应用程序似乎都会强制关闭:
String fileContents = getFileContents("http://www.youtube.com/watch?v="+code);
fileContents = fileContents.substring(fileContents.indexOf("\'VIDEO_ID\': "+"\""+code+"\""),fileContents.indexOf("yt.setMsg({"));
String[] settings = fileContents.split("fmt_url_map");
settings = settings[settings.length-1].split("\"");
String map = settings[2];
map = map.replace("\\/", "/").replace("\\u0026", "&");
fmtMap = map.split("[,|]+");
hash = new HashMap<Integer, String>();
for(int i = 0; i< fmtMap.length/2; i ++) {
hash.put(new Integer(Integer.parseInt(fmtMap[2*i])),fmtMap[2*i+1]);
}
我的getFileContents()函数是:
public static String getFileContents(String path) {
InputStreamReader instream = null;
URL url = null;
URLConnection urlConn = null;
try {
url = new URL(path);
try {
urlConn = url.openConnection();
instream = new InputStreamReader(urlConn.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String separator = System.getProperty("line.separator");
StringBuffer contents = new StringBuffer();
try {
BufferedReader f = new BufferedReader(instream);
try {
String line = null;
while((line = f.readLine()) != null) {
contents.append(line);
contents.append(separator);
}
}
finally {
f.close();
}
}
catch (IOException ex) {
System.out.println(ex.toString());
}
String text = contents.toString();
return text;
}
我怀疑它不起作用,因为我直接从我的一个Java项目中复制了它,但我不明白为什么。
如果有人可以提供帮助,那就太好了! :d
答案 0 :(得分:0)
我首先需要在AndroidManifest.xml中添加以下行:
<uses-permission android:name="android.permission.INTERNET" />
添加此行后,getFileContents(String path)
方法返回了一个HTML字符串。
fileContents.substring
来电会在此行引发StringIndexOutOfBoundsException
:
fileContents = fileContents.substring(fileContents.indexOf("\'VIDEO_ID\': "+"\""+code+"\""),fileContents.indexOf("yt.setMsg({"));
表达式fileContents.indexOf("yt.setMsg({")
返回 -1 ,而其他indexOf
调用也可能返回 -1 。
答案 1 :(得分:0)
实际上,我想通了。 事实证明,当我查询网站时,YouTube正在向我提供该网站的移动版本。我只需要在URL中添加&amp; nomobile = 1。 不过,不管怎样,谢谢。