Ich habe eine Listenansicht auf der Haupt-Ui, die ich über eine Asynctask aktualisieren möchte, die mit einem Mikrotik-Gerät verbindet, um Details abzurufen.Aktualisieren eines ListView auf MainActivity von Asynctask
Ich übergebe die Aktivität auch, so dass ich die Benutzeroberfläche aus einer separaten Klassendatei aktualisieren kann, aber ich bekomme immer den Fehler "Klassenname erwartet hier" für die Aktivität (mAktivität) im ListAdapter-Konstruktor. Hier
ist der AsyncTask Code:
public class MikrotikReader extends AsyncTask<String, Void, ArrayList<String>> {
//Default connection details for mikrotik
private int mkPort = 8728;
private int mkTimeout = 5000;
private String userName;
private String userPass;
private String mkIpAddress;
private String mkCommand;
private ListView listView;
private Activity mActivity;
public MikrotikReader(String user, String pass, String ipaddress, String command, Activity activity) {
this.userName = user;
this.userPass = pass;
this.mkIpAddress = ipaddress;
this.mkCommand = command;
this.mActivity = activity;
}
@Override
protected ArrayList<String> doInBackground(String... params) {
ArrayList<String> mylist = new ArrayList<String>();
try {
ApiConnection con = ApiConnection.connect(SocketFactory.getDefault(), mkIpAddress, mkPort, mkTimeout);
con.login(userName, userPass); // log in to router
if (con.isConnected()) {
List<Map<String, String>> rs1 = con.execute(mkCommand);
for (Map<String, String> results1 : rs1) {
getResults[0] = new String(results1.get("comment"));
mylist.add(getResults[0]);
}
con.close();
}
} catch (MikrotikApiException e) {
} catch (Throwable e) {
e.printStackTrace();
}
return mylist;
}
@Override
protected void onPostExecute(ArrayList<String> mylist) {
System.out.println("This is the array content " + mylist.get(0));
listView = (ListView) mActivity.this.findViewById(R.id.listView);
listView.setAdapter(new ArrayAdapter<String>(mActivity.this,android.R.layout.simple_list_item_1,new ArrayList<String>())); }
Dies ist, wie ich die AsyncTask aus der MainActivity Klassendatei aufrufen, "das", wie die Aktivität vorbei:
new MikrotikReader(user_name, password, ipaddress,"/ip/firewall/filter/print where comment=Test", this).execute();
Hier ist die Listenansicht in Die Datei mainactivity.xml:
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_bg" />
Dies ist nicht die richtige Weise, um die Listenansicht in einer anderen Aktivität zu aktualisieren.Diese asyn-Task in der anderen Klasse nicht.Sie können entweder Schnittstelle oder similey setzen dies in derselben Klasse. Dann müssen Sie keine Aktivität übergeben. –
Mir wurde gesagt, dass die beste Methode darin besteht, separate wiederverwendbare Klassendateien zu haben, objektorientierten Code zu pflegen und Daten zwischen ihnen zu übergeben. Da ich andere Klassendateien habe, die asynchrone Tasks zum Abrufen oder Schreiben von Daten auf das Mikrotik-Gerät verarbeiten, schlagen Sie vor, dass ich sie alle in derselben Klassendatei implementiere? Das würde zu einer klobigen Datei main_activity führen. Ist das der empfohlene Weg? – EtienneSW