2012-12-20 4 views
0

Привет, я новичок в андроиде, и мне нужно поделиться имиджем, используя Share Intent. Для этого я использую следующую AsyncTask.android share image + AsyncTask

public class ShareImageTask extends AsyncTask<String, String, String> { 
    private Context context; 
    private ProgressDialog pDialog; 
    String image_url; 
    URL myFileUrl; 

    String myFileUrl1; 
    Bitmap bmImg = null; 
    Intent share; 
    File file; 

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

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 

     super.onPreExecute(); 

     pDialog = new ProgressDialog(context); 
     pDialog.setMessage("Downloading Image ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 

    } 

    @Override 
    protected String doInBackground(String... args) { 
     // TODO Auto-generated method stub 

     try { 

      myFileUrl = new URL(args[0]); 
      HttpURLConnection conn = (HttpURLConnection) myFileUrl 
        .openConnection(); 
      conn.setDoInput(true); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      bmImg = BitmapFactory.decodeStream(is); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 

      String path = myFileUrl.getPath(); 
      String idStr = path.substring(path.lastIndexOf('/') + 1); 
      File filepath = Environment.getExternalStorageDirectory(); 
      File dir = new File(filepath.getAbsolutePath() 
        + "/Google Image Wallpaper/"); 
      dir.mkdirs(); 
      String fileName = idStr; 
      file = new File(dir, fileName); 
      FileOutputStream fos = new FileOutputStream(file); 
      bmImg.compress(CompressFormat.JPEG, 75, fos); 
      fos.flush(); 
      fos.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String args) { 
     // TODO Auto-generated method stub 
     pDialog.dismiss(); 
     share = new Intent(Intent.ACTION_SEND); 
     share.setType("image/jpeg"); 

     share.putExtra(Intent.EXTRA_STREAM, file); 

     startActivity(Intent.createChooser(share, "Share Image")); 

    } 

} 

Теперь я должен позвонить этой ShareImageTask, отправив URL изображения. Но я не знаю, как назвать это ???

Например: -

String Imageurl="my imageurl"; 
new ShareImageTask(Imageurl).execute(); 
+0

ваш получаете любую ошибку при запуске ShareImageTask, как в данном примере? –

+0

Код почти прекрасен, какая проблема? –

+0

@CapDroid Как назвать это AsyncTask ???? –

ответ

1

можно назвать ShareImageTask как:

String Imageurl="my imageurl"; 
new ShareImageTask(Curent_Activity.this).execute(Imageurl); 

и изменение в onPostExecute коде, как:

@Override 
protected void onPostExecute(String args) { 
    // TODO Auto-generated method stub 
    pDialog.dismiss(); 
    share = new Intent(Intent.ACTION_SEND); 
    share.setType("image/jpeg"); 

    share.putExtra(Intent.EXTRA_STREAM,Uri.parse(file.getAbsolutePath().toString())); 

    context.startActivity(Intent.createChooser(share, "Share Image")); 

} 
+0

@HJV: см. Мой ответ на редактирование –

+0

Uri.parse (файл) дайте мне ошибку .. Метод parse (String) в типе Uri не применим для аргументов (Файл) –

+0

@Monika: извините, я пропустил его, просто пройдите путь к файлу в Uri.parse, см. мой ответ на редактирование –

0

Измените свой AsyncTask конструктор нравится этот

public ShareImageTask(Context context,String image_url) { 
     this.context = context; 
     this.image_url = image_url; 
} 

Таким образом, вы можете назвать как этот

String Imageurl="my imageurl"; 
new ShareImageTask(getApplicationContext(),Imageurl).execute(); 
+0

Я не могу видеть конструктор ShareImageTask, который принимает два параметра? –

+0

Этот способ - это работа, но после выполнения диалога «Загрузка изображения». Совместное намерение открыто, но когда я выбираю конкретное, оно не открывается, например, когда я выбираю, почему диалоговое окно приложения исчезает, и «Делить файл не удается, попробуйте еще раз позже». , –

+0

Это все еще возможно, не так ли? Конструктор AsyncTask с двумя параметрами. Я всегда беру параметр для AsyncTask через конструктор. Вид моей привычки кодирования. Извините, если это вас беспокоит: D. – Hein

0

Просто сделать так ..

ShareImageTask task = new ShareImageTask(); 
task.execute(Imageurl); 
0

Просто нужно изменить некоторые в коде ..

ваш написал как этот

new ShareImageTask(Imageurl).execute(); 

но вы должны написать, как этот

new ShareImageTask(getApplicationContext()).execute(Imageurl); 

вашего Creat конструктора только с Context параметр так вам просто нужно пройти только Контекст, когда вы интеризовываете ShareImageTask class

вроде как код ниже:

класса определяют: initilize

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

класса;

new ShareImageTask(getApplicationContext()); 
+0

Этот способ - это работа, но после выполнения диалога «Загрузка изображения».«Совместное намерение открыто, но когда я выбираю конкретный, он не открывается, например, когда я выбираю приложение« Приложение », тогда диалог исчезает и« Делиться файлом не удается, повторите попытку позже ». Тост - это отображение. –