我正在尝试使用ttorrent库为Android创建torrent应用程序。 我有一些问题。
05-29 23:07:23.388:E / AndroidRuntime(3681):致命异常:bt-announce(.. 393337)
05-29 23:07:23.388:E / AndroidRuntime(3681):java.lang.NullPointerException
05-29 23:07:23.388:E / AndroidRuntime(3681):at com.turn.ttorrent.common.protocol.http.HTTPAnnounceResponseMessage.parse(HTTPAnnounceResponseMessage.java:105)
05-29 23:07:23.388:E / AndroidRuntime(3681):at com.turn.ttorrent.common.protocol.http.HTTPTrackerMessage.parse(HTTPTrackerMessage.java:51)
05-29 23:07:23.388:E / AndroidRuntime(3681):at com.turn.ttorrent.client.announce.HTTPTrackerClient.announce(HTTPTrackerClient.java:124)
05-29 23:07:23.388:E / AndroidRuntime(3681):at com.turn.ttorrent.client.announce.Announce.run(Announce.java:224)
05-29 23:07:23.388:E / AndroidRuntime(3681):at java.lang.Thread.run(Thread.java:856)
public static HTTPAnnounceResponseMessage parse(ByteBuffer data)
throws IOException, MessageValidationException {
BEValue decoded = BDecoder.bdecode(data);
if (decoded == null) {
throw new MessageValidationException(
"Could not decode tracker message (not B-encoded?)!");
}
Map<String, BEValue> params = decoded.getMap();
try {
List<Peer> peers;
try {
// First attempt to decode a compact response, since we asked
// for it.
peers = toPeerList(params.get("peers").getBytes());
} catch (InvalidBEncodingException ibee) {
// Fall back to peer list, non-compact response, in case the
// tracker did not support compact responses.
peers = toPeerList(params.get("peers").getList());
}
return new HTTPAnnounceResponseMessage(data,
params.get("interval").getInt(),
params.get("complete").getInt(),
params.get("incomplete").getInt(),
peers);
} catch (InvalidBEncodingException ibee) {
throw new MessageValidationException("Invalid response " +
"from tracker!", ibee);
} catch (UnknownHostException uhe) {
throw new MessageValidationException("Invalid peer " +
"in tracker response!", uhe);
}
没有诸如“间隔”或“完整”或“不完整”的键是参数。有两个键“peer”和“min interval”。
据我所知它在调用客户端方法下载之后,它从跟踪器请求了一些信息,然后尝试解析这些信息。这就是错误所在。
所以,问题是为什么会如此?它是库中的错误还是我错了?
答案 0 :(得分:1)
究竟是什么问题?
请编辑您的问题并添加更多详细信息。
理想情况下包含sscce。
在您的问题中添加指向显示此错误的torrent文件的链接。 你是如何建立ttorrent的?
确认从Android运行时发生的错误发生在普通Java中。
您可以使用git从github获取ttorrent代码,或单击github项目上的按钮下载zip。
ttorrent使用maven。如果手动获取依赖项,则可能无法获得正确的版本。 您应该将代码作为maven项目导入Eclipse。 Eclipse - &gt;档案 - &gt; ...导入 - &gt; Maven - &gt;现有的Maven项目
在导航器窗格中。找到ttorrent项目并右键单击选择Run As - &gt; Maven Build ... 对于“包”中的目标类型,然后单击“运行”。
我从ttorrent示例客户端开始,并添加了已知商品Ubuntu 13.04 torrent file的路径以及要保存的目录。
我在调试器中运行了代码并且ttorrent正常运行。它开始下载Ubuntu而不会抛出异常或打印错误消息。
在你列出的那一行,我看到params地图有四个条目(“间隔”,“完整”,“同行”,“不完整”)。
以下是我使用的客户端代码:
public class ClientTest
{
public static void main(String[] args) throws NoSuchAlgorithmException
{
try {
SharedTorrent fromFile =
SharedTorrent.fromFile(
new File("j:/ubuntu-13.04-desktop-amd64.iso.torrent"),
new File("j:/td"));
Client client =
new Client(InetAddress.getLocalHost(), fromFile);
client.download();
client.waitForCompletion();
} catch (UnknownHostException ex) {
Logger.getLogger(ClientTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(ClientTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}