You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中通过按钮运行并展示Twitter4J的DirectMessagesList代码

现有代码存在的核心问题

  • 主线程执行网络请求违规:Android系统从API 11开始禁止在主线程发起网络请求,如果你直接在主线程调用当前的两个私信获取方法,会直接抛出NetworkOnMainThreadException,就算没有触发崩溃也拿不到返回结果,后续自然没有内容展示。
  • API权限/版本/参数问题无校验:首先你需要确认在X(原推特)开发者平台申请的API凭证已经开通了Direct Messages Read权限;其次你使用的Twitter4j调用的是v1.1版本的私信接口,如果你申请的是v2版本的API且未开通v1.1访问权限,也会请求失败;同时代码里没有对OAuth凭证有效性做校验,凭证填错、权限不足都会导致拿不到数据,也没有针对错误码的专属排查逻辑。
  • 无数据调用、UI绑定逻辑:你目前只实现了获取私信数据的工具方法,既没有在Activity生命周期(比如onCreate)中主动调用方法拉取数据,也没有把返回的DirectMessageList里的内容(发送人、消息内容、时间等)提取出来绑定到TextView、RecyclerView这类UI控件上,当然不会有内容展示。
  • 冗余休眠逻辑不合理:getAllAvailableDirectMessages方法里每次分页前休眠60秒完全没有必要,X v1.1私信接口的速率限制是每15分钟最多15次请求,正常分页根本不需要等待这么久,反而会导致代码长时间阻塞拿不到结果。

需要补充的实现内容

  • 异步执行网络请求:把获取私信的逻辑放到子线程执行,拿到结果后再切回主线程更新UI,简单实现示例如下:
// 在Activity的onCreate方法中调用这段代码触发私信拉取
new Thread(() -> {
    DirectMessageList messages = getAllAvailableDirectMessages();
    // 切回主线程操作UI
    runOnUiThread(() -> {
        if (messages != null && !messages.isEmpty()) {
            // 遍历私信列表提取内容
            for (DirectMessage msg : messages) {
                Log.d(TAG, "私信内容:" + msg.getText() + " 发送人:" + msg.getSenderScreenName());
                // 此处将内容添加到你的列表适配器或者直接设置到文本控件上
            }
        } else {
            Toast.makeText(this, "未获取到私信数据", Toast.LENGTH_SHORT).show();
        }
    });
}).start();
  • 补充错误排查逻辑:在捕获TwitterException时打印错误码,401对应凭证错误/权限不足,403对应无接口访问权限,429对应触发热度限制,根据错误码可以快速定位问题。
  • 补充列表UI实现:如果需要展示多条私信,推荐使用RecyclerView作为列表控件,自定义适配器存储每一条私信的发送人信息、内容、发送时间等字段,拉取到数据后更新适配器即可完成内容展示。

内容的提问来源于stack exchange,提问作者user17183353

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:54:00