좋아요, 연구의 한계에 도달했기 때문에 첫 번째 게시물. 3 개의 요청을 실행하려고하면 for 루프 안에 다른 URL이 있습니다 (while 및 if로 시도했습니다) 코드가 완벽하게 실행되어 requestqueue에 도달 할 때까지 계속 실행됩니다. 이제 문제는 다음과 같습니다. 요청 큐 이후에 응답을 얻고 싶을 때만 for 루프를 다시 작성합니다.하지만 요청 큐를 추가 한 후 프로그램이 원하는 결과를 얻지 못하는 것 같습니다. 클래스는 다시 돌아갑니다. for 루프에 연결하고 마지막까지 전체 기능을 계속 수행하며 결국에는 응답을 3 회받습니다. 그리고 나는 매번 요청을 하나씩 원하기 때문에 저를 화나게합니다. 내가 전에 많은 요청을 수행하고, 나는이 문제를 해결하는 방법을 알고 있다고 생각하지만, 나는 = s의 코드 수 없습니다했습니다안드로이드 - 발리 요청 루프 내
public class MainActivity extends FragmentActivity {
private String totalresults, word, results, server, userAgent, quantity, urly, nome;
private int counter,limit;
EditText nome_empresa;
public TextView output;
ProgressDialog PD;
ViewPager viewPager=null;
public ArrayList half_cards, all_cards;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nome_empresa = (EditText) findViewById(R.id.nome_empresa);
output = (TextView) findViewById(R.id.output);
PD = new ProgressDialog(this);
PD.setMessage("Loading....");
PD.setCancelable(false);
//viewPager = (ViewPager) findViewById(R.id.pager);
//FragmentManager fragmentManager = getSupportFragmentManager();
//viewPager.setAdapter(new MyAdapterAlfa(fragmentManager));
}
public void vamos(View view) {
nome = nome_empresa.getText().toString();
PD.show();
googlesearch(nome, 200, 0);
ListView lv = (ListView) findViewById(R.id.custom_list_view);
lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, all_cards));
all_cards = get_cards(totalresults, nome);
PD.dismiss();
}
public void googlesearch(String worde, int limite, int start) {
word = worde;
results = "";
totalresults = "";
server = "www.google.com";
userAgent = "(Mozilla/5.0 (Windows; U; Windows NT 6.0;en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6";
quantity = "100";
counter = start;
limit = limite;
do_search();
}
public void do_search() {
for(int l=counter; l<=limit; l+=100){
urly = "http://" + server + "/search?num=" + quantity + "&start=" + Integer.toString(counter) + "&hl=en&meta=&q=%40\"" + word + "\"";
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest strReq = new StringRequest(Request.Method.GET, urly, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
half_cards = get_cards(response, word);
all_cards.addAll(half_cards);
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: " + error.getMessage());
}
});
requestQueue.add(strReq);
}
}
public ArrayList get_cards(String ola, String ole){
myparser rawres = new myparser(ola, ole);
return rawres.cards();
}
}
'Volley'는 비동기 적으로 실행됩니다. 즉, 다른 코드가 계속 실행되는 동안 자체 스레드에서 실행됩니다. 따라서 'Volley 응답'을 기다리지 않으면 for 루프를 다시 시작합니다. 'onResponse' 메쏘드 안에서'do_search'를 호출하여'if 문'이 어떤'url'을 사용할지를 결정하십시오. –