AndroidはAPIを通じてデータベース内の画像ファイルを取得する方式です。
Overview
今日はAndroidを復習しましたが、どうやって私達のデータベースの中の写真を取り出してbitmapに変換して表示しますか?
開発環境と技術
Visual Studioを使う2019
Android Studio 3.5
APIはASP.NET WEB APIを使って開発します。
データベース操作はEntity Fraamewarkのみです。
ローカルデータベースをデータソースとして使う
もしあなたがソフトウェアとAPIを開発する必要があるプログラマーなら、それを見てもいいです。
API開発
ここでは開発のためにAPIを使うのが簡単です。しかし、国際慣例によって、まずAPIのソースコードを見に行きます。
個人的にはJsonが好きですので、すべてのポートをJSONに変えます。コードは以下の通りです
それから私達はどうやって私達の写真データを返しますか?
このように私達のAPIの基礎部分は完成しました。
Androidはどのように画像を操作しますか?
まず、私たちは私たちのネットワークリソースを取得することを示します。
コードを見てみたいです。
Httpの方法はここでは見ません。みんなができると信じています。
追加知識:androidはネットワークデータを取得する(超簡単、直接呼び出し)
私は余計なことを言わないで、やはり直接コードをかけましょう。
今日はAndroidを復習しましたが、どうやって私達のデータベースの中の写真を取り出してbitmapに変換して表示しますか?
開発環境と技術
Visual Studioを使う2019
Android Studio 3.5
APIはASP.NET WEB APIを使って開発します。
データベース操作はEntity Fraamewarkのみです。
ローカルデータベースをデータソースとして使う
もしあなたがソフトウェアとAPIを開発する必要があるプログラマーなら、それを見てもいいです。
API開発
ここでは開発のためにAPIを使うのが簡単です。しかし、国際慣例によって、まずAPIのソースコードを見に行きます。
個人的にはJsonが好きですので、すべてのポートをJSONに変えます。コードは以下の通りです
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API
// Web API
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
}
私たちは私たちのWebAppliCinfigのクラスにコードを追加したいです。そうすると、すべてのポートをデータに戻してJSON形式のデータにします。それから私達はどうやって私達の写真データを返しますか?
// GET: api/Pictures
public object GetPictures()
{
var showData = db.Pictures.ToList();
List<Tuple<int,string>> list = new List<Tuple<int, string>>();
foreach (var item in showData)
{
list.Add(new Tuple<int, string>(item.Id,Convert.ToBase64String(item.Img)));
}
return list;
}
ここではBase 64の方法を使用して、まず私たちのバイト配列を文字列に変換して元のグループに追加します。そして戻ります。このように私達のAPIの基礎部分は完成しました。
Androidはどのように画像を操作しますか?
まず、私たちは私たちのネットワークリソースを取得することを示します。
コードを見てみたいです。
/**
* ClassName- @MainActivity-@
**/
private void initPictureData() {
new Thread(new Runnable() {
@Override
public void run() {
// http , 。 Http GET
String httpData = Global.httpGet("Pictures", "");
// JSON List
List<pictureEntity> list = pictureData_JsonHelper.getJsonData(httpData);
Log.d("main_pictureData", String.valueOf(list.size()));
final List<Bitmap> bitmapsList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
// String 。
bitmapsList.add(Global.stringToBitmap(list.get(i).getPicString()));
}
Log.d("BitmapsData", String.valueOf(bitmapsList.size()));
// ViewPager 。
final List<View> viewsList = new ArrayList<>();
for (int i = 0; i < bitmapsList.size(); i++) {
View view = View.inflate(MainActivity.this, R.layout.viewpage_item, null);
ImageView imageView = view.findViewById(R.id.itemImageView);
imageView.setImageBitmap(bitmapsList.get(i));
viewsList.add(view);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
ViewPager viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(new viewPager_Adapter(viewsList));
}
});
}
}).start();
}
これで私たちの操作は全部終わります。次に私達は自分のパッケージに使う方法を見てみます。Httpの方法はここでは見ません。みんなができると信じています。
public static Bitmap stringToBitmap(String pictureString) {
// Base64 String Bitmap
byte[] bytes = Base64.decode(pictureString, Base64.NO_WRAP);
// BitmapFactory Bitmap
// base64 。 。
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {
bytes[i] += 256;
}
}
// 。
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
これで私たちの全過程はすでに完成しました。追加知識:androidはネットワークデータを取得する(超簡単、直接呼び出し)
私は余計なことを言わないで、やはり直接コードをかけましょう。
String getNetData(String connectURL){
String result = ""; // String;
// post
HttpPost httpRequest = new HttpPost(connectURL);
//Post NameValuePair[]
try {
// HTTP
Log.d(" ", " ");
List params = new ArrayList();
params.add(new BasicNameValuePair("start", "123321"));//post ( , )
//params.add(new BasicNameValuePair("end", end+""));// Post ,php
httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
// HTTP response
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
// 200 ,
Log.d(" ", String.valueOf(httpResponse.getStatusLine().getStatusCode()));
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//
Log.d(" ", " ");
result = new String(EntityUtils.toString(httpResponse.getEntity(),"utf8"));
}
} catch (Exception e) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getContext(), " ",Toast.LENGTH_SHORT).show();
}
});
e.printStackTrace();
}
return result;
}
// json ,json
以上のAndroidはAPIを通じてデータベースの中のピクチャーファイルの方式を獲得します。つまり、小編集は皆さんに全部の内容を共有しています。皆さんに参考にしてもらいたいです。どうぞよろしくお願いします。