我有以下代码从服务器到列表视图获取数据。
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 ..
所以我做错了。如何在列表视图中列出服务器特定文件夹的所有文件。这是正确的还是我需要使用其他方法。
谢谢。
答案 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
。