بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

استفاده از Asynctask در پروژه notes [آموزش]

مدیریت گفتگو
محمد آقا 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام دوستان، ظاهرا این سوال خیلی از دوستان هست. 

پروژه ای که استاد تحت عنوان 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);
                }

به همین راحتی، به همین خوش مزگی ! 

 

نظرات

tiam 11 سال پیش
سلام از کد شما استفاده کردم اما نتیجه نگرفتم آیا نکته خاصی ممکن وجود داشته باشه
محمد آقا 11 سال پیش
سلام چه مشکلی وجود داره ؟ چطوری استفاده کردین ؟ سورس کدتون رو بزارین لطفا
tiam 11 سال پیش
ممنون با یه سری تغییرات حل شد

پاسخ‌ها 1

tiam 11 سال پیش

اینم یه نمونه کد جهت ارتباط با وب سرور با استفاده از

 
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

نظرات

محمد آقا 11 سال پیش
ممنونم عزیز، ایشالا که این کدها در آینده به درد کسایی که میخوان این راه رو برن بخوره.
محمد آقا 11 سال پیش
البته این کدی که گذاشتید تنها برای دریافت اطلاعات از سمت سرور هست و برای اینکه بتونید داده ای رو ارسال کنید و در همون درخواست یک سری داده هارو بگیرید میتونید از کد قبلی استفاده کنید، بازم ممنونم
tiam 11 سال پیش
بله درست میفرمایید من خیلی ساده فقط دریافت رو نوشتم چون هنگامی که مشکل اتصال حل بشه راحت میشه اطلاعات رو ارسال کرد.... ممنون از توجه شما
محمد آقا 11 سال پیش
ممنونم لطف کردید ایشالا در آینده این کدها باعث راه افتادن کار عزیزانی مراجعه میکنن بشه. مرسی

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .