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

مشکل در پروژه دانلودر

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

سلام . بنده همه ی کار هایی که گفته شده انجام دادم همون اول پروژه دانلودر کرش میکنه و این ارور میده

قسمت کانکشن ارور میده و من یک URL ساده از یک عکس از یک سایت برداشتم و وقتی توی بروزر میزنم راحت بازش میکنه.

 

 03-01 15:52:22.112    2856-2856/com.example.mohamad.testdownloader E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.mohamad.testdownloader, PID: 2856
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mohamad.testdownloader/com.example.mohamad.testdownloader.MainActivity}: 
android.os.NetworkOnMainThreadException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) at java.net.InetAddress.lookupHostByName(InetAddress.java:418) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) at java.net.InetAddress.getAllByName(InetAddress.java:215) at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) at com.example.mohamad.testdownloader.FileDownloader.download(FileDownloader.java:21) at com.example.mohamad.testdownloader.MainActivity.onCreate(MainActivity.java:19) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)             at android.app.ActivityThread.access$800(ActivityThread.java:144)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:135)             at android.app.ActivityThread.main(ActivityThread.java:5221)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

نظرات

Spirit 11 سال پیش
در سایت جستجو کنید «NetworkOnMainThreadException»

پاسخ‌ها 2

IIVII 11 سال پیش

توی یک ترد دیگه فراخانی کردم اما بازم نشد این ارور داد

اینجوری که من فهمیدم به پرمیشن گیر میده درصورتی که من دسترسی هم پرمیشن هم اس دی کارت دادم.

 

 03-01 16:17:27.723    3000-3000/com.example.mohamad.testdownloader E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.mohamad.testdownloader, PID: 3000
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mohamad.testdownloader/com.example.mohamad.testdownloader.MainActivity}:
java.lang.SecurityException: Permission denied (missing INTERNET permission?)

نظرات

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

خب من مشکل با AsynTask حل کردم و چون توضیحات خوبی توی انجمن ندیدم تصمیم گرفتم یک توضیح و روش انجامش و بگم

 

برای استفاده از AsynTask به روش زیر عمل کنید کد های پایین مال کلاس FileDownloader هست

 public class FileDownloader extends AsyncTask{


    private String downloadpath;
    private String filepath;


    public FileDownloader(String d,String f){

        downloadpath = d;
        filepath = f;
    }


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

        try {
            URL url = new URL(downloadpath);
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);
            connection.connect();


            FileOutputStream outputStream = new FileOutputStream(filepath);
            InputStream inputstream = connection.getInputStream();

            byte[] buffer = new byte[8*1024];
            int len=0;
            while ((len = inputstream.read(buffer))>0){

                outputStream.write(buffer,0,len);

            }
            outputStream.close();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "";
    }
}

 

 

خب در بالا بنده کد خومو گذاشتم که ببینید فقط مشتق بگیرید و در doInBackground کد هارو اجرا کنید برای فراخانی هم اینطوری عمل کنید مثلا توی MainActivity بجای نوشتن FIlerdownload.flan به روش زیر عمل کنید

 

 new FileDownloader("آدرس",G.DIR_MAPS + "/sample-image.jpg").execute();

 

 

نظرات


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