2016-07-16 5 views
1

nicht abrufen I-Daten aus einem Array zeigt in 'Werten' gespeichert, aber wenn ich versuche, Daten aus der Datenbank zu bekommen, ich binAndroid AsyncTask kann in JSON-String von php-mysql

„E bekommen/Oberfläche: getSlotFromBufferLocked: unbekannter Puffer "

Fehler. Ich habe PHP-Skript und MySQL-Datenbank, die eine Spalte "Frage" hat. Ich bin nicht sicher, ob ich Problem in Verbindungsaufbau oder json Parse oder anderswo habe.

Mein VersionsFragment.java

public class VersionsFragment extends ListFragment { 
public VersionsFragment() { 
} 


@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    //String[] versionName = getResources().getStringArray(R.array.version_names); //this works fine 
    new MyTask().execute(); 
} 

class MyTask extends AsyncTask<String, Integer, String[]> { 

    @Override 
    protected String[] doInBackground(String... params) { 
     String[] versionName = new String[0]; 
     ArrayList<String> scripts = new ArrayList<String>(); 
     try { 
      URL url = new URL("http://192.168.1.105/android/phpcall.php"); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      String strJson = ""; 
      String line; 
      BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      while ((line = br.readLine()) != null) { 
       strJson += line; 
      } 
      //Log.d(VersionsFragment.class.getSimpleName(), line); 
      JSONArray jArray = new JSONArray(strJson); 

      for (int i = 0; i < jArray.length(); i++) { 

       JSONObject jObject = jArray.getJSONObject(i); 

       String name = jObject.getString("question"); 

       scripts.add(name); 
      } 
      versionName = scripts.toArray(new String[scripts.size()]); 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return versionName; 
    } 

    protected void onPostExecute(String[] result){ 
     //for(int i=0;i<result.length;i++) 
      //Log.d(VersionsFragment.class.getSimpleName(), result[i]); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, result); 
     setListAdapter(adapter); 
    } 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    OnVersionNameSelectionChangeListener listener = (OnVersionNameSelectionChangeListener) getActivity(); 
    listener.OnSelectionChanged(position); 
    } 
} 

Antwort

0

oben Code bearbeiten wie folgt:

JSONObject jsonObj = new JSONObject(strJson); 

// Getting JSON Array node 
JSONArray jArray = jsonObj.getJSONArray(YOUR_JSON_ARRAY_NAME); 
+0

, welcher Teil des Codes zu ersetzen? –

+0

In doinbackground ersetzen JSONArray jArray = new JSONArray (strJson); mit obigen Zeilen. – Drv

+0

Soll ich YOUR_JSON_ARRAY_NAME mit strJson ersetzen? –