列表视图未显示服务器数据

时间:2014-02-04 09:33:33

标签: android android-listview

我有以下代码从服务器到列表视图获取数据。

public class ServerFileList extends Activity {

    URL urlAudio;
    ListView mListView;
    ProgressDialog pDialog;
    private List<String> myList = new ArrayList<String>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.serverfilelist);

        mListView = (ListView) findViewById(R.id.listAudio);
        new getAudiofromServer().execute();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, myList);
        adapter.notifyDataSetChanged();
        mListView.setAdapter(adapter);
        mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        mListView.setCacheColorHint(Color.TRANSPARENT);
    }

    class getAudiofromServer extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(ServerFileList.this);
            pDialog.setMessage("Uploading audio file to server. Please wait ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @SuppressWarnings("unchecked")
        @Override
        protected String doInBackground(String... arg0) {
            try {
                System.out.println("Inside first try");
                urlAudio = new URL("server-name/folder/folder");
            } catch (MalformedURLException e) {
                System.out.println("Inside first catch");
                e.printStackTrace();
            }
            ApacheURLLister lister1 = new ApacheURLLister();
            try {
                System.out.println("Inside second try");
                myList = lister1.listAll(urlAudio);
            } catch (IOException e) {
                System.out.println("Inside second catch");
                e.printStackTrace();
            }
            System.out.println("ABCD===" + myList);
            return null;
        }

        protected void onPostExecute(String file_url) {
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }
        }
    }
}

所以基本上我正在尝试将所有音频文件从服务器列出到列表视图,所以我从这个link得到了代码,我根据我的要求进行了一些修改。但仍然列表视图为空,它没有显示任何数据。

我还在我的项目中导入了 ivy-2.0.0-rc1.jar ..

所以我做错了。如何在列表视图中列出服务器特定文件夹的所有文件。这是正确的还是我需要使用其他方法。

谢谢。

2 个答案:

答案 0 :(得分:2)

移动以下代码

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, myList);
    adapter.notifyDataSetChanged();
    mListView.setAdapter(adapter);
    mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    mListView.setCacheColorHint(Color.TRANSPARENT);

onPostExecute的{​​{1}}。如果您在getAudiofromServer上执行此操作,可能onCreate可能尚未执行,因此可能会填充getAudiofromServer。因此myList不会在其中显示任何内容。

如果你在ListView中执行此操作,则会在onPostExecute中获得存储在服务器上的音频文件列表,因此可以在myList

中看到它们

答案 1 :(得分:1)

myList进行计算之前,您的doInbackground未填充。

移动此

    ArrayAdapter<String> adapter = new ArrayAdapter<String>( ServerFileList.this,
            android.R.layout.simple_list_item_1, myList);
    adapter.notifyDataSetChanged();
    mListView.setAdapter(adapter);
    mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    mListView.setCacheColorHint(Color.TRANSPARENT);

onPostExecute。确保填充myList