2016-06-15 3 views
1

android studio에서 android studio로 작업하고 있습니다. 웹 서비스를 사용하고 있습니다. 데이터베이스에서 데이터를 가져와이 데이터를 표시하는 데 문제가 있습니다. (백엔드 및 나는 "getProspectServlet"을 가지고있다 prospecti라는 테이블을 잠재 고객 목록을 얻어 expandble 목록에 잠재 고객에게 보여줄 필요가있다. 여기에 잠재 고객을 데이터베이스에서 가져 와서 목록에 저장하는 클래스의 코드가있다 " 내가 그럴 필요시 liste "ListView에서 데이터베이스의 데이터 표시

import android.app.Activity; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.util.Log; 
import android.view.View; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by DKTIQUE on 19/05/2016. 
*/ 
public class getProspect extends AsyncTask<Void,Void,String> { 
    private Context context; 
    List<Prospect> liste; 

    public List<Prospect> getListe() { 
     return liste; 
    } 
    // ProgressBar pb; 

    public getProspect(Context context) { 
     this.context = context; 
    } 



    /* public getProspect(Context context, List<Prospect> liste) { 
     this.context = context; 
     this.liste = liste; 
    }*/ 

    /* @Override 
    protected void onPreExecute() { 
     pb = (ProgressBar) ((Activity)context).findViewById(R.id.progressBar); 
     pb.setVisibility(View.VISIBLE); 
    }*/ 

    @Override 
    protected String doInBackground(Void... params) { // c un tableau 

     String data; 
     StringBuilder result= new StringBuilder(); 

     try { 
      // URL url = new URL ("http://10.0.2.163:8080/Prospects/GET"); 
      URL url = new URL ("http://192.168.43.249:8080/getProspect"); 

      // URL url = new URL ("http://10.0.19.196:8080/getProspect"); 

      // URL url = new URL ("http:// 10.0.19.196:8080/Prospects/GET"); 


      HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection(); 
      httpURLConnection.setConnectTimeout(5000); 
      InputStream is = httpURLConnection.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
      while ((data = reader.readLine()) != null) { 
       result.append(data); 
      } 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     Log.v("resut", result.toString()); 
     return result.toString(); 
    } 

    @Override 
    protected void onPostExecute(String s) {//afficher le resultat 
     // List<Prospect> 
       liste = new ArrayList<>(); 
//  pb.setVisibility(View.VISIBLE); 

     // Gson gson = new Gson(); 
     // if (!s.equals("")) { 

     try { 
      JSONArray jsonArray = new JSONArray(s); 

      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 
       Prospect prospect= new Prospect(); 
       prospect.setNom(jsonObject.get("nom").toString()); 
       prospect.setPrenom(jsonObject.get("prenom").toString()); 
       // prospect.setTitle(jsonObject.get("idProspect").toString()); 

       ListeProspect.listee.add(prospect); 
       liste.add(prospect); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 


     if (ListeProspect.listee.size()==0){Toast.makeText(context,"emptyyyyyyyyyyy",Toast.LENGTH_SHORT).show();} 
     // TextView textView = (Activity)context.findViewbyId(); 
    /* for(int i=0;i<liste.size();i++){ 

      Toast.makeText(context,liste.get(i).getNom(), Toast.LENGTH_SHORT).show(); 
     }*/ 
    } 

    // } 
} 

내가이 목록 객체를 얻을이 목록을 보여주고 싶은하지만 난 목록 (내가 건배와 함께 테스트) 비어 있지 getProspect에서 ListProspect에서 빈 목록을 가지고 계속하지만, 여기에 목록보기

public class ListeProspect extends AppCompatActivity { 

    static List<Prospect> listee = new ArrayList(); 

     ExpandableListAdapter listAdapter; 
     ExpandableListView expListView; 
     List<String> listDataHeader; 
     HashMap<String, List<String>> listDataChild; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_liste_prospect); 
//****************************************************** 

     // getProspect p= new getProspect(this).execute(); 
     // getProspect p= new getProspect(this); 

    new getProspect(this).execute(); 
     //p = new getProspect(this); 
     // p.execute(); 
     // p.onPostExecute(); 

     if (ListeProspect.listee.size()==0){Toast.makeText(this,"empty",Toast.LENGTH_SHORT).show();} 

     else{Toast.makeText(this,"not empty",Toast.LENGTH_SHORT).show(); 
      for(int i=0;i<ListeProspect.listee.size();i++){ 

       Toast.makeText(this,ListeProspect. listee.get(i).getPrenom(), Toast.LENGTH_SHORT).show(); 
      } 


     } 





// get the listview 
     expListView = (ExpandableListView) findViewById(R.id.lvExp); 

     // preparing list data 
     prepareListData(); 

     listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); 

     // setting list adapter 
     expListView.setAdapter(listAdapter); 

     // Listview Group click listener 
     expListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { 

      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, 
             int groupPosition, long id) { 
       // Toast.makeText(getApplicationContext(), 
       // "Group Clicked " + listDataHeader.get(groupPosition), 
       // Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 

     // Listview Group expanded listener 
     expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 

      @Override 
      public void onGroupExpand(int groupPosition) { 
       Toast.makeText(getApplicationContext(), 
         listDataHeader.get(groupPosition) + " Expanded", 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     // Listview Group collasped listener 
     expListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() { 

      @Override 
      public void onGroupCollapse(int groupPosition) { 
       Toast.makeText(getApplicationContext(), 
         listDataHeader.get(groupPosition) + " Collapsed", 
         Toast.LENGTH_SHORT).show(); 

      } 
     }); 

     // Listview on child click listener 
     expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 
       // TODO Auto-generated method stub 
       Toast.makeText(
         getApplicationContext(), 
         listDataHeader.get(groupPosition) 
           + " : " 
           + listDataChild.get(
           listDataHeader.get(groupPosition)).get(
           childPosition), Toast.LENGTH_SHORT) 
         .show(); 
       return false; 
      } 
     }); 
    } 

    /* 
    * Preparing the list data 
    */ 
    private void prepareListData() { 
     listDataHeader = new ArrayList<String>(); 
     listDataChild = new HashMap<String, List<String>>(); 

     // Adding child data 
     listDataHeader.add("Prospect 1"); 
     listDataHeader.add("Prospect 2"); 
     listDataHeader.add("Prospect 3"); 

     // Adding child data 
     List<String> top250 = new ArrayList<String>(); 
     top250.add("Age1"); 
     top250.add("Assuré1"); 
     top250.add("Type de stomie1"); 
     top250.add("Nombre de poche par jour"); 


     List<String> nowShowing = new ArrayList<String>(); 
     nowShowing.add("Age2"); 
     nowShowing.add("Assuré"); 
     nowShowing.add("Type de stomie"); 
     nowShowing.add("Nombre de poche par jour"); 


     List<String> comingSoon = new ArrayList<String>(); 
     comingSoon.add("Age"); 
     comingSoon.add("Assuré"); 
     comingSoon.add("Type de stomie"); 
     comingSoon.add("Nombre de poche par jour"); 


     listDataChild.put(listDataHeader.get(0), top250); // Header, Child data 
     listDataChild.put(listDataHeader.get(1), top250); // Header, Child data 
     listDataChild.put(listDataHeader.get(2), top250); // Header, Child data 
     // listDataChild.put(listDataHeader.get(1), nowShowing); 
     // listDataChild.put(listDataHeader.get(2), comingSoon); 
    } 
} 
코드입니다) Y는 내가 전망을 얻을도 ListProspect의 정적 목록을 사용하여 볼 수있는 난 아무것도 을 얻을 ListProspect의 목록을 얻을뿐만 아니라 나는 또한 getListe을 (사용 비어

내가 어떻게이 문제를 해결할 수있는 "getProspect"내가 건배에서 내 잠재 고객을 보여줄 수 있지만 내가 "ListeProspect"에 갈 때 나는 빈 목록을 가지고있다.

+0

팁 : AsyncTasks를 작성하고 Volley의 JsonArrayRequest를 사용하는 작업을 자제하십시오. –

+0

또는 정적 변수를 사용하지 말고 asynctask의 콜백을 사용하십시오 (http://stackoverflow.com/questions/9963691/android-asynctask-sending- callbacks-to-ui) –

답변

1

목록이 비어있는 이유는 당신은 백그라운드 스레드에서 실행되는 asyncTask에 그것을 채우고 메인 스레드에서 asyncTask를 호출 한 후 바로 확인하기 때문에이를 확인합니다. 즉, 요약하면 표시하거나 인쇄하기 전에 백그라운드 작업이 목록 채우기를 완료하지 못하게합니다. onPostExecute은 주 스레드에서 실행되고 doInBackground이 완료되면 실행되므로 백그라운드 작업이 완료된 후 수행 할 작업은 onPostExecute입니다.

또한 크리켓은 정확합니다. 이런 식의 정적 변수는 필요하지 않습니다. 다른 활동에서 목록 값에 액세스해야하는 경우이를 의도로 전달하십시오.

+0

Rob85는 설명하기에 너무 많은 것을 이해하지만 잘 이해하지 못했습니다. "p = new getProspect (this); p.onPostExecute();"시도했지만 작동하지 않았습니다. 위선적 인 말투에서 목록을 보내십시오 버튼에 clic 내가 expandble의 활동에 가서 거기에 myList가 필요해 내가 어떻게 여기에 의도를 사용할 수 있는지 볼 수 없다 당신이 나에게 설명해 주실 수 있습니다 더 어떻게이 문제를 해결할 수 있습니다 – user123

+0

내가 훨씬 더 명확해질 수 있을지 모르겠다. 백그라운드 스레드 (목록 채우기)에서 프로세스를 실행하면이 프로세스에 시간이 걸린다. 하지만이 프로세스를 시작한 직후 주 스레드 (onCreate)에서 결과가 무엇인지 확인하여 백그라운드 스레드가 완료되지 않았으므로 목록이 비어있게됩니다. onCreate가 루프가 아니라는 것을 기억하십시오. 한번만 호출하면 – Rob85

+0

이됩니다. 그래서 BackgroundTask가 끝났을 때 어떻게 알 수 있습니까? – user123

관련 문제