从URL获取JSON,选择值并将其存储到textView中

时间:2019-06-05 13:34:06

标签: java android url connection database-connection

我开始学习Android,但遇到了无法解决的问题:我的URL具有JSON对象:http://jsonplaceholder.typicode.com/todos 我正在尝试在java-androidstudio中连接URL,然后选择确切的值,假设我想要id = 1的标题值并将其放入我的textView(textview id为'com1')

我已经看过这段代码了,该代码应该至少将id值添加到textview中。...但实际上并没有做任何事情

            String sURL = "http://jsonplaceholder.typicode.com/todos";
            URL url = new URL(sURL);
            URLConnection request = url.openConnection();
            request.connect();
JsonParser jp = new JsonParser(); //from gson
            JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
            JsonObject rootobj = root.getAsJsonObject();
            String idcko = rootobj.get("id").getAsString();

            TextView textElement = (TextView) findViewById(R.id.com1);
            textElement.setText(idcko);

2 个答案:

答案 0 :(得分:0)

一个不错的开始是阅读有关volley的知识,它是一个可帮助您管理请求的库。

这里是有关如何使用凌空抽烟的教程 Android Volley Tutorial

一个很好的例子可以找到here

答案 1 :(得分:0)

有几个原因导致您的代码无法按预期运行。

首先:通过启用INTERNET权限并允许明文流量,确保已正确配置了Android Manifest。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.sandbox"
            android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        andoird:useCleartextTraffix="true"
        ... />

第二:确保您正在AsyncTask中执行请求。 Android不允许HTTP请求在主线程上运行。为了克服这个问题,请创建一个扩展AsyncTask抽象类的新任务。

class UrlRequestTask extends AsyncTask<Void, Void, Void> {
    protected void doInBackground() {
        String sURL = "http://jsonplaceholder.typicode.com/todos";
            URL url = new URL(sURL);
            URLConnection request = url.openConnection();
            request.connect();
            JsonParser jp = new JsonParser(); //from gson
            JsonElement root = jp.parse(new InputStreamReader((InputStream) 
            request.getContent()));
            JsonObject rootobj = root.getAsJsonObject();
            String idcko = rootobj.get("id").getAsString();

            TextView textElement = (TextView) findViewById(R.id.com1);
            textElement.setText(idcko);
    }
}

然后您可以在任何活动的onCreate中调用任务,如下所示: new UrlRequestTask().execute();

尝试这些事情,看看会发生什么。发布错误消息,以帮助自己和他人确定出什么问题了。第一次我也遇到问题,这些解决方案对我有所帮助。

干杯!

编辑:格式化