2017-10-17 2 views
0

Avant d'essayer d'obtenir une ligne de données à partir d'un serveur MySQL, j'ai utilisé une colonne et j'ai réussi à l'obtenir en listView grâce à des tutoriels. Mais pour obtenir des données dans une rangée à partir d'une table, je n'ai pas réussi à le mettre dans un listView.Mettre une ligne de données du service dorsal dans ListView

Donc, ce que j'essaie de faire est de mettre "shift" de travailleur de fond dans une liste.

PHP requête SQL:

$sql = "SELECT id, employee, hours FROM selected_shifts WHERE day = '$day';"; 

tiroir de navigation de l'activité principale:

if (items[0].equals(mExpandableListTitle.get(groupPosition))) { 
       if (items[0].equals(mExpandableListTitle.get(childPosition))) { 
        String day = "Monday"; 
        OnChoice(day); 
       } else if (items[1].equals(mExpandableListTitle.get(childPosition))) { 
        String day= "Tuesday"; 
        OnChoice(day); 
       } else if (items[2].equals(mExpandableListTitle.get(childPosition))) { 
        String day = "Wednesday"; 
        OnChoice(day); 
       } else if (items[3].equals(mExpandableListTitle.get(childPosition))) { 
        String day = "Thursday"; 
        OnChoice(day); 
       } else if (items[4].equals(mExpandableListTitle.get(childPosition))) { 
        String day = "Friday"; 
        OnChoice(day); 
       } 
      } 

      mDrawerLayout.closeDrawer(GravityCompat.START); 
      return false; 
     } 
    }); 
} 

public void OnChoice(String day) { 
    String type = "choice"; 
    BackgroundWorker backgroundWorker = new BackgroundWorker(this); 
    backgroundWorker.execute(type, day); 
} 

travailleur de fond (obtenir des données à partir du serveur MySQL):

public class BackgroundWorker extends AsyncTask<String,Void,String> { 
Context context; 
AlertDialog alertDialog; 
BackgroundWorker (Context ctx) { 
    context = ctx; 
} 
@Override 
protected String doInBackground(String... params) { 
    String type = params[0]; 
    String shifts_url = "***PHP LINK***"; 
    if(type.equals("choice")) { 
     try { 
      String day = params[1]; 
      URL url = new URL(shifts_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setDoInput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
      String post_data = URLEncoder.encode("day","UTF-8")+"="+URLEncoder.encode(day,"UTF-8"); 
      bufferedWriter.write(post_data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      outputStream.close(); 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
      String shift=""; 
      String line=""; 
      while((line = bufferedReader.readLine())!= null) { 
       shift += line; 
      } 
      bufferedReader.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 
      return shift; 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return null; 
} 

@Override 
protected void onPreExecute() { 
    alertDialog = new AlertDialog.Builder(context).create(); 
    alertDialog.setTitle("Status"); 
} 

@Override 
protected void onPostExecute(String shift) { 
    //Toast the data as json 
    Toast.makeText(context, shift, Toast.LENGTH_LONG).show(); 
} 

@Override 
protected void onProgressUpdate(Void... values) 
{ 
    super.onProgressUpdate(values); 


    } 
} 

EDIT

Sa mise en ListView:

public void onTaskCompleted(String shift) { 
    try { 
     loadIntoListView(shift); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

private void loadIntoListView(String shift) throws JSONException { 
    JSONArray jsonArray = new JSONArray(shift); 
    String[] list = new String[jsonArray.length()]; 
    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject obj = jsonArray.getJSONObject(i); 
     list[i] = obj.getString(shift); 
    } 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 
    listView.setAdapter(arrayAdapter); 
} 
+0

Quel est le problème ici? obtenez-vous quelque chose dans 'onPostExecute()'? si c'est le cas, il vous suffit de transmettre les données à votre main et de les montrer. –

+0

Le toast fonctionne pour montrer "shift" comme un json dans le onPostExecute(), mais j'avais du mal à pouvoir le récupérer dans MainActivity et le mettre dans un ListView. –

+0

Je vais écrire une réponse pour cela dans 2 min –

Répondre

0

Donc ce que vous voulez faire pour passer le shift est d'utiliser un "Listener" personnalisé.

Créer cette

public interface TaskListener { 
    void onTaskCompleted(String shift); 
} 

Et sur votre BackgroundWorker changer le constructeur comme suit:

TaskListener taskListener; 
BackgroundWorker(Context context, TaskListener taskListener){ 
    this.context = context; 
    this.taskListener = taskListener; 
} 

Ensuite, la méthode onPostExecute, faire un taskListener.onTaskCompleted(shift).

Lorsque vous appelez le passage constructeur BackgroundWorkerthis comme second paramètre:

BackgroundWorker backgroundWorker = new BackgroundWorker(this, this)

ensuite à la mise TaskListener sur votre Main et mettre en œuvre la méthode. Quelque chose comme ceci:

... MainActivity implements TaskListener 
... 
@override 
onTaskCompleted(String shift) { 
// You have your `shift` here to do with as you please 
} 
+0

Dans le MainActivity je reçois quelques erreurs; le premier est avec BackgroundWorker backgroundWorker = new BackgroundWorker (this, this); où il est dit « (contexte, james.MyApplication.BackgroundWorker.TaskListener) dans BackgroundWorker ne peut pas être appliqué à (MainActivity, james.MyApplication.MainActivity) » et le second pour onTaskCompleted il est dit « déclaration de méthode non valide, le type de retour requis " –

+0

Qu'en est-il de passer la listeAvec le' BackgroundWorker (..) 'et l'utiliser? – Ibrahim

+0

S'il vous plaît pourriez-vous expliquer un peu plus comment cela serait fait –

0

A votre onPostExecute() vous devez ajouter le « changement » à un DataSet dans votre adaptateur.