【问题标题】:how to retrieve below json data from server in android?如何从android中的服务器检索以下json数据?
【发布时间】:2017-03-03 06:28:46
【问题描述】:

如何从 android 中的服务器检索以下 json 数据?你能举个例子吗?如何从下面的 url 获取 UserRole?

http://beta.json-generator.com/api/json/get/4y2NmxAYf

【问题讨论】:

  • 你可以执行网络操作来获取json数据。

标签: android json get


【解决方案1】:

这是从服务器检索 json 数据的示例

将Gson库的这个依赖添加到App的gradle中:

compile 'com.google.code.gson:gson:2.4'

创建模型类

public class UserModel{

public String UserRole;
public String UserName;
public int Id;
public String Email;

public String getUserRole(){
    return UserRole;
}

public void setUserRole(String _userRole){
    UserRole = _userRole;
}

public String getUserName(){
    return  UserName;
}

public void setUserName(String _userName){
    UserName = _userName;
}

public int getId(){
    return Id;
}

public void setId(int _id){
    Id = _id;
}

public String getEmail(){
    return Email;
}

public void setEmail(String _email){
    Email = _email;
}

}

现在使用 Gson 库将数据从服务器响应转换为上述模型。(注意:将这些行写在 AsyncTask 类的 onPostExecute() 中)

@Override
protected void onPostExecute(final Boolean success) {
    try {
         if (success) {
               if (responsecode == 200) {
                   //GSON responsedata
                   if(responsedata!=null) {
                       if (responsedata != "") {
                           List<UserModel> userlist = new ArrayList<UserModel>();
                           JSONArray jsonArray = new JSONArray(responsedata);
                           for (int i = 0; i < jsonArray.length(); i++) {
                               UserModel item = new UserModel();
                               item = new Gson().fromJson(jsonArray.getJSONObject(i).toString(), UserModel.class);
                               userlist.add(item);
                           }

                        }
                    }
                } else if(responsecode==401){
// use toast display the specific error
                    }
                }
                else {
                    Toast.makeText(context, responsedata, Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(context, "Access denied!", Toast.LENGTH_LONG).show();
            }

        }
        catch (Exception e){
            if(e!=null){
            }

        }
}

【讨论】:

    【解决方案2】:

    您将得到 json 数组作为响应。您可以从数组中获取详细信息,例如:

    try {
                JSONArray jsonArray = new JSONArray(response);
                for (int i=0; i<jsonArray.length();i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    String userRole = jsonObject.getString("UserRole");
                    //Rest of the code....
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    【讨论】:

    • 嗨,我在下面使用了它没有执行的代码。请更正我的代码。
    • 嗨,我使用上面的代码它没有执行。请修改代码。 (我在onActivity方法中粘贴了上面的代码)
    • 你能把你的电子邮件分享给我吗?
    【解决方案3】:

    使用以下代码获取 JsonRespone :

        class RetrieveFeedTask extends AsyncTask<Void, Void, String> {
    
                protected void onPreExecute() {
                    responseView.setText("");
                }
    
                protected String doInBackground(Void... urls) {
                  String API_URL = "http://beta.json-generator.com/api/json/get/4y2NmxAYf";
                    // Do some validation here
    
                    try {
                        URL url = new URL(API_URL);
                        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                        try {
                            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                            StringBuilder stringBuilder = new StringBuilder();
                            String line;
                            while ((line = bufferedReader.readLine()) != null) {
                                stringBuilder.append(line).append("\n");
                            }
                            bufferedReader.close();
                            return stringBuilder.toString();
                        }
                        finally{
                            urlConnection.disconnect();
                        }
                    }
                    catch(Exception e) {
                        Log.e("ERROR", e.getMessage(), e);
                        return null;
                    }
                }
    
                protected void onPostExecute(String response) {
                    if(response == null) {
                        response = "THERE WAS AN ERROR";
                    }
        //            progressBar.setVisibility(View.GONE);
                    Log.i("INFO", response);
                    responseView.setText(response);
    parseJsonData(response);
                }
            }
    

    并使用以下方法解析您的数据:

     private void parseJsonData(String jsonResponse){
            try
            {
                JSONArray jsonArray = new JSONArray(jsonResponse);
    
                for(int i=0;i<jsonArray.length();i++)
                {
                    JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                    String UserRole = jsonObject1.optString("UserRole");
                    String UserName = jsonObject1.optString("UserName");
                    String Id = jsonObject1.optString("Id");
                    String Email = jsonObject1.optString("Email");
                }
            }
            catch (JSONException e)
            {
                e.printStackTrace();
            }
        }
    

    从下面的链接中找到 API 调用代码:

    How to use a web API from your Android app

    【讨论】:

    • 嗨,我在一个类中写了 3 个按钮,如何隐藏另一个类中的第 3 个按钮?
    • 你可以使用 setVisibility(ViSIBLE.GONE);
    【解决方案4】:

    您可以使用 OkHttp 从服务器获取 json 数据并使用 fastjson 解析数据。 将这些依赖添加到 App 的 build.gradle 中:

    compile 'com.alibaba:fastjson:1.2.24' 
    compile 'com.squareup.okhttp3:okhttp:3.6.0' 
    compile 'com.squareup.okio:okio:1.11.0' 
    

    然后1.创建模型类:

    public class JsonModel {
    private String UserRole;
    private String UserName;
    private int Id;
    private String Email;
    
    public String getUserRole() {
        return UserRole;
    }
    
    public void setUserRole(String UserRole) {
        this.UserRole = UserRole;
    }
    
    public String getUserName() {
        return UserName;
    }
    
    public void setUserName(String UserName) {
        this.UserName = UserName;
    }
    
    public int getId() {
        return Id;
    }
    
    public void setId(int Id) {
        this.Id = Id;
    }
    
    public String getEmail() {
        return Email;
    }
    
    public void setEmail(String Email) {
        this.Email = Email;
    }
    
    @Override
    public String toString() {
        return "JsonModel{" +
                "Email='" + Email + '\'' +
                ", UserRole='" + UserRole + '\'' +
                ", UserName='" + UserName + '\'' +
                ", Id=" + Id +
                '}';
    }
    

    2.使用OkHttp获取json数据,使用fastjson解析数据。

    类 GetJson 扩展线程 {
            私人字符串网址;
    
        public GetJson(String url) {
            this.url = url;
        }
    
        @Override
        public void run() {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url(url).build();
    
            try {
                Response response = client.newCall(request).execute();
                if (response.isSuccessful()) {
                    final String text = response.body().string();
                    List<JsonModel> models = JSON.parseArray(text, JsonModel.class);
                    //Do other things based on models
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    【讨论】:

      【解决方案5】:

      你可以看看http://www.androidhive.info/2012/01/android-json-parsing-tutorial/,并在下次开始新话题之前尝试搜索更多!

      【讨论】:

        【解决方案6】:

        试试这个,

                StringRequest stringRequest = new StringRequest(Request.Method.GET,"http://beta.json-generator.com/api/json/get/4y2NmxAYf",
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                try {
                                    JSONArray result = new JSONArray(response);
                                      for (int i = 0; i < result.length(); i++)
                                      {
        
                                        JSONObject c = result.getJSONObject(i);
        
                                        String UserRole = c.getString("UserRole");
                                        String UserName = c.getString("UserName");
                                        int Id = c.getInt("Id");
                                        String Email = c.getString("Email");
        
                                    }
        
                                } catch (JSONException e) {
                                }
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
        
                            }
                        });
                RequestQueue requestQueue = Volley.newRequestQueue(this);
                requestQueue.add(stringRequest);
        

        Android 项目应用模块的 gradle 依赖项:

         compile 'com.android.volley:volley:1.0.0'
        

        【讨论】:

          猜你喜欢
          • 2017-04-18
          • 2016-05-30
          • 2020-10-27
          • 2015-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多