【问题标题】:downloading JSON from variable downloaded by JSON从 JSON 下载的变量下载 JSON
【发布时间】:2014-05-23 19:14:06
【问题描述】:

我需要从我的服务器下载 JSON 文件。 下载后,我需要运行第二个 URL 并从那里下载文件。 所有这些都需要在用户看到任何东西之前发生(除了加载对话框)。

我想要的是从 url 下载 JSON 并获取姓氏 (lname),并获取名字 (fname)。 然后我需要构造一个 url,如:http://google.nl/?user=lname&user2=fname。 然后我需要运行该 url,从中获取所有详细信息并将其显示在我的 listView 中(我知道如何执行此操作)。 唯一的问题是我怎样才能做到这一点? 我的想法是在 onPostExecute 中调用一个新方法来调用另一个执行 AsyncTask 的类,但这没有成功......

 @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                contacts = jsonObj.getJSONArray(TAG_CONTACTS);
                JSONObject first = contacts.getJSONObject(1);
                String lastname = first.getString(TAG_LASTNAME);
                String firstname = first.getString(TAG_FIRSTNAME);

                if(lastname != null){
                    url1 = "http://project-hr.nl/serviceview.php?&email="+lastname+"&pass="+firstname;
                    ServiceHandler sh1 = new ServiceHandler();
                    String jsonStrShare = sh1.makeServiceCall(url1, ServiceHandler.GET);
                    try {
                        JSONObject jsonObj1 = new JSONObject(jsonStrShare);
                        contacts1 = jsonObj1.getJSONArray(TAG_CONTACTS);
                // looping through All Contacts
                for (int i = 0; i < contacts.length(); i++) {
                    JSONObject c = contacts.getJSONObject(i);

                    String id = c.getString(TAG_FIRSTNAME);
                    String lastsharename = c.getString(TAG_LASTNAME);
                    String email = c.getString(TAG_EMAIL);
                    String list = c.getString(TAG_LIST);
                    String tussenv = c.getString(TAG_TUSSENV);
                    String pass = c.getString(TAG_PASS);
                    String phone = c.getString(TAG_PHONENUMBER);

                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    contact.put(TAG_FIRSTNAME, id);
                    contact.put(TAG_LASTNAME, lastsharename);
                    contact.put(TAG_EMAIL, email);
                    contact.put(TAG_LIST, list);
                    contact.put(TAG_TUSSENV, tussenv);
                    contact.put(TAG_PASS, pass);
                    contact.put(TAG_PHONENUMBER, phone);
                    //contact.put(TAG_PHONE_MOBILE, mobile);

                    // adding contact to contact list
                    contactList.add(contact);

                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
    }
        }

【问题讨论】:

  • 只需将两个请求链接到 doInBackground() 或使用 Volley。你的方法应该也可以……你遇到了什么问题?
  • 我已经尝试过你的答案,但是我认为我错过了一些东西。我已经用代码编辑了我的问题。你能看看吗?我得到“插入Finally语句来结束尝试块”

标签: android json android-asynctask


【解决方案1】:

对于那些有同样问题的人。这是用于下载 JSON 并使用第一个 JSON 参数再次下载 JSON 的代码。

 @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (!jsonStr.isEmpty()) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                contacts = jsonObj.getJSONArray(TAG_CONTACTS);
                JSONObject first = contacts.getJSONObject(0);
                Log.d("response lastname ", first.getString("lname"));
                Log.d("response firstname ", first.getString("fname"));
                String lastname = first.getString("lname");
                String firstname = first.getString("fname");
                Log.i("check if empty", ""+lastname);
                if(!lastname.isEmpty()){
                    url1 = "SPECIFY URL";//Put URL there
                    ServiceHandler sh1 = new ServiceHandler();
                    String jsonStrShare = sh1.makeServiceCall(url1, ServiceHandler.GET);
                        JSONObject jsonObj1 = new JSONObject(jsonStrShare);
                        contacts1 = jsonObj1.getJSONArray(TAG_CONTACTS);
                // looping through All Contacts
                for (int i = 0; i < contacts1.length(); i++) {
                    JSONObject c = contacts1.getJSONObject(i);

                    String id = c.getString(TAG_FIRSTNAME);
                    String lastsharename = c.getString(TAG_LASTNAME);
                    String email = c.getString(TAG_EMAIL);
                    String list = c.getString(TAG_LIST);
                    String tussenv = c.getString(TAG_TUSSENV);
                    String pass = c.getString(TAG_PASS);
                    String phone = c.getString(TAG_PHONENUMBER);

                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    contact.put(TAG_FIRSTNAME, id);
                    contact.put(TAG_LASTNAME, lastsharename);
                    contact.put(TAG_EMAIL, email);
                    contact.put(TAG_LIST, list);
                    contact.put(TAG_TUSSENV, tussenv);
                    contact.put(TAG_PASS, pass);
                    contact.put(TAG_PHONENUMBER, phone);
                    //contact.put(TAG_PHONE_MOBILE, mobile);

                    // adding contact to contact list
                    contactList.add(contact);

                }
                }   
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多