4jie 2022-05-23 09:19 采纳率: 71.4%
浏览 30

为什么我的网络请求里面的onFinish方法没有执行到,求解答

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "onCreate: ");
        String address = "https://www.wanandroid.com/article/list/1/json";
        HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {
            @Override
            public void onFinish(String response) {//为什么这个方法里面没有执行到,是因为异步操作吗?
                try {
                    Log.e(TAG, "onFinish: ");
                    JSONObject jsonObject = new JSONObject(response);
                    JSONObject jsonObject1 = jsonObject.getJSONObject("data");
                    JSONArray jsonArray = jsonObject1.getJSONArray("datas");
                    for (int i = 0; i < jsonArray.length(); i++) {
                        //datas数组里面的jsonObject
                        JSONObject jsonObject2 = jsonArray.getJSONObject(i);
                        HomeArticle homeArticle = new HomeArticle();
                        homeArticle.setChapterName(jsonObject2.getString("chapterName"));
                        homeArticle.setNiceShareDate(jsonObject2.getString("author"));
                        homeArticle.setTitle(jsonObject2.getString("title"));
                        homeArticle.setLink(jsonObject2.getString("link"));
                        homeArticle.setNiceShareDate(jsonObject2.getString("niceShareDate"));
                        homeArticle.setId(jsonObject2.getInt("id"));
                        mHomeArticleList.add(homeArticle);
                        Log.e(TAG, "onFinish: ");
//                        showResponse(mHomeArticleList);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

package com.example.http_recyclerview_demo;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 封装网络请求代码,内部开启了一个线程避免了网络请求耗时阻塞主线程,也是防止出现ANR,使用了java的接口回调机制,解决了在子线程无法返回从数据库获取到的数据
 */
public class HttpUtil {
    public static void sendHttpRequest(final String address, final HttpCallbackListener listener) {
        HttpURLConnection connection = null;
        try {
            URL url = new URL(address);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(8000);
            connection.setReadTimeout(8000);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            InputStream in = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            if (listener != null) {
                //回调onFinish()方法,因为在子线程是没办法通过返回值return语句来返回网络获取到数据的
                //所以将从服务器获取到数据传入了HttpCallbackListener接口的onFinish()方法
                listener.onFinish(response.toString());
            }
        } catch (Exception e) {
            if (listener != null) {
                //回调onError()方法,如果出现了异常就将异常原因传入到onError方法
                listener.onError(e);
            }
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
    }


                if (listener != null) {
                    //回调onFinish()方法,因为在子线程是没办法通过返回值return语句来返回网络获取到数据的
                    //所以将从服务器获取到数据传入了HttpCallbackListener接口的onFinish()方法
                    if (response != null) listener.onFinish(response.toString());
                }
            } catch (Exception e) {
                if (listener != null) {
                    //回调onError()方法,如果出现了异常就将异常原因传入到onError方法
                    listener.onError(e);
                }
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }

        }).start();
    }
}
  • 写回答

3条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-05-23 09:42
    关注

    是不是80s的超时时间太长了?

    评论

报告相同问题?

问题事件

  • 创建了问题 5月23日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog