2013年1月3日木曜日

Android端末でGAEブロブストア上の画像の取得

Basic認証とストレージに画像保存とイメージビューに画像を保存まで。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package com.taku.nfchome;
 
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
 
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
 
import extra.UrlManager;
 
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.ImageView;
 
public class ImageActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.image_activity);
  final ImageView iv = (ImageView)findViewById(R.id.imageView);
   
  new AsyncTask<string bitmap="bitmap" void="void">() {
   @Override
   protected Bitmap doInBackground(String... params) {
    Bitmap bmp = null;
    try{
     DefaultHttpClient httpClient = new DefaultHttpClient();
     String url = new String(params[0]);
     HttpGet request = new HttpGet(url);
     // 認証するUserとPW
     UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("「ユーザ名」","「パスワード」");
     AuthScope scope = new AuthScope(request.getURI().getHost(), request.getURI().getPort());
     httpClient.getCredentialsProvider().setCredentials(scope, credentials);
      
     HttpResponse httpResponse = httpClient.execute(request);
         
        // ステータスコードを取得
        int statusCode = httpResponse.getStatusLine().getStatusCode();
         
        HttpGet httpRequest = new HttpGet(url);
         
        //ーーー画像生成処理ーーー
        HttpResponse response = (HttpResponse) httpClient.execute(httpRequest);
        HttpEntity entity1 = response.getEntity();
        BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity1);
        InputStream is = bufHttpEntity.getContent();
        bmp = getBitmap(is);
        // リソースを解放
        entity1.consumeContent();
        // クライアントを終了させる
        httpClient.getConnectionManager().shutdown();
    } catch (UnsupportedEncodingException e) {
     e.printStackTrace();
    } catch (ClientProtocolException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }
     
    return bmp;
   }
   @Override
   protected void onPostExecute(Bitmap bmp) {
    Log.v("image", "ok");
    iv.setImageBitmap(bmp);
    saveBitmapToSd(bmp);
     
   }
    
  }.execute("「URL」");
 }
 /**
  * 画像に変換
  * @param is
  * @return
  */
 public static Bitmap getBitmap(InputStream is) {
  Bitmap bmp = null;
  byte[] line = new byte[1024];
  int byteSize = 0;
  try {
   // バイト単位での読込
   ByteArrayOutputStream out = new ByteArrayOutputStream();
   while ((byteSize = is.read(line)) > 0) {
    out.write(line, 0, byteSize);
   }
   // オプション
   BitmapFactory.Options options = new BitmapFactory.Options();
   options.inSampleSize = 0;
    
   byte[] byteArray = out.toByteArray();
   Log.v("image", "byteArray.length = " + byteArray.length);
   bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length, options);
   is.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return bmp;
 }
 /**
  * 画像をストレージへ保存
  * @param mBitmap
  */
 public void saveBitmapToSd(Bitmap mBitmap) {
  try {
  // sdcardフォルダを指定
  File root = Environment.getExternalStorageDirectory();
 
  // 日付でファイル名を作成 
  Date mDate = new Date();
  SimpleDateFormat fileName = new SimpleDateFormat("yyyyMMdd_HHmmss");
 
  // 保存処理開始
  FileOutputStream fos = null;
  fos = new FileOutputStream(new File(root, fileName.format(mDate) + ".jpg"));
  Log.v("image", (new File(root, fileName.format(mDate) + ".jpg").toString()));
  // jpegで保存
  mBitmap.compress(CompressFormat.JPEG, 100, fos);
  // 保存処理終了
  fos.close();
  } catch (Exception e) {
   Log.e("Error", "" + e.toString());
  }
 }
}
</string>