Я прочитал все Вопросы о stackoverflow, которые могут дать мне подсказку с этим, но я не могу заставить это работать.
Что у меня есть:
IУ меня есть актив под названием «список желаний», который запускает мое приложение.В этом упражнении у меня есть кнопка, которая запускает поиск через onSearchRequested ();
У меня есть еще одно действие, называемое discogssearch, которое выполняет вызов XML Api в Интернете, анализирует данные и отображает результаты поиска..
Все это работает нормально.
Чего я хочу достичь:
Я хочу отображать ProgessDialog, в то время как API-вызов требует много времени.выдается.
То, что я пробовал:
Я попытался открыть ProgessDialog многими способами, прежде чем поиск начался, и обнаружил, что я должен сделать это асинхронно сосновная нить.Поэтому я поместил трудоемкий код в AsyncTask и запустил его.
Что происходит:
Когда я вводил текст и нажимал, ничего не происходило (как раньше), покарезультаты приходят.Теперь отображается перспектива «discogssearch» с результатами, и отображается ProgressDialog, но на этом этапе вся работа уже выполнена.
Мой код:
wantlist.java
public class wantlist extends Activity implements OnClickListener {
/** Called when the activity is first created. */
ArrayList<Want> wants = new ArrayList<Want>();
@Override
public void onCreate(Bundle savedInstanceState) {
wants.add(new Want("Want1"));
wants.add(new Want("Want2"));
wants.add(new Want("Want3"));
wants.add(new Want("Want4"));
wants.add(new Want("Want5"));
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lv = (ListView) findViewById(R.id.WantList);
ImageButton b = (ImageButton) findViewById(R.id.searchbutton);
b.setOnClickListener(this);
lv.setAdapter(new WantAdapter(this,
R.layout.lplistitem, wants));
lv.setTextFilterEnabled(true);
}
public void onClick(View v) {
onSearchRequested();
}
}
discogssearch.java
public class discogssearch extends Activity implements OnItemClickListener{
/** Called when the activity is first created. */
private static final int PROGRESS_DIALOG = 0;
private static final String LOGTAG = discogssearch.class.getName();
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Window window = getWindow();
// Eliminates color banding
window.setFormat(PixelFormat.RGBA_8888);
}
private ListView alv = null;
private ListView rlv = null;
private ListView llv = null;
ArrayList<Want> results = new ArrayList<Want>();
View.OnTouchListener gestureListener;
GestureDetector pageFlip;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.searchresults);
Intent intent = getIntent();
String query = intent.getStringExtra(SearchManager.QUERY);
searchDiscogs(query);
}
public void searchDiscogs(String query)
{
query = URLEncoder.encode(query);
alv = (ListView) findViewById(R.id.ArtistList);
rlv = (ListView) findViewById(R.id.ReleaseList);
llv = (ListView) findViewById(R.id.LabelList);
rlv.setOnItemClickListener(this);
rlv.setFastScrollEnabled(true);
rlv.setVerticalFadingEdgeEnabled(true);
results.clear();
AsyncTask<String, Integer, DiscogsXMLHandler> at = new AsyncDiscogsSearch().execute(query);
DiscogsXMLHandler discogsHandler = null;
try {
discogsHandler = at.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("WICHTIG: ",discogsHandler.getReleaseResults().size() + "");
alv.setAdapter(new WantAdapter(this,
R.layout.lplistitem, discogsHandler.getArtistResults()));
rlv.setAdapter(new WantAdapter(this,
R.layout.lplistitem, discogsHandler.getReleaseResults()));
llv.setAdapter(new WantAdapter(this,
R.layout.lplistitem, discogsHandler.getLabelResults()));
}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
if(arg0.equals(rlv))
{
String uri = ((Want)rlv.getItemAtPosition(arg2)).getDetailsUri();
Log.d("Itemclick", uri);
Intent viewUri = new Intent("android.intent.action.VIEW", Uri.parse(uri));
viewUri.setClass(this, releasedetails.class);
startActivity(viewUri);
}
}
public Dialog onCreateDialog(int dial)
{
switch(dial) {
case PROGRESS_DIALOG:
Log.d(LOGTAG,"Showing Progress Dialog");
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading...");
return progressDialog;
default:
return null;
}
}
private Animation inFromRightAnimation() {
Animation inFromRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromRight.setDuration(100);
inFromRight.setInterpolator(new AccelerateInterpolator());
return inFromRight;
}
private Animation outToLeftAnimation() {
Animation outtoLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoLeft.setDuration(100);
outtoLeft.setInterpolator(new AccelerateInterpolator());
return outtoLeft;
}
private Animation inFromLeftAnimation() {
Animation inFromLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromLeft.setDuration(100);
inFromLeft.setInterpolator(new AccelerateInterpolator());
return inFromLeft;
}
private Animation outToRightAnimation() {
Animation outtoRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoRight.setDuration(100);
outtoRight.setInterpolator(new AccelerateInterpolator());
return outtoRight;
}
private class AsyncDiscogsSearch extends AsyncTask<String, Integer, DiscogsXMLHandler>{
public static final String APIKEY = "xxxxxxxx";
private final ProgressDialog pg = new ProgressDialog(discogssearch.this);
@Override
protected DiscogsXMLHandler doInBackground(String... params) {
String urlString = "http://www.discogs.com/search?type=all&q="+params[0]+"&f=xml&api_key="+APIKEY ;
//Retrieve XML-Data as InputStream
InputStream instream = GZipStreamHelper.getStream(urlString);
//Parse XML-Data
DiscogsXMLHandler discogsHandler = new DiscogsXMLHandler();
XMLParsingHelper.getInstance().parseAndHandle(instream, discogsHandler);
return discogsHandler;
}
@Override
protected void onPostExecute(DiscogsXMLHandler result) {
// TODO Auto-generated method stub
pg.dismiss();
}
@Override
protected void onPreExecute() {
pg.show();
}
}
}
Спасибоза любые предложения!