I setUserVisibleHint (boolean isVisibleToUser) von Fragment in Android haben, die ist, wenn "True" macht HttpURLConnection auf Remote-Datenbank und Daten abgerufen werden. Allerdings bekomme ich Fehler bei data = getJSONData(); (Zeile 14). Ich habe keinen Kompilierungsfehler, aber in der Laufzeit scheitert es, kann jemand mir mit dem Fehler helfen, den ich mache.NetworkOnMainThreadException in setUserVisibleHint von Fragment in Android
komplette Code ist dies:
public class Cafeteria extends Fragment {
InputStream in = null;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View fragView = inflater.inflate(R.layout.commonlayout, container, false);
return fragView;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
MainActivity.googleMap.clear();
String data= null;
try {
data = getJSONData();
} catch (IOException e) {
e.printStackTrace();
}
MarkerDisplay(data);
}
else{}
}
private String getJSONData() throws IOException{
String myurl = "http://10.52.23.10/project/getCafeteriaData.php";
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try{
conn.setDoInput(true);
conn.setRequestMethod("GET");
if (conn.getResponseCode()==200){
in= conn.getInputStream();
}
else{
Log.d("DEBUG_TAG", "The Response Code Obtained is: " +conn.getResponseCode());
}
in = new BufferedInputStream(in);
InputStreamReader is = new InputStreamReader(in);
BufferedReader br = new BufferedReader(is);
String read = br.readLine();
return read;
}
finally {
conn= null;
}
}
public void MarkerDisplay(String read) {
String str1= read; // Odata is original Stream Data
double slat, slng;
String sdesc;
try {
String delimiters1 = " ";
String[] str2 = str1.split(delimiters1);
for (int i = 0; i < str2.length; i++){
String delimiters2 = ",";
String[] mappairs = str2[i].split(delimiters2);
//Convert all the string to double and int
slat = Double.parseDouble(mappairs[0].substring(8));
slng = Double.parseDouble(mappairs[1].substring(9));
sdesc=mappairs[2].substring(11);
LatLng latLngob = new LatLng(slat, slng);
MainActivity.googleMap.addMarker(new MarkerOptions().position(new LatLng(slat, slng)).icon(BitmapDescriptorFactory.fromResource(R.drawable.cafeteriamarker)).title(sdesc));
}//else completes
}//try ends here
catch (Exception e) {
e.printStackTrace();
}
}
}
Mögliche Duplikat [? Wie beheben android.os.NetworkOnMainThreadException] (http://stackoverflow.com/questions/6343166/how-to-fix-android-os-netzwerkanmainthreadexception) – Nirekin