2016-09-23 24 views
0

サーバーからイメージをダウンロードしてビットマップに変換します。イメージをダウンロードしてビットマップに変換しようとしましたが、nullを返します。私はnullとしてビットマップを取得します。URLをビットマップに変換する際にビットマップを取得する

イメージをビットマップに変換するには、私はasyncTaskを1つ作成しました。

非同期タスクにURLを渡す:

String url = ServiceUrl.getBaseUrl() + ServiceUrl.getImageUserUrl() + profileImage; 
      Log.e("url", url); 


    new ImageUserTask(mContext, url, profileImage).execute(); 

ImageUserAsyncタスク:

public class ImageUserTask extends AsyncTask<Void, Void, Bitmap> { 
    String imageprofile; 
    private String url; 
    private Bitmap mBitmap; 
    private Context mContext; 

    public ImageUserTask(Context context, String url, String imageprofile) { 
     this.url = url; 
     this.imageprofile = imageprofile; 
     this.mContext = context; 
    } 

    @Override 
    protected Bitmap doInBackground(Void... params) { 
     try { 
      //Url 
      URL urlConnection = new URL(url); 
      //Conntecting httpUrlConnection 
      HttpURLConnection connection = (HttpURLConnection) urlConnection.openConnection(); 
      connection.setDoInput(true); 
      //Connected to server 
      connection.connect(); 
      //downloading image 
      InputStream input = connection.getInputStream(); 
      //converting image to bitmap 
      Bitmap myBitmap = BitmapFactory.decodeStream(input); 

      return myBitmap; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     super.onPostExecute(result); 

     if (result != null) { 


      result = mBitmap; 

      new ImageServer(mContext).save(result); 

     } 
    } 

} 

EDIT:何が問題なのだろう

 @Override 
    protected void onPostExecute(JSONObject response) { 
     super.onPostExecute(response); 
     count=0; 
     if (response.has("message")) { 
      JSONObject userJson = null; 
      String message = null; 
      count++; 
      try { 

       if (response.getString("message").equalsIgnoreCase(KEY_SUCCESS)) { 
        Toast.makeText(mContext, "user authenticated successfully", Toast.LENGTH_LONG).show(); 
        userJson = response.getJSONObject("user"); 
        String userId = userJson.getString("user_id"); 
        String userName = userJson.getString("user_name"); 
        String profileImage = userJson.getString("profile_image"); 
        String mobileNo = userJson.getString("mobile_no"); 


        String url = ServiceUrl.getBaseUrl() + ServiceUrl.getImageUserUrl() + profileImage; 
        Log.e("url", url); 

        User user = new User(); 

        user.setmUserId(userId); 
        user.setmUserName(userName); 

        user.setmProfileImage(profileImage); 
        user.setmMobileNo(mobileNo); 

        SharedPreferences.Editor editor = mContext.getSharedPreferences("username",mContext.MODE_PRIVATE).edit(); 
        editor.putString("UserUsername",userName); 
        editor.commit(); 

        Target target = new Target() { 
         @Override 
         public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 

          try { 

           File f = new File(mContext.getCacheDir(), "Profile"); 
           f.createNewFile(); 

//Convert bitmap to byte array 
           ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
           bitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos); 
           byte[] bitmapdata = bos.toByteArray(); 

//write the bytes in file 
           FileOutputStream fos = new FileOutputStream(f); 
           fos.write(bitmapdata); 
           fos.flush(); 
           fos.close(); 
           Log.e("File",String.valueOf(f)); 
          } 
          catch (IOException e) 
          { 

          } 

         } 

         @Override 
         public void onBitmapFailed(Drawable errorDrawable) { 
         } 

         @Override 
         public void onPrepareLoad(Drawable placeHolderDrawable) { 
         } 
        }; 

         Picasso.with(mContext).load(url).into(target); 


        Toast.makeText(mContext, "user authenticated successfully", Toast.LENGTH_LONG).show(); 


        progressDialog.dismiss(); 
        mContext.startActivity(intent); 
        Picasso.with(mContext).cancelRequest(target); 
        } 
       } 

はピカソを使用しようとしましたか?

+0

あなたのlogcatエラーを投稿しますか? – Nisarg

+0

イメージが実際にそこに存在する場合、あなたはURLをチェックしましたか? –

+0

私の最初の考えは、ImageUserTaskに渡される実際のURLを記録することです。 – mm759

答えて

-1

最初に画像があるかどうかは@aman groverが言った通りです 利用可能であればPicasso LibをダウンロードしてURLからダウンロードしてください。ここ

は、サンプルコードでは、私はこの方法で画像を取得しています、これを試してみてください

private Target target = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
     //Note : here you can get Bitmap 

     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 
     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 
     } 
} 

private void someMethod() { 
    Picasso.with(this).load("url").into(target); 
} 

@Override 
public void onDestroy() { // could be in onPause or onStop 
    Picasso.with(this).cancelRequest(target); 
    super.onDestroy(); 
} 
+0

ユーザーがライブラリのヘルプを依頼していません –

+0

@RahulKhuranaしかし、ピカソを使用して非同期タスクそして彼は簡単にBitmapを得ることができます – PriyankaChauhan

+0

@RahulKhurana私は正しいですか? – PriyankaChauhan

1

です。

   URL url1l = new URL("<Image url>"); 

       URLConnection connection = url1l.openConnection(); 
       connection.connect(); 
       // this will be useful so that you can show a typical 0-100% progress bar 
       int fileLength = connection.getContentLength(); 

       // download the file 
       InputStream is = new BufferedInputStream(connection.getInputStream()); 
       bitmap = BitmapFactory.decodeStream(is); 
+0

これを試しましたが、これもnullを返します。 @Furqan – Sid

+0

次に、画像が存在するかどうかチェックしますか? @Sid – Furqan

+0

ログにこのURLがありますhttp://xesoftwares.co.in/contactsapi/profile_images/d34b638b93773140eb94d5f03c20237c.jpg @Furqan – Sid

0

最も可能性の高い理由は、サーバーからエラーが発生しているか、または戻ってきたデータをデコードできないことです。接続が開かれた後、まず、応答コードをチェックしてください。

connection.connect(); 
int respCode = connection.getResponseCode(); 
Log.d("resp code", "response code " + respCode); 

あなたが200以外の何かを得る場合には、何かが(間違ったURL、認証、またはサーバーエラー)データを取得して間違っています。あなたが200を取得した場合、問題はあなたが受信しているデータです。データをバイト配列に読み込んで、ファイルにダンプして調べます。

関連する問題