HttpURLConnection .getInputStream() перестать работать
Я создаю проект Android, где ActivityMain подключается к файлу PHP (на локальном сервере, localhost) с помощью HttpURLConnection;
У меня проблема со следующей строкой кода:
bufferedReader = new BufferedReader(new InputStreamReader((conn.getErrorStream())));
Когда я запускаю проект, приложение останавливается на этом этапе, без каких-либо ошибок.
В чем проблема?
Я сообщаю часть кода здесь:
public class SendToLogin extends AsyncTask<String, Object, String> {
//private EditText usernameField,passwordField;
private String username, password;
private Context context;
private Boolean loggato = false;
JSONObject rspJ;
public SendToLogin(String usr, String psw, Context c) {
username = usr;
password = psw;
context = c;
}
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
String link = params[0] + "?username=" + username.toString() + "&password=" + password.toString();
URL url = null;
HttpURLConnection conn = null;
BufferedReader bufferedReader = null;
String result = "";
String line = "";
try {
url = new URL(link);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(1000);
conn.setDoInput(true);
int status = conn.getResponseCode();
bufferedReader = new BufferedReader(new InputStreamReader((conn.getErrorStream())));
while ((line = bufferedReader.readLine()) != null) {
result += line + "\n";
}
bufferedReader.close();
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
//super.onPostExecute(aVoid);
String result = s;
JSONObject reader = null;
try {
reader = new JSONObject(result);
String query_result = reader.getString("msg");
if(query_result.toString() == "ok")
new ListaUtenti();
else {
Toast loginErrorToast = Toast.makeText(context, "Errore! login errato!", Toast.LENGTH_SHORT);
}
} catch (JSONException e) {
e.printStackTrace();
}
//new ReceiveToLogin().execute();
}
}
(PHP-код возвращает строку JSON правильно, когда я использую браузер, чтобы проверить это)
Спасибо вам.
3 ответа
conn.getErrorStream()
должно бытьconn.getInputStream()
как заявлено @mallaudinsuper.onPostExecute(aVoid);
не следует комментировать. Так должно бытьsuper.onPostExecute(s);
- В строке сравнения Java это как
query_result.toString().equals('ok')
не какquery_result.toString()=='ok'
- Можете ли вы войти
status
переменная вместо комментария?
Вам нужно позвонить conn.connect()
до получения потока.
conn.connect(); // connect before getting stream
bufferedReader = new BufferedReader(new InputStreamReader((conn.getInputStream())));
Также вы возвращаетесь null
от doInBackground
и у вас нет нулевой регистрации onPostExecute
что приведет к NullPointerException
на reader = new JSONObject(result);
в случае исключения в фоновом режиме.
@Override
protected void onPostExecute(String s) {
//super.onPostExecute(aVoid);
String result = s; // check null here.
JSONObject reader = null;
Я следовал приведенному ниже коду отсюда, и он работает нормально для меня
// Given a URL, establishes an HttpUrlConnection and retrieves
// the web page content as a InputStream, which it returns as
// a string.
private String downloadUrl(String myurl) throws IOException {
InputStream is = null;
// Only display the first 500 characters of the retrieved
// web page content.
int len = 500;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
int response = conn.getResponseCode();
Log.d(DEBUG_TAG, "The response is: " + response);
is = conn.getInputStream();
// Convert the InputStream into a string
String contentAsString = readIt(is, len);
return contentAsString;
// Makes sure that the InputStream is closed after the app is
// finished using it.
} finally {
if (is != null) {
is.close();
}
}
}
// Reads an InputStream and converts it to a String.
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
Смотрите консоль для кода ответа и ответа