私は今、何時間もこれを理解しようとしています。答えを探しましたが、答えが見つかりません。今まで質問したことがなかったので、初めて質問させていただきます。基本的に私がやっていることは、組織化のためにコーディングを分割することです。次のスニペットは問題なく動作しますが、それを別のクラスに配置すると、urlConnect(); うまく接続します。以下にマークを付けました。
public String downloadUrl(String strUrl) throws IOException{
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try{
URL url = new URL(strUrl);
String line = "";
// Creating an http connection to communicate with url
urlConnection = (HttpURLConnection) url.openConnection();
/* Connecting to url */
urlConnection.connect(); <-------------------------works in this snippet
/* Reading data from url */
iStream = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
StringBuffer sb = new StringBuffer();
while((line = br.readLine()) != null){
sb.append(line);
}
data = sb.toString();
br.close();
}
catch(Exception e){
Log.d("Exception while downloading url", e.toString());
}
finally {
iStream.close();
urlConnection.disconnect();
}
return data;
}
したがって、この次のスニペットはほとんど同じです。しかし、何らかの理由で接続したくない:
public String getJSONobject(String strUrl) throws IOException{
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try{
URL url = new URL(strUrl);
String line = "";
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect(); <------------------ Does not work
iStream = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
StringBuffer sb = new StringBuffer();
while((line = br.readLine()) != null){
sb.append(line);
}
data = sb.toString();
br.close();
iStream.close();
}
catch (MalformedURLException e1) {
e1.printStackTrace();
}
catch (IOException e1) {
e1.printStackTrace();
}
finally {
if(null != urlConnection) { urlConnection.disconnect();
}
return data;
LogCat:
>at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1131)
>at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
>at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
>at java.net.InetAddress.getAllByName(InetAddress.java:214)
>at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
>at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
>at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
>at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
>at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
>at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
>at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
>at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
>at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
>at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
>at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
>at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165)
>at com.navsquad.shsu.katlas2.RouteJSONobject.getJSONobject(RouteJSONobject.java:57)
>at com.navsquad.shsu.katlas2.CreateRoute.create(CreateRoute.java:41)
>at com.navsquad.shsu.katlas2.MainActivity$3.onMapClick(MainActivity.java:84)
>at com.google.android.gms.maps.GoogleMap$6.onMapClick(Unknown Source)
>at com.google.android.gms.internal.t$a.onTransact(Unknown Source)
>at android.os.Binder.transact(Binder.java:326)
>at com.google.android.gms.maps.internal.IOnMapClickListener$Stub$Proxy.onMapClick(IOnMapClickListener.java:93)
>at maps.i.s.b(Unknown Source)
>at maps.y.v.c(Unknown Source)
>at maps.y.bf.onSingleTapConfirmed(Unknown Source)
>at maps.d.v.onSingleTapConfirmed(Unknown Source)
>at maps.d.j.handleMessage(Unknown Source)
>at android.os.Handler.dispatchMessage(Handler.java:99)
>at android.os.Looper.loop(Looper.java:137)
>at android.app.ActivityThread.main(ActivityThread.java:5059)
>at java.lang.reflect.Method.invokeNative(Native Method)
>at java.lang.reflect.Method.invoke(Method.java:511)
>at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
>at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
>at dalvik.system.NativeStart.main(Native Method)
繰り返しになりますが、私が行っていたのは、自分の組織用に別のクラスを作成したことだけでした。もともとパーサーが含まれていましたが、現在は別のクラスに分割しているため、文字列/JSON オブジェクトで他のパーサーを使用できます。以前と何が違うのかを理解するのを手伝っていただければ幸いです。元のクラスは、実装された AsyncTask クラスにありました。