Android JSON数据被视为XML,如何修复?
我试图显示这个链接中的JSON数据Android JSON数据被视为XML,如何修复?,android,xml,json,Android,Xml,Json,我试图显示这个链接中的JSON数据 我一直得到的错误是:java.lang.string类型的值xml无法转换为JSONObject。但我很确定链接显示的是JSON。有什么建议吗 这就是我到目前为止所做的: public class MainActivity extends Activity { TextView txt1; TextView txt2; //TextView txt3; private static String url = "http://
我一直得到的错误是:java.lang.string类型的值xml无法转换为JSONObject。但我很确定链接显示的是JSON。有什么建议吗 这就是我到目前为止所做的:
public class MainActivity extends Activity {
TextView txt1;
TextView txt2;
//TextView txt3;
private static String url = "http://opendata.rijksoverheid.nl/v1/sources/rijksoverheid/infotypes/schoolholidays/schoolyear/2015-2016?output=json";
private static final String TAG_CONTENT = "content";
private static final String TAG_TITLE = "title";
private static final String TAG_SCHOOLYEAR = "schoolyear";
//private static final String TAG_EMAIL = "email";
JSONArray content = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new JSONParse().execute();
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
protected void onPreExecute() {
super.onPreExecute();
txt1 = (TextView)findViewById(R.id.textView1);
txt2 = (TextView)findViewById(R.id.textView2);
//txt3 = (TextView)findViewById(R.id.textView3);
}
@Override
protected JSONObject doInBackground(String... arg0) {
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(url);
return json;
}
protected void onPostExecute(JSONObject json) {
try {
content = json.getJSONArray(TAG_CONTENT);
JSONObject c = content.getJSONObject(0);
String title = c.getString(TAG_TITLE);
String schoolyear = c.getString(TAG_SCHOOLYEAR);
//String email = c.getString(TAG_EMAIL);
txt1.setText(title);
txt2.setText(schoolyear);
//txt3.setText(email);
} catch(JSONException e) {
e.printStackTrace();
}
}
}
}
public class JSONParser {
static InputStream is = null;
static JSONObject jobj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// HTTP request
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch(UnsupportedEncodingException e) {
e.printStackTrace();
} catch(ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch(Exception e) {
Log.e("Error", "Error converting result" + e.toString());
}
// parse string to JSON object
try {
jobj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data" + e.toString());
}
// return JSON string
return jobj;
}
}
公共类MainActivity扩展活动{
TextView txt1;
TextView txt2;
//TextView-txt3;
专用静态字符串url=”http://opendata.rijksoverheid.nl/v1/sources/rijksoverheid/infotypes/schoolholidays/schoolyear/2015-2016?output=json";
私有静态最终字符串标记_CONTENT=“CONTENT”;
私有静态最终字符串标记_TITLE=“TITLE”;
私有静态最终字符串标记_SCHOOLYEAR=“SCHOOLYEAR”;
//私有静态最终字符串标记\u EMAIL=“EMAIL”;
JSONArray content=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新建JSONParse().execute();
}
私有类JSONParse扩展了异步任务{
受保护的void onPreExecute(){
super.onPreExecute();
txt1=(TextView)findViewById(R.id.textView1);
txt2=(TextView)findViewById(R.id.textView2);
//txt3=(TextView)findViewById(R.id.textView3);
}
@凌驾
受保护的JSONObject doInBackground(字符串…arg0){
JSONParser jParser=新的JSONParser();
JSONObject json=jParser.getJSONFromUrl(url);
返回json;
}
受保护的void onPostExecute(JSONObject json){
试一试{
content=json.getJSONArray(标记内容);
JSONObject c=content.getJSONObject(0);
String title=c.getString(TAG_title);
String schoolyar=c.getString(TAG_schoolyar);
//String email=c.getString(TAG_email);
txt1.setText(标题);
txt2.setText(学年);
//txt3.setText(电子邮件);
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
}
公共类JSONParser{
静态InputStream为空;
静态JSONObject jobj=null;
静态字符串json=“”;
//建造师
公共JSONParser(){
}
公共JSONObject getJSONFromUrl(字符串url){
//HTTP请求
试一试{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
为“utf-8”)、8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
json=sb.toString();
}捕获(例外e){
Log.e(“错误”,“错误转换结果”+e.toString());
}
//将字符串解析为JSON对象
试一试{
jobj=新的JSONObject(json);
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
//返回JSON字符串
返回jobj;
}
}
就加载JSON文件而言,您可以使用异步任务下载JSON文件
既然您提到了术语largescale
,我假设您在阅读JSON文件时希望获得一些快速性能
您可以尝试使用一些json解析库,而不是使用本机包(org.json)
希望这能有所帮助。显然,在这一行中,将HttpPost更改为HttpGet就成功了。。不知道为什么
HttpPost httpPost = new HttpPost(url);
to
HttpGet httpPost = new HttpGet(url);
你能详细说明你面临的问题吗?你面临的问题是什么。您的JSON数据似乎足够简单,可以轻松解析。我一直得到的错误是:java.lang.string类型的值xml无法转换为JSONObject。但我很确定链接显示的是JSON。有什么建议吗?我以为我把标签写错了。但它似乎只是将数据视为xml,而不是json。有没有办法改变这种状况?因为?output=json标记应该会改变这一点。