استفاده از Asynctask در پروژه notes [آموزش]
سلام دوستان، ظاهرا این سوال خیلی از دوستان هست.
پروژه ای که استاد تحت عنوان notes ایجاد کردند به خوبی کار میکنه اما در امولاتور 2 ! شما هم ممکنه روی امولاتور 2 برنامه رو تست کرده باشین و کاملا درست باشه اما وقتی میاین روی گوشی واقعیتون تست میکنین دیگه کار نکنه ! به این دلیل هست که از اندروید 3 به بعد دیگه نمیشه از طریق اون روشی که استاد گفته برنامه هارو نوشت و باید از همزمانی و خصوصا Asynctask استفاده بشه.
من خودم سر یه پروژه خیلی زمانم گرفته شد تا از Asynctask استفاده کنم، اینجا دقیقا سورسش رو قرار میدم تا بقیه دوستان دیگه وقتشون گرفته نشه.
این سورس برای کلاس Asynctask هست، این رو داخل کلاسی که میخواین باهاش به اینترنت متصل بشین بعد از تموم شدن همه ی متدها و قبل از بسته شدن کلاس اصلی paste کنین :
private class RegisterCodeAsyncTask extends AsyncTask<List<? extends NameValuePair>, Void, String> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(ActivityRegisterCode.this, null, null);
progressDialog.setContentView(R.layout.progressbar);
progressDialog.show();
}
@Override
protected String doInBackground(List<? extends NameValuePair>... params) {
List<? extends NameValuePair> param0 = params[0];
try {
HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost("http://api.paaye.ir/api/register/verify");
method.setEntity(new UrlEncodedFormEntity(param0));
HttpResponse response = client.execute(method);
InputStream inputStream = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
String line = "";
while ((line = reader.readLine()) != null) {
builder.append(line);
}
result = builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) { //doInBackground khorujish ro mide be in
if (result != null) {
try {
G.registerCode.clear();
JSONObject object = new JSONObject(result);
StructRegisterCode structRegisterCode = new StructRegisterCode();
structRegisterCode.status = object.optString("status");
G.registerCode.add(structRegisterCode);
StructRegisterCode registerCode = G.registerCode.get(0);
progressDialog.dismiss();
}
catch (JSONException e) {
e.printStackTrace();
}
} else {
progressDialog.dismiss();
}
}
}
برای فراخوانیش هم فقط کافیه در onCreate، پارامتری که میخواین رو بهش بدین و کلاس Asynctask رو صدا بزنین :
params.add(new BasicNameValuePair("register_number", register_number));
params.add(new BasicNameValuePair("register_code", txtCode.getText().toString()));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
new RegisterCodeAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
new RegisterCodeAsyncTask().execute(params);
}
به همین راحتی، به همین خوش مزگی !
اینم یه نمونه کد جهت ارتباط با وب سرور با استفاده از
public class ActivityConnectStart extends Activity {
public String result;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.asyncronoustask_android_example);
final Button GetServerData = (Button) findViewById(R.id.GetServerData);
GetServerData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Server Request URL
String serverURL = "http://192.168.124.15/note/index.php";
// Create Object and call AsyncTask execute Method
new LongOperation().execute(serverURL);
}
});
}
// Class with extends AsyncTask class
private class LongOperation extends AsyncTask<String, Void, Void> {
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(ActivityConnectStart.this);
TextView uiUpdate = (TextView) findViewById(R.id.output);
@Override
protected void onPreExecute() {
// NOTE: You can call UI Element here.
//UI Element
uiUpdate.setText("Output : ");
Dialog.setMessage("Downloading source..");
Dialog.show();
}
// Call after onPreExecute method
@Override
protected Void doInBackground(String... urls) {
// Server url call by POST method
try {
HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost(urls[0]);
//method.setEntity(new UrlEncodedFormEntity(param0));
HttpResponse response = client.execute(method);
int code = response.getStatusLine().getStatusCode();
Log.i("Log", "Code Connection : " + code);
InputStream inputStream = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
String line = "";
while ((line = reader.readLine()) != null) {
builder.append(line);
}
result = builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
// NOTE: You can call UI Element here.
// Close progress dialog
Dialog.dismiss();
if (Error != null) {
uiUpdate.setText("Output : " + Error);
} else {
uiUpdate.setText("Output : " + result);
}
}
}
}
Asynctask
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .