먼저 미안하지만 다른 질문에서 아무것도 이해할 수 없거나 내가 내 경우에 구현할 수 없다고 말할 수 있기 때문에 중복을 묻는다면 미안합니다. 사실 나는 에있는 네트워크에서 업데이트 된 것으로 내 ListView
을 업데이트하려는 상황에 갇혀 있지만 구현 방법은 몇 가지를 시도했지만 제대로 작동하지는 못합니다. 누구나 할 수있는 방법을 자세히 설명해주십시오, 여기 활동과 비동기 클래스 내 코드입니다AsyncTask에서 listview를 업데이 트하는 방법
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
}
}
}
A : AsyncTask를 확장 상속 클래스를 만들고이를 MainActivity도 구현하는 인터페이스를 구현하고 게시물에 그것을 호출 할 수 있습니다. B : 파생 상품 내부에서 Activity에 대한 약한 참조를 제공하고 Activity 참조를 파생 상품에 전달하여 Public 메서드를 호출하거나 onPostExecute에서 runOnUiThread를 호출합니다. Thogh는 onPost가 이미 UI 스레드에서 실행된다고 생각했습니다. – icbytes
@icbytes 당신이 할 수있는 몇 가지 예를 들어 내가 안드로이드에 대한 새로운 오전 너무 많이 모르겠다. – Sid
UI 스레드에서 실행되는 @icbytes 그래서'runOnUiThread()'에 대한 필요가 없습니다 – codeMagic