当前位置: 首页 > 知识库问答 >
问题:

我无法从AsyncTask子类中的doInBackground方法获取数据

艾令秋
2023-03-14

我正在尝试在我的应用程序中获取地震数据,结果我的应用停止工作。我的代码中没有错误。甚至我也添加了互联网权限。但当获取数据时,我认为会发生这种错误。我已调试过,但找不到问题。

日志猫:

2021-03-27 15:23:32.118 9533-9560/com . example . quakereportapp E/eglCodecCommon:glUtilsParamSize:unknow param 0x 000082 da 2021-03-27 15:23:32.118 9533-9560/com . example . quakereportapp E/eglCodecCommon:glUtilsParamSize:unknow param 0x 000082 da ioctl _ ping

我的AsyncTask子类

private void updateUi(List<Earthquake> earthquakes) {
    listView = findViewById(R.id.list_view);
    ArrayList<Earthquake> earthquake = QueryUtils.fetchEarthquakeData(url);
    EarthquakeAdapter earthquakeAdapterArrayAdapter = new EarthquakeAdapter(this, earthquake);
    listView.setAdapter(earthquakeAdapterArrayAdapter);
}
private class EarthQuakeAsyncTask extends AsyncTask<String, Void, List<Earthquake>> {
 
    @Override
    protected  ArrayList<Earthquake> doInBackground(String... urls) {
        ArrayList<Earthquake> result = QueryUtils.fetchEarthquakeData(urls[0]);
        return result;
    }


    @Override
    protected void onPostExecute(List<Earthquake> result) {
        updateUi(result);
    }

我的来自QueryUtils Class的JSON Extractor方法

private static ArrayList<Earthquake> extractFeatureFromJson(String earthquakeJSON) {
    // If the JSON string is empty or null, then return early.
    if (TextUtils.isEmpty(earthquakeJSON)) {
        return null;
    }

    ArrayList<Earthquake> earthquakes = new ArrayList<>();


    try {
        JSONObject baseJsonResponse = new JSONObject(earthquakeJSON);
        JSONArray earthquakeArray = baseJsonResponse.getJSONArray("features");

        for (int i = 0; i < earthquakeArray.length(); i++) {
            //creates object from the given array
            JSONObject currentEarthquake = earthquakeArray.getJSONObject(i);
            //stores all the data from properties to properties object
            JSONObject properties = currentEarthquake.getJSONObject("properties");
            //here we assign the value of the specified keys from the properties
            String magnitude = properties.getString("mag");
            String location = properties.getString("place");
            long time = properties.getLong("time");
            //and now we create a new earthquake in every loop
            Earthquake earthquake = new Earthquake(magnitude, location, time);
            //finally we add it to the earthquakes list
            earthquakes.add(earthquake);
        }
    } catch (JSONException e) {
        Log.e(LOG_TAG, "Problem parsing the earthquake JSON results", e);
    }
    return earthquakes;
}

共有1个答案

施景同
2023-03-14

引发异常是因为您是从主线程调用 API。代码中的问题是您调用 API 两次。一次在 do InBackground 中,然后再次在更新Ui 中。从更新中删除查询工具的调用地球地震数据(网址),它应该看起来像这样。

private void updateUi(List<Earthquake> earthquakes) {
    listView = findViewById(R.id.list_view);
    EarthquakeAdapter earthquakeAdapterArrayAdapter = new EarthquakeAdapter(this, earthquakes);
    listView.setAdapter(earthquakeAdapterArrayAdapter);
}
 类似资料:
  • 问题内容: 在Android应用程序中,我想从方法返回JSONObject 。 这是代码: 我尝试了此代码,但出现错误。是否可以从方法返回JSONObject ? 问题答案: 编辑: 这可以帮助您, 很明显, 可能您不需要在方法声明中更改返回值和参数。 只需创建以下行 方法将根据您在中提到的参数和返回类型自动创建

  • 我的想法是,我启动一个异步任务,从Tweeter获取状态...在这里之前一切正常...但是当我遇到一些特定的tweets时,我需要用服务器上的一些信息来修改它们,这里我将进行另一个网络操作,因为我需要等待,直到我从服务器上获取信息,我做: 这是从doInBackground()方法中的allready启动的AsyncTask启动的... 我知道我可以在AsyncTask中添加方法并在doInBac

  • 问题内容: 我必须动态获取ES6类的属性和功能。这有可能吗? 使用for … in循环,我只能循环访问类实例的属性: 输出: 问题答案: 此功能将获取所有功能。是否继承,是否可枚举。包括所有功能。 做测试 控制台输出: 注意 它不返回通过符号定义的函数。

  • 我一直在尝试使用nativescript创建一个android应用程序。我正在使用fetch模块从服务器获取响应。当我试图从httpbin获得响应时。org/get,没关系。但当我试图从本地服务器获取响应时,网络请求失败。错误 发送到httpbin。组织/获取- 发送到本地主机:8000/api- 当我尝试从纯节点中的localhost:8000/api获取响应时。js通过请求模块。它工作得很好。

  • 我有一个内部类,它在我的主类中扩展了异步任务 我在内部类中获得了分配给我的字符串变量“变量”的正确值,但我无法访问我的主类中的值。

  • 问题内容: 我遵循了很多我认为确实正确的指南和其他问题,但是我有一个无法解决的错误。 反对这条线 我收到此错误 MainActivity.loadNotams类型必须实现继承的抽象方法AsyncTask.doInBackground(String …) 并反对这条线 我收到此错误: MainActivity.loadNotams类型的方法doInBackground(String)必须重写或实现一