رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اضافه کردن اینترفیس به AsyncTask
#1
سلام دوستان و استادان عزیز 
بنده این کدو دارم که اطلاعات رو با ایسین تسک میگره میخوام یه اینتر فیس بهش اظافه کنم هر چی فکر کردن و سرچ کردن نشد که نشد 
الان اطلاعات رو میگره داخل یه Stringبه اسم دیتا میزاره اما من میخوام اطلاعات رو که گرفت بزاره تو اینتر فیس و بفرسته به صفحه اصلی و داخل onReceived بزاره 
نیازه به راهنمای دارم 

کد ها به درستی کار میکنه فقط من میخوام به جای اضافه کردن در استرینگ با اینتر فیست بفرستم به صفحه اصلی 

public class MainActivity extends AppCompatActivity{


   public static String data="";


   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_col);

       send();
   }

   public void send(){
       new AsyncTaskInsertRegister("http://ادرس ", "user_register", "pass_register", "forget_user", "name_fa").execute();
   }

   @Override
   public void onReceived(List<Product> products) {


   }
}


public class AsyncTaskInsertRegister extends AsyncTask {



   public String link="";
   public String user_register;
   public String pass_register;
   public String forget_user;
   public String name_fa;

    public AsyncTaskInsertRegister(String link,String user_register ,String pass_register,String forget_user,String name_fa) {

       this.link = link;
       this.user_register = user_register;
       this.pass_register = pass_register;
       this.forget_user = forget_user;
       this.name_fa = name_fa;
   }

   @Override
   protected Object doInBackground(Object[] params) {

       try {

           String data = URLEncoder.encode("user_register","UTF8")+"="+URLEncoder.encode(user_register,"UTF8");
           data+="&"+URLEncoder.encode("pass_register","UTF8")+"="+URLEncoder.encode(pass_register,"UTF8");
           data+="&"+URLEncoder.encode("forget_user","UTF8")+"="+URLEncoder.encode(forget_user,"UTF8");
           data+="&"+URLEncoder.encode("name_fa","UTF8")+"="+URLEncoder.encode(name_fa,"UTF8");

           URL url = new URL(link);
           URLConnection conection = url.openConnection();

           conection.setDoOutput(true);
           OutputStreamWriter writer=new OutputStreamWriter(conection.getOutputStream());
           writer.write(data);
           writer.flush();


           BufferedReader reader = new BufferedReader(new InputStreamReader(conection.getInputStream()));
           StringBuilder builder=new StringBuilder();

           String line=null;
           while ((line=reader.readLine())!=null){
               builder.append(line);

           }


           //اطلاعات در خط زیر گرفته میشود.
           MainActivity.data=builder.toString();
        } catch (Exception e) {

       }
       return "";
   }

   public interface OnResultcalback<T> {
       void onReceived(T t);
   }


}
پاسخ
تشکر شده توسط:
#2
دوستان با هزینه این مشکلو واسم حل میکنید؟
پاسخ
تشکر شده توسط:
#3
این کد AsyncTask شما:
public class AsyncTaskInsertRegister extends AsyncTask<String, Void, String> {
    private OnResultReceivedListener listener;
 
    @Override
    protected String doInBackground(String... strings) {
        if (strings.length > 4) {
            String link = strings[0];
            String user_register = strings[1];
            String pass_register = strings[2];
            String forget_user = strings[3];
            String name_fa = strings[4];
            try {
                String data = MessageFormat.format("user_register={0}&pass_register={1}&forget_user={2}&name_fa={3}", URLEncoder.encode(user, "UTF8"), URLEncoder.encode(pass_register,"UTF8"), URLEncoder.encode(forget_user,"UTF8"), URLEncoder.encode(name_fa,"UTF8"));
                URL url = new URL(link);
                URLConnection conection = url.openConnection();
                conection.setDoInput(true);
                conection.setDoOutput(true);
                OutputStreamWriter writer = new OutputStreamWriter(conection.getOutputStream());
                writer.write(data);
                writer.flush();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conection.getInputStream()));
                StringBuilder builder = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
                return builder.toString();
            } catch (Exception e) {
        }
        return "";
    }

    @Override
    protected void onPostExecute(String result) {
        if (listener != null) {
            listener.onResultReceived(result);
        }
    }
    
    public AsyncTaskInsertRegister setListener(OnResultReceivedListener listener) {
        this.listener = listener;
        return this;
    }

    public static interface OnResultReceivedListener {
        void onResultReceived(String result);
    }
}

این هم نحوه‌ی استفاده:
new AsyncTaskInsertRegister()
    .setListener(new AsyncTaskInsertRegister.OnResultReceivedListener() {
        @Override
        public void onResultReceived(String result) {
            // do whatever you want with result
        }
    })
    .execute("http://ادرس ", "user_register", "pass_register", "forget_user", "name_fa")
پاسخ
تشکر شده توسط: sirwan
#4
خیلی خیلی تشکر استاد عزیز
اما متاسفانه یه خطا های داره 
   

   
ممنونتون میشم کمکم کنید . 
خیلی خیلی ببخشید ازیتتوون کردم
پاسخ
تشکر شده توسط:
#5
خطا برای اینه که کدها رو داخل متد doInBackground نوشتین. به کدی که گذاشتم بیشتر دقت کنید. همچنین به محل باز و بسته‌شدن آکولادها در کلاس خودتون.
پاسخ
تشکر شده توسط: sirwan
#6
دمت گرم استاد عزیز
خیلی خیلی خیلی خیلی خیلی تشکر
بینهایت تشکر

میدونم این پاسخ الان اسپم هست ولی اگه زیاد تشکر نکنم عذاب وجدان میگیرم
100 ساعت تشکر کنم کمه

سپاس
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 2 مهمان