【问题标题】:Android JSON data retrievalAndroid JSON 数据检索
【发布时间】:2016-02-21 10:32:01
【问题描述】:

我是 android 新手,无法从下面的 JSON 代码中检索数据。有建议请回复。

Json 代码:-

{"category":{"name":["Spa","Salon","Makeup"],"brand_title":["Aura Thai Spa- Greater Kailash 1",.....]}}

安卓代码:

public class Salon extends AppCompatActivity {

    String url="my_url";
    String catname,brandname;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_salon);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    sname=(TextView)findViewById(R.id.person_name);
    bname=(TextView)findViewById(R.id.person_age);
    new MyAsyncTask().execute(url);
}

class MyAsyncTask extends AsyncTask<String, String, JSONObject> {
    URLConnection urlConnection;
    String result = "";
    JSONObject  jsonRootObject;
    @Override
    protected JSONObject doInBackground(String... params) {
        try {
            URL url_data = new URL(url);
            urlConnection = url_data.openConnection();
            urlConnection.connect();

        // Convert response to string using String Builder
            InputStream inputStream = urlConnection.getInputStream();
            BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
            StringBuilder sBuilder = new StringBuilder();

            String line;
            while ((line = bReader.readLine()) != null) {
                sBuilder.append(line + "\n");
            }

            inputStream.close();
            result = sBuilder.toString();

        }catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        catch (Exception e) {
            //Log.e("StringBuilding & BufferedReader", "Error converting result " + e.toString());
        }
        try{
           jsonRootObject = new JSONObject(result);
        }catch(JSONException e){
            e.printStackTrace();
        }
        return jsonRootObject;
    }

    protected void onPostExecute(JSONObject result){
        try {

            //Iterate the jsonArray and print the info of JSONObjects

            JSONArray jsonArray = jsonRootObject.getJSONArray("name");

            for(int i=0; i < jsonArray.length(); i++) {
                JSONObject name_0 = jsonArray.getJSONObject(i);
                catname = name_0.getString("").toString();
            }
          /*  JSONArray jsonArray2 = jsonRootObject.getJSONArray("brand_name");
            JSONObject brand = jsonArray2.getJSONObject(0);
            brandname = brand.getString("brand_title[0]");*/
                //loat salary = Float.parseFloat(jsonObject.optString("salary").toString());

            sname.setText(catname);
            //bname.setText(brandname);
        } catch (JSONException e) {e.printStackTrace();}
    }
    }

}

【问题讨论】:

  • “我无法从这个 JSON 中检索数据” 以什么方式?问题是什么 ?有没有抛出异常?发布你的 logcat。

标签: java android json android-asynctask


【解决方案1】:

尝试替换:

JSONArray jsonArray = jsonRootObject.getJSONArray("name");

与:

JSONArray jsonArray = jsonRootObject.getJSONObject("category").getJSONArray("name");

【讨论】:

    【解决方案2】:

    当你这样做时:

    jsonRootObject = new JSONObject(result);
    

    您将获取整个 JSONobject 字符串本身,因此您只需要获取类别对象:

    jsonRootObject = jsonRootObject.getJSONObject("category")
    

    然后就可以从类别中获取数组了:

    JSONArray jsonArray = jsonRootObject.getJSONArray("name");
    

    【讨论】:

      【解决方案3】:

      尝试像这样解析。这将为您提供所需的名称和品牌名称

      // Declare outside onCreate
      JSONObject topObject;
      JSONObject category;
      JSONArray name;
      String json;
      JSONArray brand_title;
      
      
      // the parsing
      
          json = "{\"category\":{\"name\":[\"Spa\",\"Salon\",\"Makeup\"],\"brand_title\":[\"Aura Thai Spa- Greater Kailash 1\"]}}";
      
              try {
                  topObject = new JSONObject(json);
              } catch (JSONException e) {
                  e.printStackTrace();
              }
              try {
                  category = topObject.getJSONObject("category");
              } catch (JSONException e) {
                  e.printStackTrace();
              }
              try {
                  name = category.getJSONArray("name");
              } catch (JSONException e) {
                  e.printStackTrace();
              }
      
              for(int i = 0; i<name.length(); i++){
                  try {
                      String parsedNanes = name.getString(i);
                      Log.i("parsedNames", parsedNanes);
                  } catch (JSONException e) {
                      e.printStackTrace();
                  }
      
              }
      
              try {
                  brand_title = category.getJSONArray("brand_title");
              } catch (JSONException e) {
                  e.printStackTrace();
              }
      
              for(int i = 0; i<brand_title.length(); i++){
                  try {
                      String parsedBrandTitles = brand_title.getString(i);
                      Log.i("parsedBrandTitles", parsedBrandTitles);
                  } catch (JSONException e) {
                      e.printStackTrace();
                  }
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-03
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多