2017-05-10 6 views
0

Ich habe Probleme mit diesem Code. Das variable Ergebnis sollte aus der Antwort des Servers gefüllt werden, aber aus irgendeinem Grund wird eine leere Zeichenfolge zurückgegeben.Leere Zeichenfolge beim Lesen von Daten vom Server gesendet

Dies ist der gesamte Code:

public class FragmentRally extends Fragment { 

public FragmentRally() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_fragment_rally, container, false); 


    new AsyncFetch().execute(); 


    return rootView; 
} 


// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds 
public static final int CONNECTION_TIMEOUT = 10000; 
public static final int READ_TIMEOUT = 15000; 
private RecyclerView vistaRallye; 
private AdapterRallye adaptadorRallye; 

private class AsyncFetch extends AsyncTask<String, String, String> { 
    ProgressDialog pdLoading = new ProgressDialog(getActivity()); 
    HttpURLConnection conn; 
    URL url = null; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     //this method will be running on UI thread 
     pdLoading.setMessage("\tCarregant..."); 
     pdLoading.setCancelable(false); 
     pdLoading.show(); 

    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 

      // Enter URL address where your json file resides 
      // Even you can make call to php file which returns json data 
      url = new URL("http://www.rallyecat.esy.es/Obtenir_events.php"); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return e.toString(); 
     } 
     try { 

      // Setup HttpURLConnection class to send and receive data from php and mysql 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(READ_TIMEOUT); 
      conn.setConnectTimeout(CONNECTION_TIMEOUT); 
      conn.setRequestMethod("GET"); 

      // setDoOutput to true as we recieve data from json file 
      conn.setDoOutput(true); 

     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
      return e1.toString(); 
     } 

     try { 

      int response_code = conn.getResponseCode(); 

      // Check if successful connection made 
      if (response_code == HttpURLConnection.HTTP_OK) { 

       // Read data sent from server 
       InputStream input = conn.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
       StringBuilder result = new StringBuilder(); 
       String line; 

       while ((line = reader.readLine()) != null) { 
        result.append(line); 
       } 

       // Pass data to onPostExecute method 
       return (result.toString()); 

      } else { 

       return ("No hi ha connexió a internet."); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return e.toString(); 
     } finally { 
      conn.disconnect(); 
     } 


    } 

    @Override 
    protected void onPostExecute(String result) { 

     //this method will be running on UI thread 

     pdLoading.dismiss(); 
     List<DataRallye> data = new ArrayList<>(); 

     pdLoading.dismiss(); 
     try { 
      JSONArray jArray = new JSONArray(result); 

      // Extract data from json and store into ArrayList as class objects 
      for (int i = 0; i < jArray.length(); i++) { 
       JSONObject json_data = jArray.getJSONObject(i); 
       DataRallye dadesrallye = new DataRallye(); 
       dadesrallye.RallyeNom = json_data.getString("nom"); 
       dadesrallye.RallyeTipus = json_data.getString("tipus"); 
       dadesrallye.RallyeDataI = json_data.getString("datai"); 
       dadesrallye.RallyeDataF = json_data.getString("dataf"); 
       dadesrallye.RallyeCiutat = json_data.getString("ciutat"); 
       dadesrallye.RallyeOrganitzacio = json_data.getString("organitzacio"); 
       dadesrallye.RallyeFoto = json_data.getString("foto"); 
       data.add(dadesrallye); 
      } 

      // Setup and Handover data to recyclerview 
      vistaRallye = (RecyclerView) getView().findViewById(R.id.llistarallyes); 
      adaptadorRallye = new AdapterRallye(getActivity(), data); 
      vistaRallye.setAdapter(adaptadorRallye); 
      vistaRallye.setLayoutManager(new LinearLayoutManager(getActivity())); 

     } catch (JSONException e) { 
      Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show(); 
     } 

    } 

} 

}

Das Problem scheint hier:

// Read data sent from server 
       InputStream input = conn.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
       StringBuilder result = new StringBuilder(); 
       String line; 

       while ((line = reader.readLine()) != null) { 
        result.append(line); 
       } 

       // Pass data to onPostExecute method 
       return (result.toString()); 

Diese Variable wird RESULT hier geleitet, wo ich die JSON Parse tun. Aber wie es leer ist, geht es direkt auf den Fang Ausnahme:

@Override 
    protected void onPostExecute(String result) { 

     //this method will be running on UI thread 

     pdLoading.dismiss(); 
     List<DataRallye> data = new ArrayList<>(); 

     pdLoading.dismiss(); 
     try { 
      JSONArray jArray = new JSONArray(result); 

      // Extract data from json and store into ArrayList as class objects 
      for (int i = 0; i < jArray.length(); i++) { 
       JSONObject json_data = jArray.getJSONObject(i); 
       DataRallye dadesrallye = new DataRallye(); 
       dadesrallye.RallyeNom = json_data.getString("nom"); 
       dadesrallye.RallyeTipus = json_data.getString("tipus"); 
       dadesrallye.RallyeDataI = json_data.getString("datai"); 
       dadesrallye.RallyeDataF = json_data.getString("dataf"); 
       dadesrallye.RallyeCiutat = json_data.getString("ciutat"); 
       dadesrallye.RallyeOrganitzacio = json_data.getString("organitzacio"); 
       dadesrallye.RallyeFoto = json_data.getString("foto"); 
       data.add(dadesrallye); 
      } 

      // Setup and Handover data to recyclerview 
      vistaRallye = (RecyclerView) getView().findViewById(R.id.llistarallyes); 
      adaptadorRallye = new AdapterRallye(getActivity(), data); 
      vistaRallye.setAdapter(adaptadorRallye); 
      vistaRallye.setLayoutManager(new LinearLayoutManager(getActivity())); 

     } catch (JSONException e) { 
      Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show(); 
     } 

Hier wird die JSON erzeugt aus einer PHP-Datei auf unserer Website:

[{"id_rally":"1","nom":"45e rallye costa brava","tipus":"velocitat i regularitat","datai":"2017-06-20","dataf":"2017-06-22","ciutat":"Girona","organitzacio":"rallyclassics ","foto":"brava.png"},{"id_rally":"2","nom":"26e rallye igualada","tipus":"velocitat","datai":"2017-08-13","dataf":"2017-08-16","ciutat":"Igualada","organitzacio":"ecb org","foto":"igualada.png"}] 
+0

'conn.setDoOutput (true);'. Entferne diese Zeile. – greenapps

+0

'result.append (line);' Das sollte 'result.append (line) +" \ n ";' – greenapps

+0

@ greenapps sein, das mein Problem gelöst hat! Vielen Dank! Was machte diese Linie? Vielen Dank! –

Antwort

1
conn.setDoOutput(true);. 

diese Zeile entfernen. Da Sie keine Daten in den Ausgabestream schreiben werden.

result.append(line); 

Das

result.append(line) + "\n"; 
0

Für 'GET' sein sollte, Verbindungen herstellen

conn.setDoOutput(false); 

setDoOutput (true) ist für POST verwendet und Anfragen PUT.

Verwandte Themen