首先抱歉,如果它的重複,因爲我問它,因爲無法理解其他問題的任何事情,或者我可以說我不能實現我的情況。 其實我堅持的情況下,我想更新我的ListView
從AsyncTask
網絡更新一個,但現在如何實現它,不知道我嘗試了幾件事,但無法使其工作。請誰能解釋我詳細介紹瞭如何做到這一點,這是我的活動和異步類代碼如何更新從AsyncTask的列表視圖
package app.balaji.sid.listapp;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPFile;
public class ListActivity extends ActionBarActivity {
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
lv=(ListView)findViewById(R.id.listView);
String[] values = new String[] { "Item 1",
"Item 2",
"Item 3 ",
"Item 4",
"Item 5",
"Item 6",
"Item 7",
"Item 8"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
lv.setAdapter(adapter);
new ListFetcher().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.list, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
protected class ListFetcher extends AsyncTask<String,String,String>{
String sid;
@Override
protected String doInBackground(String... params) {
String user = "user";
String pass="password";
String host="204.236.238.164";
FTPClient client = new FTPClient();
try {
client.connect(host,21);
client.login(user, pass);
client.setType(FTPClient.TYPE_BINARY);
client.changeDirectory("/");
FTPFile[] files = client.list();
String[] fileNames = new String[files.length];
for (int i = 0; i < files.length; i++)
{
fileNames[i] = files[i].getName();
String logVariable=fileNames[i];
Log.v(sid, logVariable); // Here i am able to see list in log
}
}catch (Exception e)
{
Log.v(sid,e.toString());
}
return sid;
}
protected void onPostExecute()
{
//i think list should be updated from here but don't know how to do it correctly
// i just know i can update my listview by creating a new adapter and assign it to listview but don't know how
// also i am not able to get the fileNames array here
}
}
}
答:創建延伸的AsyncTask繼承類,讓它實現其MainActivity還實現了一個接口,並調用它的職位。 B:爲派生類中的Activity提供一個弱引用,並將Activity引用傳遞給派生類,以便調用公共方法的Activity或從onPostExecute調用runOnUiThread。 Thogh我以爲onPost已經在ui線程上運行了。 – icbytes 2014-09-01 17:10:53
@icbytes你可以請回答一些例子,因爲我是新來的android,所以不知道太多 – Sid 2014-09-01 17:16:52
@icbytes它在UI上運行線程,所以不需要'runOnUiThread()'有 – codeMagic 2014-09-01 17:18:06