我試圖從Android中的Google Directions服務器檢索JSON數據。但是獲取輸入流失敗並拋出異常。我收到錯誤消息,,空」,而InputStream爲空Android -urlConnection.getInputStream()失敗 - InputStream保留爲空
我在做什麼錯誤的HTTP連接的URL正在我的瀏覽器
private String doRequest() {
String response = null;
HttpURLConnection urlConnection = null;
InputStream in = null;
URL url = null;
String queryString ="https://maps.googleapis.com/maps/api/directions/json?origin=40.71926430971954,-74.26603317260742&destination=40.74309523218185," +
"-74.24732208251953&sensor=false&mode=walking&alternatives=true&key=AIzaSyASF2b0E0HHilJL5I936vqRbiBjM5XuPRA";
try {
url = new URL(queryString);
urlConnection = (HttpURLConnection) url.openConnection();
in = urlConnection.getInputStream();
}
catch (Exception e) {
{
StringBuilder builder = new StringBuilder();
if (response == null)
builder.append("Response is null.");
if (url == null)
builder.append("url is null.");
if (urlConnection == null)
builder.append("UrlConnection is null.");
if (in == null)
builder.append("Inputstream is null.");
return builder.toString() +e.getMessage();
}
} finally {
if (urlConnection != null)
urlConnection.disconnect();
}
if (response == null)
{
return "sorry, response is null. At least it passed the exceptions.";
}
return response;
}
EDIT?:
編輯2:
好吧,我已經嘗試了各種建議的組合。現在當我執行代碼時,什麼都沒有發生。我無法打開對話框,所以我不知道這次是什麼問題。
public void getJSON(View v)
{
AsyncTask<String, Void, String>hello = new GetData(this).execute(queryString);
}
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.http.HttpsConnection;
import android.os.AsyncTask;
import android.support.v7.app.AlertDialog;
import android.view.View;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl。HttpsURLConnection的;
(公共類的GetData擴展的AsyncTask)
{
private Exception exception;
public String response;
private Context context;
private ProgressDialog dialog = null;
public GetData(Context context)
{
this.context = context;
}
protected String doInBackground(String... urls)
{
this.response = doRequest(urls[0]);
return response;
}
protected void onPostExecute() {
// TODO: check this.exception
// TODO: do something with the feed
if (this.exception != null && response != null)
{
getDialog(getResponse(), context).show();
}
else
{
getDialog("sorry" + exception.getMessage(), context).show();
}
}
private String doRequest(String queryString) {
String response1 = null;
HttpsURLConnection urlConnection = null;
InputStream in = null;
URL url = null;
try {
url = new URL(queryString);
urlConnection =(HttpsURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET"); // or POST
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
int responseCode = urlConnection.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK)
{
in = urlConnection.getInputStream();
response1 = convertStreamToString(in);
}
} catch (Exception e) {
{
StringBuilder builder = new StringBuilder();
if (response1 == null)
builder.append("Response is null.");
if (url == null)
builder.append("url is null.");
if (urlConnection == null)
builder.append("UrlConnection is null.");
if (in == null)
builder.append("Inputstream is null.");
return builder.toString() + e.getMessage();
}
}
finally
{
if (urlConnection != null)
urlConnection.disconnect();
}
if (response1 == null)
{
return "sorry, response is null. At least it passed the exceptions.";
}
return response1;
}
private String convertStreamToString(java.io.InputStream is)
{
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
public String getResponse()
{
return this.response;
}
public Dialog getDialog(String string, Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(string);
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
return builder.create();
}
檢查互聯網連接 –
請張貼您的導入包爲HttpURLConnection。 –
e.getMessage()包含什麼? – greenapps