从网站解析特定JSON数据并在TextView中显示

时间:2013-11-08 01:39:02

标签: android json

我希望从我的网站JSON url中提取数据,并在textview中只显示一个对象。我能够解析整个JSON数组,但不解析特定对象。

这是网站上的JSON:

{“id”:3,“day”:“a A”,“created_at”:“2013-11-06T12:30:59.023Z”,“updated_at”:“2013-11-06T12:30:59.023 Z“}

正如您所看到的,它非常简单,但基本上我想要的是

  

“day”:“a A”

并在我的textview中显示为“a A”。到现在为止,我只能拉出整个阵列。

非常感谢您对此或任何解决方案的参考!

提前致谢!

MainActivity类:

  

公共类MainActivity扩展了Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.parseDay);
    TextView textView1 = null;

    try {
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try{
        JSONObject json=new JSONObject("day");
        try {
        String day =json.getString("day");
        textView1.setText(day);
        } catch (JSONException e) {
        e.printStackTrace();
        }

    }
    //catch (JSONException e) {
         // e.printStackTrace();
        //} 
    catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

和我的GetMethod:

  

公共类GetMethod {

public String getInternetData() throws Exception {
    BufferedReader in = null;
    String data = null;
    try { 
        HttpClient client = new DefaultHttpClient();
        URI website = new URI("http://www.xelatechnologies.com/hfdays/show.json");

        HttpGet request = new HttpGet();
        request.setURI(website);
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");
        while ((l = in.readLine()) !=null) {
            sb.append(l + nl);
        }

        in.close();
        data = sb.toString();
        return data;
    }
    finally { 
        if (in !=null){
            try{
                in.close();
                return data;
            }catch (Exception e){
                e.printStackTrace();

            }
        }

    }
}

我对JSON解析非常陌生,所以我确定它根本不对。但值得一试!

2 个答案:

答案 0 :(得分:0)

{"id":3,"day":" an A","created_at":"2013-11-06T12:30:59.023Z","updated_at":"2013-11-06T12:30:59.023Z"}

'{'开始,因此它是Object而不是Array

JSONObject json=new JSONObject("YOUR_JSON_STRING");
try {
String days=json.getString("day");
textview.setText(days);
} catch (JSONException e) {
e.printStackTrace();
}

编辑:

TextView textView1;
String response;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.parseDay);
    textView1 = (TextView)findViewById(R.id.your_textview_id);//First Initialise TextView
    GetMethod method=new GetMethod();
    response=method. getInternetData();// Then get the Json response

    try{
        JSONObject json=new JSONObject(response);
        try {
        String day =json.getString("day");
        textView1.setText(day);
        } catch (JSONException e) {
        e.printStackTrace();
        }

    }
    catch (JSONException e) {
          e.printStackTrace();
        } 
    catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

并且不要忘记在清单文件中添加Internet权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

试试这样。

答案 1 :(得分:0)

您发布的JSON是JSONObject。在java中,您可以将该对象放入这样的JSONObject中(您可以使用任何您想要的序列化/反序列化器,许多存在,对于此示例,请尝试使用org.json):

String json = "{\"id\":3,\"day\":\" an A\",\"created_at\":\"2013-11-06T12:30:59.023Z\",\"updated_at\":\"2013-11-06T12:30:59.023Z\"}";
JSONObject jsonObject = new JSONObject(json);

现在您已经创建了一个json对象。接下来,您要在文本视图上设置文本。在这种情况下获得价值的关键是“日”。所以你现在要做的就是在json对象上使用提供的getString(String value)方法。

final String DAY = "day";
String dayValue= "";
try {
    value = jsonObject.getString(DAY);
} catch (JSONException e) {
    e.printStackTrace();
}
TextView textView = findViewById(R.id.text_view);
textView.setText(dayValue);