Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从中读取android中的json文件https://randomuser.me/api/_Java_Android_Json - Fatal编程技术网

Java 如何从中读取android中的json文件https://randomuser.me/api/

Java 如何从中读取android中的json文件https://randomuser.me/api/,java,android,json,Java,Android,Json,我在读取从中获取的json字符串时遇到问题。这是json文件: { "results": [{ "gender": "male", "name": { "title": "mr", "first": "romain", "last": "hoogmoed" }, "location": { "street": "1861 jan

我在读取从中获取的json字符串时遇到问题。这是json文件:

{
    "results": [{
        "gender": "male",
        "name": {
            "title": "mr",
            "first": "romain",
            "last": "hoogmoed"
        },
        "location": {
            "street": "1861 jan pieterszoon coenstraat",
            "city": "maasdriel",
            "state": "zeeland",
            "postcode": 69217
        },
        "email": "romain.hoogmoed@example.com",
        "login": {
            "username": "lazyduck408",
            "password": "jokers",
            "salt": "UGtRFz4N",
            "md5": "6d83a8c084731ee73eb5f9398b923183",
            "sha1": "cb21097d8c430f2716538e365447910d90476f6e",
            "sha256": "5a9b09c86195b8d8b01ee219d7d9794e2abb6641a2351850c49c309f1fc204a0"
        },
        "dob": "1983-07-14 07:29:45",
        "registered": "2010-09-24 02:10:42",
        "phone": "(656)-976-4980",
        "cell": "(065)-247-9303",
        "id": {
            "name": "BSN",
            "value": "04242023"
        },
        "picture": {
            "large": "https://randomuser.me/api/portraits/men/83.jpg",
            "medium": "https://randomuser.me/api/portraits/med/men/83.jpg",
            "thumbnail": "https://randomuser.me/api/portraits/thumb/men/83.jpg"
        },
        "nat": "NL"
    }],
    "info": {
        "seed": "2da87e9305069f1d",
        "results": 1,
        "page": 1,
        "version": "1.1"
    }
}
我的代码如下:

public class MainActivity extends AppCompatActivity {

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

        ((Button) findViewById(R.id.start_button)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new WebServiceHandler().execute("https://randomuser.me/api/");
                //.execute("http://damianchodorek.com/wsexample/");
                //.execute("https://randomuser.me/api/?results=5&inc=name,email,picture");
            }
        });
    }

    private class WebServiceHandler extends AsyncTask<String, Void, String>{

        // okienko dialogowe, które każe użytkownikowi czekać
        private ProgressDialog dialog = new ProgressDialog(MainActivity.this);

        // metoda wykonywana jest zaraz przed główną operacją (doInBackground())
        // mamy w niej dostęp do elementów UI
        @Override
        protected void onPreExecute() {
            // wyświetlamy okienko dialogowe każące czekać
            dialog.setMessage("Czekaj...");
            dialog.show();
        }

        // główna operacja, która wykona się w osobnym wątku
        // nie ma w niej dostępu do elementów UI
        @Override
        protected String doInBackground(String... urls) {

            try {
                // zakładamy, że jest tylko jeden URL
                URL url = new URL(urls[0]);
                URLConnection connection = url.openConnection();

                // pobranie danych do InputStream
                InputStream in = new BufferedInputStream(connection.getInputStream());

                // konwersja InputStream na String
                // wynik będzie przekazany do metody onPostExecute()
                return streamToString(in);

            } catch (Exception e) {
                // obsłuż wyjątek
                Log.d(MainActivity.class.getSimpleName(), e.toString());
                return null;
            }
        }

        // metoda wykonuje się po zakończeniu metody głównej,
        // której wynik będzie przekazany;
        // w tej metodzie mamy dostęp do UI
        @Override
        protected void onPostExecute(String result) {
            //Toast.makeText(getApplicationContext(),result,Toast.LENGTH_LONG).show();
            // chowamy okno dialogowe
            dialog.dismiss();

            try {
                //Toast.makeText(getApplicationContext(),result,Toast.LENGTH_LONG).show();
                // reprezentacja obiektu JSON w Javie
                JSONObject json = new JSONObject(result);

                // pobranie pól obiektu JSON i wyświetlenie ich na ekranie
                ((TextView) findViewById(R.id.response_id)).setText("title: "
                        + json.optString("title"));
                ((TextView) findViewById(R.id.response_name)).setText("first: "
                        + json.optString("first"));

            } catch (Exception e) {
                // obsłuż wyjątek
                Log.d(MainActivity.class.getSimpleName(), e.toString());
            }
        }
    }

    // konwersja z InputStream do String
    public static String streamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder stringBuilder = new StringBuilder();
        String line = null;

        try {
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line + "\n");
            }
        }
        reader.close();

        } catch (IOException e) {
            // obsłuż wyjątek
            Log.d(MainActivity.class.getSimpleName(), e.toString());
        }
        return stringBuilder.toString();
    }
}
因为如果我在
optString()
方法中更改
“results”
上的
“title”
,它通常会以json格式打印
“results”
字段中的所有内容。
我应该在
optString()
方法中写什么才能仅从
“title”
字段中获取值?

类似的方法应该可以工作。json文档不是简单的“字段结构”,因此需要使用特定于类型的getter函数

jsonObj.getJSONArray("results")
  .getJSONObject(0)
  .getJSONObject("name")
  .optString("title")
jsonObj.getJSONArray("results")
  .getJSONObject(0)
  .getJSONObject("name")
  .optString("title")