提取值不起作用的JSON文件?

时间:2018-03-27 09:18:43

标签: java android

我是java编程的新手。我想让Instagram用户全名。以下是我的代码

package gibs.smith.testapp;

import android.os.AsyncTask;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class fetchData extends AsyncTask<Void,Void,Void> {
    private String name = "";
    private String link ="";
    @Override
    protected Void doInBackground(Void... voids) {
        try {
            URL url= new URL("https://instagram.com/priya.p.varrier/?__a=1");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = "";
            while (line !=null){
                line =bufferedReader.readLine();           
                JSONObject jo= new JSONObject(line);
                JSONObject user=jo.getJSONObject("user");
                name=user.getString("full_name");
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        MainActivity.data.setText(this.name);
    }
}

但它不起作用。它不会提取字符串值&#34; full_name&#34;。 它正在检索JSON文件,但不是所需的值。 网址为https://instagram.com/priya.p.varrier/?__a=1

任何帮助都会很棒。

---- -----编辑 添加graphql对象导致应用程序崩溃,下面是catlog输出 这是日志 https://justpaste.it/1itsa

2 个答案:

答案 0 :(得分:1)

首先是bug。它必须是NullPointerException。

    while (line !=null)

它将一直运行直到line = null。然后这一行会给你例外。

    new JSONObject(line);

然后你首先得到 graphql

所以解决方案应该是这样的。

if(line != null) {
    JSONObject jo = new JSONObject(line);
    JSONObject graphql = jo.getJSONObject("graphql");
    JSONObject user = graphql.getJSONObject("user");
    name = user.getString("full_name");
}

答案 1 :(得分:0)

根据您的JSON 您的full_name密钥位于user JSONObject内,位于graphql JSONObject内。

因此,要获取full_name值,必须首先检索graphql JSONObject。

JSONObject jo = new JSONObject(line);
JSONObject graphqlObj = jo.getJSONObject("graphql");
JSONObject user = jographqlObj.getJSONObject("user");
name=user.getString("full_name");

您可以使用http://jsonviewer.stack.hu/检查文件的JSON结构。