如何从Thread获取返回值?

2023-12-29

我在用Thread for Webservice但我无法从中获取数据Thread因为我无法返回数据Thread.

这是我的WebService.java :

public class Webservice {
    static String result;
    public static String readUrl(final String url) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    HttpClient client = new DefaultHttpClient();
                    HttpPost method = new HttpPost(url);
                    HttpResponse response = client.execute(method);
                    InputStream stream = response.getEntity().getContent();
                    result = ConvertInputStreamToString(stream);
                    Log.i("xxx","OK" + result);

                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
            thread.start();
            return result;
    }

    private static String ConvertInputStreamToString(InputStream inputstteam) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    inputstteam));
            StringBuilder builder = new StringBuilder();
            String line = "";

            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            return builder.toString();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

This is NotesActivity.java :

public class NotesActivity extends Activity {

    private ArrayList<StructTask> nettasks = new ArrayList<StructTask>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                String result = Webservice.readUrl("http://192.168.200.101:8081/note-server/");
                if (result != null) {
                    try {
                        JSONArray tasks = new JSONArray(result);
                        for (int i = 0; i < tasks.length(); i++) {
                            JSONObject object = tasks.getJSONObject(i);
                            //Log.i("LOG", "Task: " + object.getString("task_title"));
                            StructTask task = new StructTask();
                            task.id = object.getLong("task_id");
                            task.title = object.getString("task_title");
                            task.desc = object.getString("task_desc");
                            task.done = object.getBoolean("task_done");
                            nettasks.add(task);

                            for (StructTask taskes : nettasks) {
                                Log.i("LOG", "Taskes: " + taskes.id + "|" + taskes.title + "|" + taskes.desc + "|" + taskes.done);
                            }
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                } 
                else
                {
                    Log.i("OK", "TaskesOK: " + result);
                    Log.i("LOG", "Task: " + "NULL");
                }

            }
        });
        thread.start();

    }
}

这是我的StructTask.java :

public class StructTask {
    public long id;
    public String title;
    public String desc;
    public boolean done;
}

这段代码为我返回 NULL 。


试试这个方法

1)Web服务.java

public class Webservice {
        public interface WebCallListener{
            void onCallComplete(String result);
        }
        public static void readUrl(final String url,final WebCallListener callListener) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        HttpClient client = new DefaultHttpClient();
                        HttpPost method = new HttpPost(url);
                        HttpResponse response = client.execute(method);
                        InputStream stream = response.getEntity().getContent();
                        callListener.onCallComplete(ConvertInputStreamToString(stream));
                    } catch (ClientProtocolException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
            thread.start();
        }

        private static String ConvertInputStreamToString(InputStream inputstteam) {
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        inputstteam));
                StringBuilder builder = new StringBuilder();
                String line = "";

                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
                return builder.toString();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

2)NotesActivity.java

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

        Webservice.readUrl("http://192.168.200.101:8081/note-server/",new WebCallListener() {
            @Override
            public void onCallComplete(String result) {
                if (result != null) {
                    try {
                        JSONArray tasks = new JSONArray(result);
                        for (int i = 0; i < tasks.length(); i++) {
                            JSONObject object = tasks.getJSONObject(i);
                            //Log.i("LOG", "Task: " + object.getString("task_title"));
                            StructTask task = new StructTask();
                            task.id = object.getLong("task_id");
                            task.title = object.getString("task_title");
                            task.desc = object.getString("task_desc");
                            task.done = object.getBoolean("task_done");
                            nettasks.add(task);

                        }
                        for (StructTask taskes : nettasks) {
                                Log.i("LOG", "Taskes: " + taskes.id + "|" + taskes.title + "|" + taskes.desc + "|" + taskes.done);
                            }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
                else
                {
                    Log.i("OK", "TaskesOK: " + result);
                    Log.i("LOG", "Task: " + "NULL");
                }
            }
        });

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从Thread获取返回值? 的相关文章

  • 关于java中的生产者和消费者模式与阻塞队列方法

    我正在研究有关java中线程的生产者和消费者设计模式 最近我在java 5中进行了探索 并介绍了Java 5中BlockingQueue数据结构的介绍 现在它变得更简单了 因为BlockingQueue通过引入阻塞方法隐式地提供了这种控制p
  • Django模型更新或创建具有唯一约束的对象

    有一个模型 class Proxy models Model host models CharField max length 100 port models CharField max length 10 login models Cha
  • API29 上不推荐使用 setColorFilter

    我使用以下行来更改 VectorDrawable 的颜色 mydrawable getBackground setColorFilter color PorterDuff Mode SRC ATOP 这很好用 尽管它现在已被弃用 文档建议我
  • 如何在 Android TextView 中使用土耳其语字符,如“ş ç ı ö”?

    我想在 android TextView 中写入 ile 但它没有正确绘制 怎样才能使用这样的字符呢 例如 我将文本视图设置为 ile 它显示为 ile 我怎样才能解决这个问题 尝试以下方法 看看是否有帮助 source http grou
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • onScale 事件后触发奇怪的 onScroll 事件

    我有一个同时使用 SimpleOnScaleGestureListener 和 SimpleOnGestureListener 的应用程序 每当我进行捏缩放时 我都会得到预期的 onScale 但是当我抬起时 我会看到一个奇怪的 onScr
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • Android:如何使用后台线程?

    我开发了一个应用程序 它从互联网获取内容并相应地在设备的屏幕上显示它 该程序运行得很好 就是有点慢 加载并显示内容大约需要 3 4 秒 我想将获取内容并将其显示在后台线程中的所有代码放在一起 当程序执行这些功能时 我想显示一个进度对话框 你
  • Android中如何检测WIFI连接何时建立?

    我需要检测何时通过 WIFI 建立网络连接 发送什么广播来确定已建立有效的网络连接 我需要验证是否存在有效的 HTTP 网络连接 我应该监听什么以及需要进行哪些额外测试才能知道是否存在有效连接 您可以注册一个BroadcastReceive
  • Emma 不生成coverage.ec

    我设置了艾玛 它曾经对我有用 然后我们更改了源代码 现在它没有生成coverage ec根本不 它确实生成coverage em 测试临近结束时 出现错误消息 exec INSTRUMENTATION CODE 0 echo Downloa
  • 适用于 Android 的 Google 云端硬盘\文档 API

    我在几个小时内将 Dropbox 与我的应用程序集成 因为 SDK 描述清晰并且有很好的使用示例 Google Drive 似乎只有一个 一刀切 的 Gdata SDK 它非常重 有很多依赖项 它使我的应用程序的大小增加了三倍 而且不是很直
  • Android 纹理仅显示纯色

    我正在尝试在四边形上显示单个纹理 我有一个可用的 VertexObject 它可以很好地绘制一个正方形 或任何几何对象 现在我尝试扩展它来处理纹理 但纹理不起作用 我只看到一种纯色的四边形 坐标数据位于 arrayList 中 the ve
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • android textview 有字符限制吗?

    我正在尝试在 android TextView 中输入超过 2000 3000 个字符 它不显示任何内容 任何一份指南是否对 android textview 有字符限制或什么 我在G3中做了一些小测试 我发现 如果activtiy布局中有
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • 即使 Android M 上的移动数据已打开(有连接),也可以通过 WiFi(无连接)发送请求

    我必须在没有互联网连接的情况下将 UDP 数据包发送到 WiFi 模块 配有自己的 AP 但是当我将手机连接到 AP 时 Android 会在移动数据接口上重定向我的数据包 因为它有互联网连接 我使用下面的代码来完成我的工作 但它似乎不适用
  • 剪切评级栏中的图像

    我制作了自己的评级栏 花朵图像有 4 种尺寸 xdpi hdpi 等 从 24px24px 到 64x64px
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que
  • 为什么带处理程序的连续自动对焦相机不允许切换相机闪光灯?

    到目前为止我所做的 我已经实现了用于读取二维码的自定义相机 需要继续聚焦相机以获得更好的二维码读取 我的问题当我使用处理程序每 秒聚焦一次时 相机闪光灯开 关按钮不起作用 或者打开和关闭相机闪光灯需要太多时间 当我删除每秒自动对焦相机的代码

随机推荐

  • 无法在另一个 *.axml 文件中包含 *.axml 文件

    我想包括一个布局 axml文件在另一个 axml使用 xamarin android 但是 当我使用时
  • 使用 actionbarsherlock 选项卡样式的选项卡内容

    参考下面的代码 取自https gist github com 1126843 https gist github com 1126843 如何设置选项卡的内容 public class NativeTabActivity extends
  • 如何使用 Spring JDBCTemplate 绑定元组列表?

    我有一些这样的疑问 List listOfIntegers Arrays asList new Integer 1 2 3 List objects namedParameterJdbcTemplate query select from
  • 自定义搜索 jQuery FancyTree 插件

    我在我的一个项目中使用 FancyTree jQuery 插件 https github com mar10 fancytree https github com mar10 fancytree 该插件还有一个过滤器扩展 可以调暗或隐藏不匹
  • 在列表中查找匹配和不匹配的项目

    我对 Python 还很陌生 对于列表可以做什么和不能做什么有点困惑 我有两个列表 我想比较它们并以二进制格式返回匹配和不匹配的元素 List1的长度是恒定的 而长度List2不同 但总是短于List1 例如 List1 dog cat p
  • 检测 IE 操作中止问题的原因

    我的网站正遭受操作中止错误 http support microsoft com kb 927917 我觉得奇怪的是 就我而言 错误只是有时会发生 该网站已经运行良好三个月了 然后今天开始出现这种情况 但并非每次都会出现这种情况 发生这种情
  • 未定义方法“has_one_attached” - Spree、AWS S3、产品图像、Rails

    我尝试将 Spree 购物车与 AWS S3 连接以上传产品图片 但不断收到错误消息 rbenv versions 2 4 0 lib ruby gems 2 4 0 gems activerecord 5 2 0 lib active r
  • 生成一个新线程来打开一个新窗口并从另一个线程关闭它

    现在我有 C 代码在不同的线程中生成一个新窗口 这可以工作 但是一旦新生成的窗口打开 它就会关闭并且线程结束 我该如何做到这一点 以便可以从第一个线程关闭新生成的窗口 这是当前生成如何工作的 树 主线程 使用主线程中的一个函数来启动单独线程
  • Mat扩展面板默认打开的bug?

    自从 Angular 5 发布以来 我的垫子扩展面板出现了一些问题 它们是默认打开的 我不明白为什么 my html div div
  • 有没有一个脚本可以列出我创建的 git 分支?

    我知道分支并不真正存储创建者信息 它们只是指向提交的指针 我的目标是能够清理已合并回主分支的旧分支 并列出尚未完成此操作的分支 清理 这与 查找未合并的分支 不同 因为我也想查找合并的分支 并且我想由作者来完成 我的问题是 有没有一个脚本可
  • phpmyadmin - 错误 2002 - 在 Mac 上

    我目前使用的是Mac 运行的操作系统版本是El Capitan 网络根目录是 Users username Sites 我下载并解压了 phpmyadmin 并将目录移动到根文件夹 然后我成功进入了登录屏幕 但是当我尝试登录时 它显示这样的
  • 在运行时加载类时无法创建 bean

    我有两个工作方式不同的项目 第一个用于类加载 第二个有其类用于执行一些处理工作 在第一个项目中 我加载该类 而不是创建新实例来调用该方法 我仅使用应用程序上下文 Autowired ApplicationContext context Cl
  • DSN 连接和带有 @ 的密码

    我考虑切换到使用 DSN 连接的数据库访问库 connect mysql login password database options DSN 使用 作为分隔符 这是否意味着密码不能包含 符号 还有其他限制吗 任何特殊字符对于 DSN 来
  • UIToolbar 的颜色没有改变

    我创建了一个 UIToolbar 我正在尝试使用以下方法将其变为黑色 toolbar barStyle UIBarStyleBlackOpaque or 工具栏background财产 但在任何一种情况下其颜色都不会改变 我怎样才能改变它
  • 在 OOP 中,什么是转发?它与委托有何不同?

    有人可以解释一下转发和委托之间的区别吗 它们看起来很相似 但我一直无法找到转发的良好定义 所以我不确定我是否真的理解 我们首先定义两个术语 sender the object that sends a message task to ano
  • 如何在execlp()之后找到程序的返回值? [复制]

    这个问题在这里已经有答案了 我在c中有以下代码 execlp ReturnValue c ReturnValue c应该返回0 3之间的整数 并且由于程序成功运行时execlp不会返回任何内容 那么如何获取该程序的返回值 你可以这样做 pi
  • 构建目录中的所有项目

    我尝试构建位于根目录的单独目录中的插件
  • 更改 blogdown 帖子的默认目录

    我正在使用的 Hugo 主题的帖子位于 content blog目录 而默认创建的新帖子blogdown new post is the content post目录 从函数定义来看 有一个全局选项可以更改新帖子保存到的目录 帮助也指出了这
  • IE 7、IE 8 等多选项卡浏览器会话问题

    由于会话对象 我对所有多选项卡浏览器都存在问题 我有一个要求 每当用户打开一个新浏览器时 我需要显示不同的值 所以我想到使用 Session 就像 IE 6 中每个浏览器都会创建一个新会话一样 但所有其他多选项卡浏览器 IE 7 和 IE
  • 如何从Thread获取返回值?

    我在用Thread for Webservice但我无法从中获取数据Thread因为我无法返回数据Thread 这是我的WebService java public class Webservice static String result