Ich habe eine Anwendung in Android, in der ich Daten zugreifen von Server, der mit einer separaten Klasse LongOperation zugegriffen wird, die AsyncTask erweitert. Jetzt bekomme ich die Daten in der LongOperation-Klasse, aber ich bin nicht in der Lage, diese Daten in ein anderes Klassenobjekt zu kopieren, wo ich es in einem sqlitedb speichern muss. Ich habe versucht, die Daten direkt in sqlitedb zu schreiben, aber da die Klasse LongOperation keine Aktivität ist, kann ich keinen Kontext in übergeben super (new MainActivity(), DATABASE_NAME, null, DATABASE_VERSION); wie von sqlitedb erforderlich. Auf das Objekt, in dem Daten abgerufen werden, wird über eine Klassenbibliothek zugegriffen. Ich rufe die LongOperation-Klasse von Button klicken in meiner MainActivity-Klasse, die auch eine Aktivität ist, aber der Kontext von hier funktioniert nicht. Im Folgenden finden Sie die zugehörigen Auszüge, die die Aufruf- und Datenabrufprozedur darstellen.Kopieren von Daten von einem Objekt aus einer Klasse in ein anderes Objekt in einer anderen Klasse in Android
MainActivity Taste Code (in separater Datei)
import LibPack.UpdateData;
public static UpdateData upd;
public void onClick(View arg0) {
upd = new UpdateData();
LongOperation.getUserData = true;
lo = new LongOperation();
lo.execute("");
}
LongOperation Klassencode (in separater Datei)
import LibPack.UpdateData;
public static class LongOperation extends AsyncTask<String, Void, String> {
public static UpdateData upd;
@Override
protected String doInBackground(String... params) {
if (getUserData) {
upd = *data fetched from server*
}
}
So wie ich wieder Daten aus dieser Klasse zurück zu die MainActivity? Oder wenn es eine andere Möglichkeit gibt, die Daten in einer Datei zu speichern, sodass ich über eine andere Klasse darauf zugreifen kann? Die Daten im Objekt haben das Format string [] und das Schlüsselwertpaar. Das Problem wird hier verursacht, weil die Klasse LongOperation eine Nicht-Aktivitätsklasse ist. Daher gibt es keine Möglichkeit, bei der Verwendung von Dateischreibern oder geteilten Voreinstellungen Kontext zu übergeben.
Edit 1:
MainActivity
package com.sam.vehicle;
import com.example.vehicle.R;
import com.sam.vehicle.CommonData.LongOperation;
import LibPack.UpdateData;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
public class MainActivity extends Activity implements AsyncResponse{
Button b;
public static LongOperation lo = new LongOperation();
public static String resp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lo.delegate = this;
b = (Button) findViewById(R.id.btnProceed);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
upd = new UpdateData();
CommonData.getUserData = true;
System.out.println("Before execute");**//prints fine**
lo.execute("");
System.out.println("At main extract");**//prints with previous sysout**
System.out.println("At main extract resp = "+resp);**//prints = null**
Intent ii = new Intent(arg0.getContext(), LoginActivity.class);
ii.putExtra("number", phoneNumber.getText().toString());
startActivity(ii);
}
});
}
@Override
public void processFinish(String output) {
// TODO Auto-generated method stub
System.out.println("Executed processFinish in main. output = "+output);**//doesn't print
resp = output;
}
}
AsyncTask Klasse:
package com.sam.vehicle;
import com.example.vehicle.R;
public class CommonData {
public static boolean getUserData = false;
public static String resp;
public static class LongOperation extends AsyncTask<String, Void, String> {
public AsyncResponse delegate = null;
@Override
protected void onPostExecute(String result) {
System.out.println("In commondata onpostexe");**//doesn't print**
delegate.processFinish(result);
}
@Override
protected String doInBackground(String... params) {
if (getUserData) {
sendToServer = false;
try {
upd = (UpdateData) stringToObject(resp);
for (int i = 0; i < upd.pass.length; i++) {
System.out.println("upd.usn["+i+"]"+upd.usn[i]);
System.out.println("upd.pass["+i+"]"+upd.pass[i]);
}**//prints fine here**
System.out.println("in commondata resp="+resp);**//prints fine here**
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("resp from common return = "+resp);**//doesn't print**
return resp;
}
}
Sie sollten die AsyncTask-Dokumentation lesen. Dies ist dort abgedeckt. – Jeroen