تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل در اندروید استودیو
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
UP TO
DAY........
سلام
بعد از جوستو جو تونت متوجه شدم که مشکل از ایمپورت lidrary نیست بلکه از sdk است این رویش که من استفاده میکردم تو اکلیپس sdk8 بود جواب میدد ولی وقت تو اندروید استود پروژه میساختم  sdk از 8 بالابود دیگه فایل هم ارسال نمیشد برای اینکه فایل ارسال شه
میگن وباید از کلاس (Async Task) استفاده کنین
سوال من اینه چگونه از این کلاس (Async Task)  تو کد استفاده کنم من کدهارو میزارم لطفاوراهنمای کنین ممنون
کد اکتیویتی من

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
import android.widget.Toast;

public class MainActivity extends Activity {
private String file_name;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       onCreaty();
   }
   SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd-HH-mm-ss");
   String curringdateandtime = sdf.format(new Date());

   private void onCreaty() {
       String file = Environment.getExternalStorageDirectory().toString();
       String filepath = file + "/test";
       File dir = new File(filepath);
       if (!dir.exists()) {
           dir.mkdirs();
           Toast.makeText(getApplicationContext(), "Environment " +"test",  Toast.LENGTH_LONG).show();
       }
       File file1 = new File(dir, curringdateandtime +".txt");

       try {
           FileOutputStream f = new FileOutputStream(file1);
           PrintWriter pw = new PrintWriter(f);
           pw.println("www.kelidestan.com");
           pw.println("Alireza Golmakani");
           pw.flush();
           pw.close();
           f.close();
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }




   }



   @Override
   protected void onDestroy() {
       // TODO Auto-generated method stub
       super.onDestroy();
       findfilename();
       sendmail();
   }

   public String findfilename() {
       File files = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test");
       if (files.exists()) {
           File[] listfiles = files.listFiles();
           if (listfiles != null) {
               int i;
               for (i = 0; i < listfiles.length; i++) {
                   File fileiyom = listfiles[i];
                   if (fileiyom.isFile()) {

                       String path = fileiyom.getPath();
                       file_name = path.substring(path.lastIndexOf("/") + 1);
                       file_name=file_name.substring(0,file_name.lastIndexOf("."));
                       Toast.makeText(getApplicationContext(), "Start find_filename from " + file_name, Toast.LENGTH_LONG).show();

                   }  }  }  }
       return file_name; }

   public void sendmail() {
       try {
           GMailSender sender = new GMailSender("yourgmail@gmail.com", "yourpass");
           sender.addAttachment(Environment.getExternalStorageDirectory().getAbsolutePath()+"/test/" +file_name+ ".txt");
           sender.sendMail("email",
                   "This is Body",
                   "hhhhh@yahoo.com",
                   "yourgmail@gmail.com");
           Toast.makeText(getApplicationContext(), "Email Sending " +file_name,  Toast.LENGTH_LONG).show();
       } catch (Exception e) {
           Log.e("SendMail", e.getMessage(), e);
       }}


}


  

باسلام دوستان

میخوام این کد بالارا تو کلاس async task بزارم اما نمیدونم چطوری میشه اینکار
باید به کلاس Async خودتون یه فیلد private از نوع Runnable اضافه کنین و براش Setter بنویسین. بعد اینطرف با فراخوانی متد Setter و ارسال یک new Runnable بهش، اون رو مقداردهی کنید. کدهاتون رو هم توی متد run که موقع new کردن باید Override کنین قرار بدین. بعد توی AsyncTask توی onPostExecute این کد رو بگذارین:
if (runnable != null) {
    runnable.run();
}

توی مثال بالا فرض کردم اسم فیلد private شما که تعریف کردین، runnable هست.