2015-06-16 2 views
0

Я пытаюсь разобрать и получить значения из URL с форматом JSON. Формат JSON когда URL используется в браузере показано ниже:Мой 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) {} 

My 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/html и должны бытьapplication/json

Редактировать: Как @Fathi Ид предполагают, вы можете заставить Content-Type:

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

Обратите внимание, что это исправление, и вы должны действительно рассмотреть возможность изменения типа содержимого ответа на сервере api, а не на клиенте.

+0

На сервере Microsoft Visual Studio, который содержит всю информацию API и т. д., я проверил на «конечную точку» »и нашел его в web.config, но у него нет« содержимого-типа ». Я не очень опытен с сервером, так как я не делал API, я просто пытаюсь подключиться к нему. в нужном месте? –

+0

вы можете попытаться использовать расширения Postman в Chrome и увидеть на вкладке «заголовки» тип содержимого. Если вы не можете его изменить или не нашли, как это сделать, возможно, SO или ServerFault - это right place –

+0

Не знаете, что не так с моим хром, получая сообщение об ошибке, когда я пытаюсь загрузить расширение, я попробую его, как только смогу –

Смежные вопросы