तक पहुंचने का बेहतर तरीका यह काम करने के लिए मुझे कुछ समय लगा, लेकिन यह स्पष्ट रूप से सबसे अच्छा अभ्यास नहीं है। संक्षेप में, जब मेरा AsyncTask समाप्त होता है, तो मुझे एक संवाद दिखाने की आवश्यकता होती है, लेकिन GetAplicationContext() नहीं मिलती है, न ही AsyncTask बनाते समय इसे पैरामीटर के रूप में पास कर रहा है। तो मैं अपने AsyncTask वर्ग में संदर्भ के लिए एक सार्वजनिक चर घोषित कर दिया और यह सेट इससे पहले कि मैं पर अमल किया है:एंड्रॉइड AsyncTask गतिविधि संदर्भ
private OnClickListener clickLoadRefs = new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("H","Clicked Load Refs");
RefreshRefPoints refreshRefPoints = new RefreshRefPoints();
refreshRefPoints.myCtx=v.getContext();
refreshRefPoints.execute(v.getContext());
}
};
private class RefreshRefPoints extends AsyncTask<Context, Integer, Integer> {
private Integer nPoints=0;
public Context myCtx;
private ProgressDialog pd;
protected Integer doInBackground(Context... ctx) {
Log.d("H","doInBackground()");
dbHelper.clearRefPoints();
requestRefPoints();
nPoints = parseRefPointsCSV();
return nPoints;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPreExecute()
{
pd = ProgressDialog.show(myCtx, "Refreshing Reference Points", "Loading...", true,false);
Log.d("H", "onPreExecute()");
}
protected void onPostExecute(Integer result) {
pd.dismiss();
AlertDialog.Builder builder = new AlertDialog.Builder(myCtx);
builder.setTitle("Reference points refresh complete");
builder.setMessage(result+" records loaded");
builder.setPositiveButton("OK",null);
builder.show();
Log.d("H","onPostExecute()");
}...etc
किसी को भी सिर्फ मुझे संदर्भ में उत्तीर्ण होने की उचित तरीके से दिखा सकते हैं? के रूप में
private OnClickListener clickLoadRefs = new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("H","Clicked Load Refs");
RefreshRefPoints refreshRefPoints = new RefreshRefPoints(Your_ActivityName.this);
refreshRefPoints.myCtx=v.getContext();
refreshRefPoints.execute(v.getContext());
}
};
private class RefreshRefPoints extends AsyncTask<Void, Integer, Integer> {
private Integer nPoints=0;
public Context myCtx;
private ProgressDialog pd;
public RefreshRefPoints (Context ctx) {
myCtx = ctx;
}
लेकिन यह मेमोरी लीक –