2015-06-16 22 views
0

我试图用JSON格式解析并获取URL的值。当URL在浏览器中使用的JSON的格式如下所示:我的json在解析时显示为HTML(android)

{"CompanyID":"1","Message":"Not active user","Success":"false","UserID":"2"} 

JsonParser代码如下所示:

import android.util.Log; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.StatusLine; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 

/** 
* Created by Fathi on 6/16/2015. 
*/ 
public class JsonParser { 
final String TAG = "JsonParser.java"; 

static InputStream is = null; 
static JSONObject jObj = null; 
static JSONArray jArray = null; 
static String result = ""; 

public JSONArray getJSONFromUrl(String url) { 

    // make HTTP request 
    try { 

     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(url); 

     HttpResponse httpResponse = httpClient.execute(httpget); 
     StatusLine statusLine = httpResponse.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     Log.e(TAG, "JSON status code: " + statusCode); 

     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, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "n"); 
     } 
     is.close(); 
     result = sb.toString(); 
     Log.e(TAG, "JSON string: " + result); 

    } catch (Exception e) { 
     Log.e(TAG, "Error converting result " + e.toString()); 
    } 

    // try parse the string to a JSON object 
    try {   
     jArray = new JSONArray(result); 

    } catch (JSONException e) { 
     Log.e(TAG, "Error parsing data " + e.toString()); 
    } 

    // return JSON String 
    return jArray; 
} 

}

我正在使用中的代码我的活动如下:

public class AsyncTaskParseJson extends AsyncTask<String, String, String> { 

    final String TAG = "AsyncTaskParseJson.java"; 

    // set your json string url here 
    String yourJsonStringUrl = "**MY URL COMES HERE**"; 

    // contacts JSONArray 
    JSONArray dataJsonArr = null; 

    @Override 
    protected void onPreExecute() {} 

    @Override 
    protected String doInBackground(String... arg0) { 



     try { 

      // instantiate our json parser 
      JsonParser jParser = new JsonParser(); 

      // get json string from url 

      JSONArray jsonArray = jParser.getJSONFromUrl(yourJsonStringUrl); 


      // loop through all users 
      for (int i = 0; i < jsonArray.length(); i++) { 

       JSONObject c = jsonArray.getJSONObject(i); 

       // Storing each json item in variable 
       String Success = c.getString("Success"); 


       // show the values in our logcat 
       Log.e(TAG, "Success: " + Success); 


      } } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String strFromDoInBg) {} 

我的logcat的是给我下面的错误(我有HTTP响应和字符串):

06-16 03:50:10.841 2470-2489/iss.voltappinterface E/JsonParser.java﹕ JSON  status code: 200 
06-16 03:50:10.911 2470-2489/iss.voltappinterface E/JsonParser.java﹕ JSON string: <html><head><title>Object moved</title></head><body>n<h2>Object moved to <a href="/voln 
06-16 03:50:10.921 2470-2489/iss.voltappinterface E/JsonParser.java﹕ Error parsing data org.json.JSONException: Value <html><head><title>Object of type java.lang.String cannot be converted to JSONObject 

我可以看到我的JSON被处理为HTML出于某种原因,而这正是我不明白,看起来在浏览器中看起来很完美。任何帮助将不胜感激。

+2

检查您的服务器端点是否向您发送Html内容作为响应。 – NullByte

+0

就像Nullbyte说的那样:因为你似乎在打电话给错误的地址,所以你根本没有得到任何JSON。服务器告诉你,你试图创建的电话已经移动。 –

+0

@NullByte感谢您的快速回复,我很抱歉,但是如果您有任何想法,URL是在本地公司服务器上,我不确定它如何简单地“移动”,但是如何调用此电话。再次感谢 –

回答

0

只看您的端点content-type头,它可能text/htmlapplication/json

编辑:作为@Fathi开斋节建议,你可以强制内容类型:

httpget.setHeader("Content-Type", "application/json"); 
httpget.setHeader("Accept", "application/json"); 

请注意,这是一个修复程序,您应该考虑更改api服务器上的响应内容类型,而不是在客户端中。

+0

服务器有Microsoft Visual Studio,它包含了API的所有信息,所以我检查了”endpoint “并在web.config中找到它,但它没有”content-type“。我对服务器不熟悉,因为我没有制作API,我只是试图连接它。 –

+0

您可以尝试在Chrome上使用邮递员扩展程序,并在“标题”标签上查看内容类型。如果无法更改或未​​找到如何操作,可能是SO或ServerFault是正确的地方 –

+0

不知道我的Chrome有什么问题,每当我尝试下载扩展程序时都会出错,我会尽快尝试 –