PDA

View Full Version : json در اندروید 2.3 با اندروید 4 فرقی میکنه؟



reza_azizi2010
پنج شنبه 05 دی 1392, 23:47 عصر
سلام
من یک رشته json از سرور میگیرم، با اندروید 4 به بالا مشکلی نداره و راحت به آرایه تبدیل میشه
اما با اندروید 2.3 مشکل داره
هم توی امولاتور هم تو گوشی
json رو میگیره اما میگه نمیتوتن تبدیلش کنم
درحالی که دقیقا همین رو توی اندروید 4 تبدیل میکنه
ممنون میشم راهنمایی کنید

rubiks.kde
جمعه 06 دی 1392, 00:45 صبح
شما خروجی خطا رو بزار

reza_azizi2010
جمعه 06 دی 1392, 08:45 صبح
خطا ها بصورت زرد رنگ هستن


12-27 09:27:45.250: W/System.err(391): org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONArray
12-27 09:27:45.270: W/System.err(391): at org.json.JSON.typeMismatch(JSON.java:107)
12-27 09:27:45.270: W/System.err(391): at org.json.JSONArray.<init>(JSONArray.java:91)
12-27 09:27:45.270: W/System.err(391): at org.json.JSONArray.<init>(JSONArray.java:103)


رشته ای که میگیره، دقیقا همونیه که توی اندروید 4 میگیره، جفتشو مقایسه کردم دقیقا یکیه.
توی استک هم چند نفری به این مشکل خوردن، اما راه حل تایید شده ای پیدا نکردم

rubiks.kde
جمعه 06 دی 1392, 11:17 صبح
من هم قبلا چنین مشکلی داشتم و این خطا رو میداد : unknown format (magic number 227b)

بعد به این صورت کلاس json رو نوشتم درست شد.

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

private Context _context;

// constructor
public JSONParser(Context context) {

this._context = context;
}

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

if(!ConnectionDetector.isConnectingToInternet(_con text)){
return jObj;
}
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
//httpPost.setEntity(new UrlEncodedFormEntity(params));

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();

} catch (Exception 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("Buffer Error", "Error converting result " + e.toString());
}

// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (Exception e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}

// return JSON String
return jObj;

}

public JSONObject getInfo(String url){

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
get.addHeader("Accept-Encoding", "gzip");
try {
HttpResponse response = client.execute(get);
InputStream instream = response.getEntity().getContent();
Header contentEncoding = response.getFirstHeader("Content-Encoding");

if (contentEncoding.getValue().equalsIgnoreCase("gzip")) {

try {
instream = new GZIPInputStream(instream);

final int BUFFER_SIZE = 32;
GZIPInputStream gis = new GZIPInputStream(instream, BUFFER_SIZE);
StringBuilder string = new StringBuilder();
byte[] data = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = gis.read(data)) != -1) {
string.append(new String(data, 0, bytesRead));
}
gis.close();

String str = string.toString();
Log.i("json", str);
JSONObject jobj = new JSONObject(str);
return jobj;
} catch (Exception e) {
e.printStackTrace();
if(e.toString().contains("unknown format (magic number 227b)")){
return getagain(url);
}
return null;
} finally {
instream.close();
}
}
} catch (IOException e) {
e.printStackTrace();
return null;
}

return null;

}

private JSONObject getagain(String url){

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
get.addHeader("Accept-Encoding", "gzip");
try {
HttpResponse response = client.execute(get);
InputStream instream = response.getEntity().getContent();
Header contentEncoding = response.getFirstHeader("Content-Encoding");

if (contentEncoding.getValue().equalsIgnoreCase("gzip")) {

try {
//instream = new GZIPInputStream(instream);

final int BUFFER_SIZE = 32;
GZIPInputStream gis = new GZIPInputStream(instream, BUFFER_SIZE);
StringBuilder string = new StringBuilder();
byte[] data = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = gis.read(data)) != -1) {
string.append(new String(data, 0, bytesRead));
}
gis.close();

String str = string.toString();

JSONObject jobj = new JSONObject(str);
return jobj;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} finally {
instream.close();
}
}
} catch (IOException e) {
e.printStackTrace();
return null;
}

return null;

}
}

reza_azizi2010
جمعه 06 دی 1392, 22:25 عصر
شما یادتون هست چه چیزی رو تغییر دادین که مشکل رفع شد؟
کلاس وب سرویسم اینه :
میشه بگین من کجا رو باید تغییر بدم؟

public class Webservice {

public static String readUrl(String url, ArrayList<NameValuePair> params) {
try {
HttpResponse response;
HttpClient client = new DefaultHttpClient();
final HttpParams para = client.getParams();
HttpConnectionParams.setConnectionTimeout(para, G.Time_Out);
HttpConnectionParams.setSoTimeout(para, G.Time_Out * 2);
// HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);

HttpPost method = new HttpPost(url);
if (params != null) {
method.setEntity(new UrlEncodedFormEntity(params));
}
response = client.execute(method);
G.response_temp = response.getStatusLine().getStatusCode();
InputStream inputStream = response.getEntity().getContent();
String result = convertInputStreamToString(inputStream);

return result;
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}

return null;
}


public static String convertInputStreamToString(InputStream inputStream) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();

String line = "";

while ((line = reader.readLine()) != null) {
builder.append(line);
}

return builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}

return null;
}
}

armsoftpc
سه شنبه 21 مرداد 1393, 16:48 عصر
سلام
دوستان جوابی برای این سوال ندارند..
منم این مشکل رو دارم.

majnoon110
سه شنبه 21 مرداد 1393, 17:13 عصر
یه سری به اینجا بزن
http://stackoverflow.com/questions/11064244/json-parsing-works-on-android-4-0-but-not-on-android-4-0