آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از AsyncTask در پروژه Notes (حل شد)

Alireza_Ghamkhar  10 سال پیش  9 سال پیش
+1 0

سلام. میخواستم بدونم اگر بخواهیم از AsyncTask در پروژه Notes استفاده بکنیم دقیقا کجاهای برنامه باید چیکار کنیم.
ممنون میشم کمکم کنید.

0 0
شما باید کلاس وب سرویس رو با استفاده از Async Task بنویسید که عملیات اتصال به وب سرویس از طریق متد doInBackground انجام بشه اما به نظر من با توجه به ساختار کلی کلاس Async Task تو این پروژه بهتره از Thread استفاده کنید چون استفاده از Async Task مقداری تو این برنامه کارو الکی پیچیده میکنه (هرچند که به نظر من کلا Async Task ازون دست کلاسهایی که باعث میشه مجبور شیم لقمه رو الکی دو سرمون بچرخونیم). (10 سال پیش)
0 0
خوب Thread رو کجاش قرار بدم... آخه شنیدم Thread خیلی دردسر داره واسه خودش... (10 سال پیش)
+1 0
این رو ببین لینک (10 سال پیش)
0 0
من هنوز متوجه نشدم دقیقا تو کدوم کلاسا باید Async task رو وارد کنم هر چی که فکر میکنم (10 سال پیش)
0 0
AsyncTast نوعی Thread هست که متد شروع ، پایان و در حین کار داره ؛ بیشتر برای خواندن خروجی وب سرویس کارایی داره و کارهای مشابه (10 سال پیش)
0 0
خوب پروژه notes هم خروجی وب سرویس رو میخونه ... خواهشا کسی اگه میتونه کمک کنه کارم گیره... (10 سال پیش)
0 0
سلام من یه سوال فنی دارم تو آموزش ها من آموزش AsyncTask رو ندیدم البته تا بخش 15 تو آموزش ها آموزشش هست عایا؟؟ (9 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
Alireza_Ghamkhar  10 سال پیش
0 0

این یکی از کدها هستش تو پروژه که نمیدونم چجوری با Async task یا Thread حلش کنم.

کد اولی که برای کلاس Webservice

public static String readUrl(String url,ArrayList params) {
		try {
			HttpClient client = new DefaultHttpClient();
			HttpPost method = new HttpPost(url);
			if(params!=null){
			method.setEntity(new UrlEncodedFormEntity(params));
			}
			HttpResponse response = client.execute(method);
			InputStream inputStream = response.getEntity().getContent();
			String result = convertInputStreamToString(inputStream);
			
			return result;
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return null;

	}

کلاس دوم هم که Commands هستش...

public static void readData() {
		String result = WebService.readUrl("http://***.php?action=read",null);
		   if(result != null){
			   try {
				    G.tasks.clear();
				    JSONArray tasks = new JSONArray(result); //for(int i = 0 ; i<tasks.length();
				    for(int i = tasks.length()-1 ; i>=0;i--){                    
					JSONObject object  = tasks.getJSONObject(i);
					StructTask task = new StructTask();
					task.id = object.getLong("task_id");
					task.title = object.getString("work_title");
					task.desc = object.getString("work_desc");
					task.done = object.getInt("work_done") == 1 ?true:false;
					G.tasks.add(task);
				
				}
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			   
		   }
		   
	}
    
  /*  public void sendData(ArrayList params){
    	 WebService.readUrl("***.php",params);	
    }*/
    public static  void updateData(ArrayList params){
    	 WebService.readUrl("***.php?",params);
    	
    }
    public static  void removeData(ArrayList params){
   	 WebService.readUrl("***.php?",params);
   	
   }

	public static void insertData(ArrayList params) {
		WebService.readUrl("***.php",params);
		
	}
پاسخ به سوال 
javac  10 سال پیش
+2 0

 کد رو با استفاده از یک listener اصلاح کردم.

این وب سرویس :

    public static interface listener {

        public void onReceived(String string);
    }

public static void readUrl(final String url, final ArrayList<NameValuePair> params, final listener listener) {
Thread thread = new Thread(new Runnable() { @Override public void run() { try { HttpClient client = new DefaultHttpClient(); HttpPost method = new HttpPost(url); if (params != null) { method.setEntity(new UrlEncodedFormEntity(params)); } HttpResponse response = client.execute(method); InputStream inputStream = response.getEntity().getContent(); String result = convertInputStreamToString(inputStream); if (listener != null) { listener.onReceived(result); } } catch (ClientProtocolException e) { Log.v("LOG", "readURL1" + e); } catch (IOException e) { Log.i("LOG", "readURL2" + e); } } }); thread.start(); }

اینم جایی هست که وبسرویس رو فراخوانی میکنیم:

    WebService.listener listener = new listener() {

            @Override
            public void onReceived(String data) {
                /// do stuff ...
            }
        };
        WebService.readUrl("http://192.168.1.100/note-server/service.php?action=update", params, listener);
0 0
ضمن تشکر ویژه از زحمتی که کشیدید. متاسفانه ارور های زیادی خود برنامه میگیره از این وضعیت. اگر تو کامپایلر بزنید متوجه صحبتم میشید. (10 سال پیش)
0 0
قاعدتا خطایی نباید بده !!! چی میگه ؟حرفش چیه؟ :) خطا رو اینجا بزاز.... (10 سال پیش)
0 0
به اون return null و return result خیلی گیر میده چرا که میگه Void method can not return a value تازه این بعد از زمانی هستش که یه سری پارامتر ها رو مجبور میکنه فاینال کنیم. حالا من اومدم همین ترد رو روی دستور ReadData() تو Commands اجرا کردم و به سلامتی اومد بالا... فقط فکر میکنم همین کار را برای متد های آپدیت و دیلیت و ... هم بکنم. فقط میمونه اینکه بتونم یه Loading بزارم واسش و چک کنم اگه نت قطعه کلا بیخیال این کارا بشه... مرسی دوست عزیز از وقتی که برام گذاشتی و راهنمایی خوبت که فکر میکنم منو به جواب رسوند... (10 سال پیش)
0 0
الان با AsyncTask هم پیاده سازی شد به صورتی که همه چیه متد Read data رو اول به صورت یک متد در آوردم سپس ریختم تو Do in background و تنها یک خط که اونم execute مربوط به Asynctask بود رو در متد Read data قرار دادم و کار کرد فکر کنم دیگه به راحتی بتونم لودینگ اینا هم براش بزارم... (10 سال پیش)
0 0
اصلاح شد :) (10 سال پیش)
0 0
با تشکر ... خیلی خیلی ممنون واقعا (10 سال پیش)
0 0
کاش برای readData هم مثال میزدید که چجوری خروجی listener رو به jsonarray باید داد؟چون اون از جنس String میگیره (9 سال پیش)
0 0
readData چی هست؟! من یادم نیست استاد چی درس دادن! به صورت یک سوال مجزا مطرح کنید به همراه کد (9 سال پیش)
0 0
ببخشید اما خروجی این خط string نیست WebService.readUrl( لینک params, listener); چطور بریزمش توی result (9 سال پیش)
0 0
متوجه سوالتون نشدم! ! (9 سال پیش)
0 0
سلام امکانش هست دیتایی(در اینجا JSON) که در متد onReceived دریافت می کنیم رو خارج از متد و listener استفاده کنیم . چون من وقتی با استفاده از یک فیلد میخونمش و توی Log چاپش میکنم null بر میگردونه! (9 سال پیش)
0 0
بله میشه ، وقتی دیتا در متد onReceived دریافت شد بریزیدش داخل یک متغیر سراسری (فیلد) (9 سال پیش)
0 0
همین کارو می کنم ولی null بر میگردونه پس از چاپش در Log . اما توی onReceive درست چاپ میشه! (9 سال پیش)
پاسخ به سوال 
سعید  9 سال پیش
0 0

این تابع readdata هستش 

publicstaticvoid readData(){String result =WebService.readUrl("http://***.php?action=read",null);
		   if(result !=null){
			   try{
				    G.tasks.clear();
				    JSONArray tasks =newJSONArray(result);//for(int i = 0 ; i<tasks.length();
				    for(int i = tasks.length()-1; i>=0;i--){                    
					JSONObjectobject  = tasks.getJSONObject(i);StructTask task =newStructTask();
					task.id =object.getLong("task_id");
					task.title =object.getString("work_title");
					task.desc =object.getString("work_desc");
					task.done=object.getInt("work_done")==1?true:false;
					G.tasks.add(task);}}catch(JSONException e){// TODO Auto-generated catch block
				e.printStackTrace();}
			   
		   }
		   
	}

 

0 0
سوالتون اینه که بعد از پر کردن آرایه چطور به listener پاسش بدیم؟ اگر اینه که در پارامتر ورودی متد onReceived بجای String یک ArrayList بزارید. (9 سال پیش)
پاسخ به سوال 
محمد آقا  9 سال پیش
0 0

کسی از دوستان تونسته این مشکل رو حل کنه ؟

+1 0
کدوم مشکل؟ مشکلی نمونده ! (9 سال پیش)
پاسخ به سوال 
hassan  9 سال پیش
0 0


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