2011-08-15 9 views
4

MySQLデータベースをホストするPHPサーバから私のアンドロイドアプリが情報を取得する必要があります。これまでのところうまく動作します。サーバーは情報をJSONにエンコードして送信し、それをうまく解析できます。PHPサーバからアンドロイドに画像とメタデータを取得する

しかし、今私はDBから取得した情報の各行と一緒に画像を取得する必要があります。私が得ている情報には、ファイルシステムに対応するイメージがあるパスを指定するフィールドがあります。

画像のパスを取得したら、取得した情報行と一緒に送ることができるように、その画像をどのように読み取るのですか? JSONで画像と一緒にエンコードすることはできますか?または、私はアンドロイドアプリの情報を持っていれば、私はreadfileでそれらを一つ一つ読むべきですか? JSONで処理できる場合は、後でどのように画像のデータを解析しますか?あなたは例を挙げることができますか?

答えて

0

これは、データと共に画像を取得するために行ったことです。私はそれが誰かを助けることができるならばそれを投稿する。

これは、サーバー側でデータを送信するPHPスクリプトの一部です:

$i=0; 
    //$sql contains the result from the query of the data 
    while($row=mysql_fetch_array($sql)){ 
     $output[]=$row; 

     //Here we fetch the image from the files table 
     $query = "SELECT path, type FROM FILES WHERE poi_id = '" . mysql_real_escape_string(trim($output[$i][0])) . "'"; 
     $r = mysql_query($query); 
     $img = mysql_fetch_array($r); 
     $bin = base64_encode_image($img[0]); 

     //Let's append the image and the type to the data output. 
     $output[$i]['img'] = $bin; 
     $output[$i]['type'] = $img[1]; 
     $i++; 
    } 
    //This method sends the response to the Android app 
    //You can just use echo(json_encode($output)); 
    RestUtils::sendResponse(200, json_encode($output), 'application/json'); 

そして、Androidアプリで、JSONを解析した後、あなたがにイメージとしてbase64文字列を保存することができますこのようなファイルシステム:

public void createImage(String image, String name){ 
    try{ 
     byte[] imageAsBytes = Base64.decode(image.getBytes(), Base64.DEFAULT); 
     Bitmap img_bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length); 

     FileOutputStream fos = openFileOutput(name, Context.MODE_WORLD_READABLE); 

     img_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
     fos.flush(); 
     fos.close(); 

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

テキストフォームで画像を取得する1つの方法は、base64を使用することです。私はいくつかのwebservicesとそれを使用して、実際にそこにAndroid用のデコーダがあります。 APIレベル8以降はソースコードに1つあります。http://developer.android.com/reference/android/util/Base64.htmlしかし、他のレベルをターゲットにしたいので、私はそれを自分で含めます。 簡単な方法の1つは、イメージをファイルとしてではなくデータベースに保存することです。

+0

私は、base64について読んで、私は、pHを見ましたそれを行うp関数。しかし、どのようにイメージをPHP変数として取得しますか?ファイル機能では?それとももっと複雑なのでしょうか? DBでBLOBを使用せず、イメージをファイルシステムに格納したいと思っています。 – ferguior

+0

私はファイルシステムにファイルを格納することによってそれを使用していません。私は、Webサービスが私にbase64で情報を与えたときにしか使用していません。 –

0

パスから画像をダウンロードするためには、

 public void DownloadImageFromPath(String path){ 
      InputStream in =null; 
      Bitmap bmp=null; 
      ImageView iv = (ImageView)findViewById(R.id.img1); 
      int responseCode = -1; 
      try{ 

       URL url = new URL(path);//"http://192.xx.xx.xx/mypath/img1.jpg 
       HttpURLConnection con = (HttpURLConnection)url.openConnection(); 
       con.setDoInput(true); 
       con.connect(); 
       responseCode = con.getResponseCode(); 
       if(responseCode == HttpURLConnection.HTTP_OK) 
       { 
        //download 
        in = con.getInputStream(); 
        bmp = BitmapFactory.decodeStream(in); 
        in.close(); 
        iv.setImageBitmap(bmp); 
       } 

      } 
      catch(Exception ex){ 
       Log.e("Exception",ex.toString()); 
      } 
     } 
関連する問題