Ошибка получения JSON через HTTPS
Добавлено: 24 июн 2014, 23:18
Пол дня бьюсь, не могу понять как решить проблему, имею логин систему вида:
[syntax=java]https://www.app.com/app/login.cgi + "?login=" + email + "&password=" + password + "&sign=" + hexString.toString();[/syntax]
Реализовано это следующим образом:
[syntax=java]private class ProcessLogin extends AsyncTask<Void, Void, Void> {
String email, password, key;
@Override
protected void onPreExecute() {
super.onPreExecute();
inputEmail = (EditText) findViewById(R.id.email);
inputPassword = (EditText) findViewById(R.id.pword);
email = inputEmail.getText().toString();
password = inputPassword.getText().toString();
key = "EaG6wB6VlWuemy_b0nq_HsPyYKkOaA";
}
@Override
protected Void doInBackground(Void... params) {
String conc = email + password + key;
MessageDigest md5 = null;
StringBuilder hexString = new StringBuilder();
try {
md5 = MessageDigest.getInstance("md5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
md5.reset();
md5.update(conc.getBytes());
byte messageDigest[] = md5.digest();
for (int i = 0; i < messageDigest.length; i++) {
hexString.append(Integer.toHexString(0xFF & messageDigest));
}
hexString.toString();
JSONArray mainjson = JSONfunctions2.getJSONfromURL(loginURL + "?login=" + email +
"&password=" + password + "&sign=" + hexString.toString());
try {
String success = mainjson.getJSONObject(0).getString("status");
prefsmain2.edit().putString("SUCCESS", success).commit();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args) {
String suc = prefsmain2.getString("SUCCESS", "Default");
Toast.makeText(LoginActivity.this, suc + "", Toast.LENGTH_LONG).show();
}
}[/syntax]
Касательно JSONAdapter - соединение происходит через https - вполне возможно, что проблем в этом, тем не менее код класса:
[syntax=java5]public class JSONfunctions2 {
public static JSONArray getJSONfromURL(String url) {
InputStream is = null;
String result = "";
JSONArray jArray = null;
HttpsURLConnection con = null;
try {
URL url1 = new URL(url);
con = (HttpsURLConnection)url1.openConnection();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
con.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
try {
jArray = new JSONArray(result);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return jArray;
}
}[/syntax]
В ответ должен приходить JSON вида:
[syntax=php]{ "status": "success",
"message": "",
"session_id": "asdasddfcvxgdgfdfv",
"user":
[{ "company": "company",
"last_name": "last_name·",
"name": "name",
"middle_name": "middle_name",
"phone": "+1234567890",
"photo": "avatar.png" }] }[/syntax]
Но вместо этого приходит NPE в виде null:
Что делать и как быть? Ребята, помогайте.
[syntax=java]https://www.app.com/app/login.cgi + "?login=" + email + "&password=" + password + "&sign=" + hexString.toString();[/syntax]
Реализовано это следующим образом:
[syntax=java]private class ProcessLogin extends AsyncTask<Void, Void, Void> {
String email, password, key;
@Override
protected void onPreExecute() {
super.onPreExecute();
inputEmail = (EditText) findViewById(R.id.email);
inputPassword = (EditText) findViewById(R.id.pword);
email = inputEmail.getText().toString();
password = inputPassword.getText().toString();
key = "EaG6wB6VlWuemy_b0nq_HsPyYKkOaA";
}
@Override
protected Void doInBackground(Void... params) {
String conc = email + password + key;
MessageDigest md5 = null;
StringBuilder hexString = new StringBuilder();
try {
md5 = MessageDigest.getInstance("md5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
md5.reset();
md5.update(conc.getBytes());
byte messageDigest[] = md5.digest();
for (int i = 0; i < messageDigest.length; i++) {
hexString.append(Integer.toHexString(0xFF & messageDigest));
}
hexString.toString();
JSONArray mainjson = JSONfunctions2.getJSONfromURL(loginURL + "?login=" + email +
"&password=" + password + "&sign=" + hexString.toString());
try {
String success = mainjson.getJSONObject(0).getString("status");
prefsmain2.edit().putString("SUCCESS", success).commit();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args) {
String suc = prefsmain2.getString("SUCCESS", "Default");
Toast.makeText(LoginActivity.this, suc + "", Toast.LENGTH_LONG).show();
}
}[/syntax]
Касательно JSONAdapter - соединение происходит через https - вполне возможно, что проблем в этом, тем не менее код класса:
[syntax=java5]public class JSONfunctions2 {
public static JSONArray getJSONfromURL(String url) {
InputStream is = null;
String result = "";
JSONArray jArray = null;
HttpsURLConnection con = null;
try {
URL url1 = new URL(url);
con = (HttpsURLConnection)url1.openConnection();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
con.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
try {
jArray = new JSONArray(result);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return jArray;
}
}[/syntax]
В ответ должен приходить JSON вида:
[syntax=php]{ "status": "success",
"message": "",
"session_id": "asdasddfcvxgdgfdfv",
"user":
[{ "company": "company",
"last_name": "last_name·",
"name": "name",
"middle_name": "middle_name",
"phone": "+1234567890",
"photo": "avatar.png" }] }[/syntax]
Но вместо этого приходит NPE в виде null:
Код: Выделить всё
Error converting result java.lang.NullPointerException
Error parsing data org.json.JSONException: End of input at character 0 of