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

调用Salesforce REST接口后Android Fragment视图无法显示

问题分析与解决方案

首先,你的核心矛盾很明确:调用Salesforce REST API后Fragment无法加载,跳过API调用就一切正常。我一眼就看到了问题的根源——你在onCreate里用了这行危险的代码:

myAsyncTasks.execute(accessToken_, instanceURL_).get();

为什么这行代码会搞砸Fragment?

AsyncTask.get()是同步阻塞方法,它会强制主线程(UI线程)暂停所有工作,一直等到异步任务完成才继续往下走。这会导致:

  • Activity的初始化流程被卡住,NavigationView、DrawerLayout这些组件的加载延迟甚至异常
  • 后续的Fragment事务提交时机被彻底打乱,主线程阻塞状态下UI渲染根本无法正常执行
  • 更严重的是,这种做法还可能触发ANR(应用无响应)弹窗

修复步骤(非常简单)

  1. 立刻移除.get()调用,让AsyncTask真正在后台异步执行:
// 原来的错误代码
// myAsyncTasks.execute(accessToken_, instanceURL_).get();
// 修改为
myAsyncTasks.execute(accessToken_, instanceURL_);

AsyncTask的设计初衷就是异步执行后台任务,execute()本身就会自动调度后台线程,onPostExecute()会在任务完成后自动回到主线程更新UI,完全不需要用get()来强行同步。

  1. 保留你已正确实现的部分:
    你的onPostExecute()方法里更新ListView的逻辑是对的,因为onPostExecute()本身就在UI线程运行,不需要额外处理线程切换。

  2. 额外优化建议:

    • 换掉过时的DefaultHttpClient:这个类早就被Android官方弃用了,建议改用HttpURLConnection或者更易用的OkHttp来处理网络请求,兼容性和稳定性都更好
    • 不要空抓异常:你现在的try-catch块是空的,至少加个e.printStackTrace(),方便排查API调用中可能出现的错误
    • 避免Activity强持有AsyncTask:可以考虑用ViewModel来管理异步任务,防止屏幕旋转等场景下的内存泄漏

修复后的onCreate代码示例

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setNavigationDrawer(); 

    accessToken_ = "00D7F000005oJve!ARUAQPJ8hMWibtO1flIPjZfzV4A__Kzj6wTjJ5XA_xE1zbqDs_0fOTZuxJFiLVxsFx_kNPxuNNK6c7yREtbxq4J7W1oWuUEs";
    instanceURL_ = "https://harishgakhar40-dev-ed.my.salesforce.com";

    listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
    ((ListView) findViewById(R.id.contacts_list)).setAdapter(listAdapter);

    try {
        MyAsyncTasks myAsyncTasks = new MyAsyncTasks();
        // 移除同步阻塞的.get(),让任务真正异步执行
        myAsyncTasks.execute(accessToken_, instanceURL_);
    } catch (Exception e) {
        // 打印异常日志,方便排查问题
        e.printStackTrace();
    }
}

验证效果

修改后重新运行App:

  • API调用会在后台安静执行,ProgressDialog正常显示,不会卡住UI
  • Activity的导航组件能正常初始化,菜单点击事件响应流畅
  • 点击菜单选项时,Fragment能正常替换并显示内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:44:39