2017-10-04 16 views
0

나는 DdownloadTask.java 내 AsyncTask를에서 상황에 SlideshowDialogFragment 캐스팅하고 싶지만 내가 쓸 때조각을 비동기 생성자로 캐스팅하는 방법?

 final DownloadTask downloadTask = new 
     DownloadTask(myActivity.this); 

SlideshowDialogFragment 대신 myActivity, 안드로이드 경고를 표시하고 내가 모르는 warning android

말의 나는한다 ?? 도움을 들으 나

public class SlideshowDialogFragment extends DialogFragment{ 


ArrayList<Image> images; 
ViewPager viewPager; 
MyViewPagerAdapter myViewPagerAdapter; 
TextView lblCount,lblTitle,lblDate; 
Button btn_set; 
Button btn_download; 
int selectedPostition; 
DownloadManager downloadManager; 
public static ProgressDialog mProgressDialog; 






static SlideshowDialogFragment newInstance(){ 
    SlideshowDialogFragment f=new SlideshowDialogFragment(); 
    return f; 
} 

@Override 
public View onCreateView (LayoutInflater inflater,ViewGroup container,Bundle saveInstanceState) 
{ 


    View v=inflater.inflate(R.layout.fragment_image_slider,container,false); 
    viewPager=(ViewPager)v.findViewById(R.id.view_pager); 

    lblTitle=(TextView)v.findViewById(R.id.title); 
    lblDate=(TextView)v.findViewById(R.id.date); 
    btn_set=(Button)v.findViewById(R.id.btn_set); 
    btn_download=(Button)v.findViewById(R.id.btn_download); 






    images=(ArrayList<Image>) getArguments().getSerializable("images"); 
    selectedPostition=getArguments().getInt("position"); 


    myViewPagerAdapter=new MyViewPagerAdapter(); 
    viewPager.setAdapter(myViewPagerAdapter); 



    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int 
     positionOffsetPixels) { 
      displayInfo(position); 
      //setWallpaper(position); 
     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 






    setCurrentItem(selectedPostition); 

    btn_download.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      download(selectedPostition); 



     } 
    }); 






    return v; 



} 

    void download (int position){ 

    Image image=images.get(position); 
    String large = image.getlarge(); 

    final DownloadTask downloadTask = new 
    DownloadTask(**SlideshowDialogFragment**.this); 
    downloadTask.execute(large); 
} 

그리고 이것은 내가이 클래스에서 AsyncTask를 쓰기 DownloadTask 활동 생성자된다

public class DownloadTask extends AsyncTask<String, Integer, String> { 

private Context context; 
private PowerManager.WakeLock mWakeLock; 

public DownloadTask(Context context) { 
this.context = context; 
} 





@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    // take CPU lock to prevent CPU from going off if the user 
    // presses the power button during download 
    PowerManager pm = (PowerManager) 
    context.getSystemService(Context.POWER_SERVICE); 
    mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
    getClass().getName()); 
    mWakeLock.acquire(); 
    mProgressDialog.show(); 
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 
    super.onProgressUpdate(progress); 
    // if we get here, length is known, now set indeterminate to false 
    mProgressDialog.setIndeterminate(false); 
    mProgressDialog.setMax(100); 
    mProgressDialog.setProgress(progress[0]); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
    mWakeLock.release(); 
    mProgressDialog.dismiss(); 
    if (result != null) 
    Toast.makeText(context,"خطای دانلود "+result, Toast.LENGTH_LONG).show(); 
    else 
    Toast.makeText(context,"دانلود با موفقیت انجام شد", 
    Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    protected String doInBackground(String... sUrl) { 
    InputStream input = null; 
    OutputStream output = null; 
    HttpURLConnection connection = null; 
    try { 
    URL url = new URL(sUrl[0]); 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.connect(); 

    // expect HTTP 200 OK, so we don't mistakenly save error report 
    // instead of the file 
    if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { 
    return "Server returned HTTP " + connection.getResponseCode() 
     + " " + connection.getResponseMessage(); 
    } 

    // this will be useful to display download percentage 
    // might be -1: server did not report the length 
    int fileLength = connection.getContentLength(); 

    // download the file 
    input = connection.getInputStream(); 
    output = new FileOutputStream("/sdcard/tabriz.jpg"); 

    byte data[] = new byte[4096]; 
    long total = 0; 
    int count; 
    while ((count = input.read(data)) != -1) { 
    // allow canceling with back button 
    if (isCancelled()) { 
     input.close(); 
     return null; 
    } 
    total += count; 
    // publishing the progress.... 
    if (fileLength > 0) // only if total length is known 
     publishProgress((int) (total * 100/fileLength)); 
    output.write(data, 0, count); 
    } 
} catch (Exception e) { 
    return e.toString(); 
} finally { 
    try { 
    if (output != null) 
     output.close(); 
    if (input != null) 
     input.close(); 
    } catch (IOException ignored) { 
    } 

    if (connection != null) 
    connection.disconnect(); 
} 
return null; 

} }

내가 비동기로 SlideshowDialogFragment 캐스팅을 위해 무엇을 할 건가요?

+0

로 직접 사용할 수 있습니다 당신의 조각 내부 – NSimon

+0

조각을 위해 getActivity(); 새 DownloadTask (getActivity()); –

+0

@AshwiniKutre 내가 작성한 최종 다운로드 TaskTask = 새로운 DownloadTask (getActivity()); downloadTask.execute (large); 경고가 숨겨져 있지만 점심 응용 프로그램과 단편 응용 프로그램의 버튼을 클릭하면 충돌이 발생합니다. –

답변

0

이와 같이 생성자를 정의한대로 Context을 전달해야합니다. A Fragment에는 Context이 없지만 Activity에 있습니다.() 조각이 활동의 ​​한 부분이기 때문에 당신은

SlideshowDialogFragment.this.getActivity(); 

에 액세스 할 수 있습니다 귀하의 질문에, 간단하게는 getContext를 호출 "조각 내부 컨텍스트를 얻는 방법"이면 당신은 또한 DownloadTask(getActivity())

+0

나는 마지막으로 DownloadTask를 작성합니다. downloadTask = 새 DownloadTask (getActivity()); downloadTask.execute (large); 그리고 경고는 숨겨져 있지만 점심 응용 프로그램과 조각 응용 프로그램의 버튼을 클릭하면 충돌이 일어납니다. –

+0

@MasihKolahdouzan 충돌 로그 란 무엇입니까? –

+0

https://pasteboard.co/GNnCxtNS.png –