Загрузка пользовательского списка в AsyncTask - PullRequest
1 голос
/ 04 февраля 2012

Я использовал код из раздела doInBackground для загрузки пользовательского списка из базы данных, и теперь, когда я добавил его в AsynchTask, он ничего не показывает, когда диалоговое окно закрывается. Кто-нибудь знает, что я делаю неправильно, чтобы он отображал мой список, когда индикатор выполнения снова исчезнет:

private class LoadList extends AsyncTask<String, UserRecord, JSONArray> {
     protected JSONArray doInBackground(String... link) {
        //http post
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://wallpaperapp.x10.mx/new.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }catch(Exception e){
            Log.e("log_tag", "Error in http connection"+e.toString());
        }

        //convert response to string
        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");

            String line="0";
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
        }catch(Exception e){
            Log.e("log_tag", "Error converting result "+e.toString());
        }

        try{
            jArray = new JSONArray(result);
            JSONObject json_data=null;

            displayname = new String[jArray.length()];
            song_name = new String[jArray.length()];
            artist = new String[jArray.length()];
            description = new String[jArray.length()];
            genre = new String[jArray.length()];
            custom_genre = new String[jArray.length()];
            album = new String[jArray.length()];
            timestamp = new String[jArray.length()];
            song_id  = new int[jArray.length()];
            avatar = new String[jArray.length()];
            drawable = new Drawable[jArray.length()];
            test_rating = new Float[jArray.length()];
            songurl = new String[jArray.length()];

            for(int i=0;i<jArray.length();i++){
                json_data = jArray.getJSONObject(i);
                song_id[i]=json_data.getInt("id");
                song_name[i]=json_data.getString("songname");
                artist[i]=json_data.getString("artist");
                displayname[i]=json_data.getString("displayname");
                description[i]=json_data.getString("description");
                genre[i]=json_data.getString("genre");
                custom_genre[i]=json_data.getString("customgenre");
                album[i]=json_data.getString("album");
                timestamp[i]=json_data.getString("format");
                avatar[i]=json_data.getString("image_url");
                songurl[i]=json_data.getString("song_url");
                drawable[i] = LoadImageFromWebOperations(avatar[i]);
                test_rating[i] = (float) json_data.getDouble("rating");
                user5  = new UserRecord(genre[i], displayname[i], timestamp[i], drawable[i], test_rating[i], songurl[i]);

                publishProgress(user5);

            }
        }
        catch(JSONException e1){
            Toast.makeText(getBaseContext(), "No results found." ,Toast.LENGTH_LONG).show();

        } catch (ParseException e1) {
            e1.printStackTrace();
        }           

         return null;
     }

     protected void onProgressUpdate(UserRecord... progress) {
         users.add(user5);

     }

     protected void onPostExecute(JSONArray jArray) {
         dialog.dismiss();
     }

     protected void onPreExecute(){
         dialog = ProgressDialog.show(mainmenu.this, "", 
                 "Loading. Please wait...", true);
     }
}

Вот мой onCreate:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newsmain);      

    nameValuePairs = new ArrayList<NameValuePair>();
    users = new ArrayList<UserRecord>();                

    ListView listView = (ListView) findViewById(R.id.ListViewId);

    songname = (TextView) findViewById(R.id.tvTrack);
    songimage = (ImageView) findViewById (R.id.imageView1);
    playbutton = (Button) findViewById (R.id.playbutton1);
    downloadbutton = (Button) findViewById (R.id.downloadbutton3);
    listView.setAdapter(new UserItemAdapter(this, android.R.layout.simple_list_item_1, users));
    flipper = (ViewFlipper) findViewById(R.id.tab2); 
    //when a view is displayed
    flipper.setInAnimation(this,android.R.anim.fade_in);
    //when a view disappears
    flipper.setOutAnimation(this, android.R.anim.fade_out);

    screenWidth = getResources().getDisplayMetrics().widthPixels;
    new LoadList().execute();
            }

Пользовательская запись, которая публикуется:

public class UserRecord {
    public String genrez;
    public String displaynamez;
    public String timestampz;
    public Drawable image_urlz;
    public Float test_ratingz;
    public String songurlz;

    public UserRecord(String genrez, String displaynamez, String timestampz, Drawable image_urlz, Float test_rating, String songurlz) {
        this.genrez = genrez;
        this.displaynamez = displaynamez;
        this.timestampz = timestampz;
        this.image_urlz = image_urlz;
        this.test_ratingz = test_rating;
        this.songurlz = songurlz;

    }
}

Ответы [ 2 ]

3 голосов
/ 05 февраля 2012

Добавление этого в мой onPostExecute сработало!Я так счастлив, что понял это ... спасибо

 listView.setAdapter(new UserItemAdapter(mainmenu.this, android.R.layout.simple_list_item_1, users));
0 голосов
/ 04 февраля 2012
 @Override
protected void onPostExecute(String result) {
    dialog.dismiss();

}

пожалуйста, введите код просмотра списка в этой функции, означает привязку данных к просмотру списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...