【发布时间】:2016-11-20 10:04:38
【问题描述】:
我正在创建一个 Android 项目,其中 ActivityMain 使用 HttpURLConnection 连接到 PHP 文件(在本地服务器,localhost 中);
我对以下代码行有疑问:
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 行)
谢谢。
【问题讨论】:
-
permission.INTERNET已在您的应用中设置?您的捕获错过了SecurityException。 -
getErrorStream()调用可能会返回null,而您有一个NullPointerException。到目前为止的答案建议使用输入流,如果您打算从服务器读取实际响应,这听起来是正确的选择。如果是您要读取的错误流,请在尝试读取之前检查它不是null。 -
是的,对不起,我发布的部分有错误,在项目中我写了 bufferedReader = new BufferedReader(new InputStreamReader((conn.getInputStream())));
-
status能得到什么? -
这是一个尝试我忘记评论的东西的行
标签: android httpurlconnection inputstreamreader