Napisalem sobie klase, ktorej zadaniem jest pobieranie danych stad http://maps.googleapis.com/maps/api/geocode/json?address=Gosprzydowa&sensor=true, potrzebuje pobrac tylko to co jest "long_name" w "address_components"
Oto ta klasa:
package com.example.lukasz.test;
import android.os.Build;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.Scanner;
/**
* Created by lukasz on 26.09.15.
*/
public class WebService {
public static JSONArray requestWebService(String serviceUrl) {
final int CONNECTION_TIMEOUT = 300;
final int DATARETRIEVAL_TIMEOUT = 600;
disableConnectionReuseIfNecessary();
HttpURLConnection urlConnection = null;
try {
URL urlToRequest = new URL(serviceUrl);
urlConnection = (HttpURLConnection)
urlToRequest.openConnection();
urlConnection.setConnectTimeout(CONNECTION_TIMEOUT);
urlConnection.setReadTimeout(DATARETRIEVAL_TIMEOUT);
InputStream in = new BufferedInputStream( //TUTAJ TEORETYCZNIE POKAZUJE ZE PROGRAM SIE WYKRACZA, ALE DLACZEGO?
urlConnection.getInputStream());
JSONObject result = new JSONObject(getResponseText(in));
JSONArray address_components = result.getJSONArray("address_components");
return address_components;
} catch (MalformedURLException e) {
System.out.println("Nie ma takiego miasta");
} catch (SocketTimeoutException e) {
} catch (IOException e) {
} catch (JSONException e) {
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return null;
}
private static void disableConnectionReuseIfNecessary() {
if (Build.VERSION.SDK_INT
< Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
}
private static String getResponseText(InputStream inStream) {
return new Scanner(inStream).useDelimiter("\\A").next();
}
}
jej wywolanie nastepuje, na skutek kliknieca elementu listView . Tutaj jest kod interfejsu do obslugi tego klikniecia
@EBean
public class ListClickListener implements AdapterView.OnItemClickListener {
@Background
public void doInBackground(String cityName) {
// String address = "http://maps.googleapis.com/maps/api/geocode/json?address=" + cityName + "&sensor=true";
String address = "http://maps.googleapis.com/maps/api/geocode/json?address=Gosprzydowa&sensor=true";
JSONArray address_components = WebService.requestWebService(address);
String infos[] = new String[address_components.length()];
for (int i = 0; i < infos.length; i++) {
try {
JSONArray name = address_components.getJSONArray(0);
infos[i] = name.getString(0);
System.out.println(infos[i]);
} catch (JSONException ex) {
}
}
}
@UiThread
void showResult(String translatedText) {
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String cityName = GetCityName.citiesNames.get(position);
Toast.makeText(view.getContext(), cityName, Toast.LENGTH_SHORT).show();
doInBackground(cityName);
}
}
a tutaj to co mi wywala, po wcisnieciu elementu listView
09-26 13:15:09.043 4136-4136/com.example.lukasz.test E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.lukasz.test, PID: 4136
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
at com.example.lukasz.test.WebService.requestWebService(WebService.java:36)
at com.example.lukasz.test.ListClickListener.doInBackground(ListClickListener.java:45)
at com.example.lukasz.test.ListClickListener.onItemClick(ListClickListener.java:69)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3042)
at android.widget.AbsListView$3.run(AbsListView.java:3879)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Z gory dzieki za wszelka pomoc!!!!