2016-07-06 7 views
-1

1)SQLiteにボタンで送信した画像を保存するのを手伝ってください。SQLiteに画像を保存する方法と、入力テキストと画像をどのように表形式で書き出すことができますか?

2)SQLiteに格納されたすべての入力テキストと画像を任意の形式でエクスポートできますが、エクスポートされたファイルを使用してデータを再度取得できるようにするには、アプリでエクスポート機能を実装する方法を教えてください。

DatabaseHelper.java

package com.example.himanshu.instrumentalinformationcollector; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 


public class DatabaseHelper extends SQLiteOpenHelper { 

private static final int DATABASE_VERSION = 3; 
private static final String DATABASE_NAME = "instruments.db"; 
private static final String TABLE_NAME = "instrument_table"; 
public static final String COL_1 = "ID"; 
public static final String COL_2 = "NAME"; 
public static final String COL_3 = "LOCATION"; 
public static final String COL_4 = "INFORMATION"; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    String CREATE_TABLE="CREATE TABLE " + DatabaseHelper.TABLE_NAME + " (" + 
      DatabaseHelper.COL_1 + " INTEGER," 
      + DatabaseHelper.COL_2 + " TEXT," 
      + DatabaseHelper.COL_3 + " TEXT," 
      + DatabaseHelper.COL_4 + " TEXT);"; 
    sqLiteDatabase.execSQL(CREATE_TABLE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_NAME); 
    onCreate(sqLiteDatabase); 

} 
public boolean insertData(Integer ID, String name, String location, String information){ 
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 

    ContentValues contentValues = new ContentValues(); 

    contentValues.put(DatabaseHelper.COL_1,ID); 
    contentValues.put(DatabaseHelper.COL_2,name); 
    contentValues.put(DatabaseHelper.COL_3,location); 
    contentValues.put(DatabaseHelper.COL_4,information); 

    sqLiteDatabase.insert(DatabaseHelper.TABLE_NAME,null,contentValues); 
    return true; 
} 
} 

MainActivity.java

package com.example.himanshu.instrumentalinformationcollector; 

import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.ParcelFileDescriptor; 
import android.provider.MediaStore; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.Toast; 

import java.io.FileDescriptor; 
import java.io.IOException; 

public class MainActivity extends AppCompatActivity{ 
private static int RESULT_LOAD_IMAGE = 1; 
DatabaseHelper myDB; 
EditText editMessage,editMessage1,editMessage2,editMessage3; 
Button submitData; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button buttonLoadImage = (Button)findViewById(R.id.imgButton); 
    buttonLoadImage.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View arg0) { 

      Intent i = new Intent(
        Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

      startActivityForResult(i, RESULT_LOAD_IMAGE); 
     } 
    }); 
    myDB = new DatabaseHelper(this); 

    editMessage=(EditText)findViewById(R.id.editText); 
    editMessage1=(EditText)findViewById(R.id.editText1); 
    editMessage2=(EditText)findViewById(R.id.editText2); 
    editMessage3=(EditText)findViewById(R.id.editText3); 
    submitData=(Button)findViewById(R.id.submit); 
    AddData(); 

} 

public void AddData(){ 
    submitData.setOnClickListener(
      new View.OnClickListener(){ 
       @Override 
       public void onClick(View v){ 
        boolean isInserted = myDB.insertData(Integer.valueOf(editMessage.getText().toString()),editMessage1.getText().toString(),editMessage2.getText().toString(),editMessage3.getText().toString()); 
       if(isInserted == true) 
        Toast.makeText(MainActivity.this,"Data Inserted",Toast.LENGTH_LONG).show(); 
        else 
        Toast.makeText(MainActivity.this,"Data not Inserted",Toast.LENGTH_LONG).show(); 
       } 
      } 
    ); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

     Cursor cursor = getContentResolver().query(selectedImage, 
       filePathColumn, null, null, null); 
     cursor.moveToFirst(); 

     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     cursor.close(); 

     ImageView imageView = (ImageView) findViewById(R.id.img); 

     Bitmap bmp = null; 

     try { 
      bmp = getBitmapFromUri(selectedImage); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     imageView.setImageBitmap(bmp); 

    } 


} 

private Bitmap getBitmapFromUri(Uri uri) throws IOException { 
    ParcelFileDescriptor parcelFileDescriptor = 
      getContentResolver().openFileDescriptor(uri, "r"); 
    FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 
    Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); 
    parcelFileDescriptor.close(); 
    return image; 
} 

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
     tools:context="com.example.himanshu.instrumentalinformationcollector.MainActivity"> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_alignParentLeft="true" 
      android:layout_marginTop="30dp" 
      android:layout_marginLeft="16sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="ID" 
      android:id="@+id/textView" 
      android:textColor="@android:color/black" 
      /> 
     <ImageView 
      android:layout_alignParentRight="true" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:id="@+id/img" 
      android:background="@drawable/gray" 
      android:layout_marginRight="5dp" 
      android:layout_marginTop="5dp" 
      /> 
     <Button 
      android:layout_alignParentRight="true" 
      android:layout_below="@id/img" 
      android:layout_marginRight="10dp" 
      android:id="@+id/imgButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:clickable="true" 
      android:text="Upload" 
      android:textSize="16sp" 
      /> 
     <EditText 
      android:layout_marginTop="15dp" 
      android:id="@+id/editText" 
      android:layout_toRightOf="@id/textView" 
      android:layout_toLeftOf="@id/imgButton" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="45sp" 
      android:layout_marginRight="30sp" 
      android:hint="Please enter here" 
      android:maxLength="6" 
      android:textSize="16sp" 
      android:inputType="number" 
      /> 
     <TextView 
      android:layout_alignParentLeft="true" 
      android:layout_below="@id/textView" 
      android:layout_marginTop="50dp" 
      android:layout_marginLeft="16sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Name" 
      android:textSize="16sp" 
      android:id="@+id/textView1" 
      android:textColor="@android:color/black" 
      /> 
     <EditText 
      android:id="@+id/editText1" 
      android:layout_marginTop="30dp" 
      android:layout_below="@id/editText" 
      android:layout_toRightOf="@id/textView1" 
      android:layout_toLeftOf="@id/imgButton" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="16sp" 
      android:hint="Full Name" 
      android:textSize="16sp" 
      android:inputType="textCapWords" 
      /> 
    </RelativeLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 
     <TextView 
      android:layout_marginTop="5dp" 
      android:layout_marginLeft="16sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Location" 
      android:textSize="16sp" 
      android:id="@+id/textView3" 
      android:textColor="@android:color/black" 
      /> 
     <EditText 
      android:id="@+id/editText2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:hint="Please enter here" 
      android:textSize="16sp" 
      android:inputType="textCapSentences" 
      android:layout_weight="1" 
      /> 
    </LinearLayout> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="16dp"> 
    <TextView 
     android:layout_marginTop="16dp" 
     android:layout_marginLeft="16sp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Information" 
     android:textSize="16sp" 
     android:id="@+id/textView2" 
     android:textColor="@android:color/black" 
     /> 
    <EditText 
     android:layout_alignParentLeft="true" 
     android:layout_toRightOf="@id/textView2" 
     android:layout_below="@id/textView2" 
     android:layout_marginTop="5dp" 
     android:layout_marginLeft="16sp" 
     android:id="@+id/editText3" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textMultiLine|textCapSentences" 
     android:gravity="top" 
     android:hint="Describe briefly" 
     android:textSize="16sp" 
     > 
    </EditText> 
    </RelativeLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 
     <Button 
      android:id="@+id/submit" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Submit" 
      android:layout_weight="1" 
      android:layout_marginRight="16dp" 
      android:layout_marginLeft="16dp" 
      /> 

     <Button 
      android:id="@+id/export" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Export" 
      android:layout_weight="1" 
      android:layout_marginRight="16dp" 
      android:layout_marginLeft="16dp"/> 
    </LinearLayout> 
</LinearLayout> 

答えて

0

あなたの質問に対する答えは長くなり、多くの変更を加える必要があります。

保存画像:

  • あなたは画像を保存したい場合は、バイト配列
  • より現実的なアプローチに画像を変換する必要があります、ファイルとして画像を保存することですアプリの内部ストレージ内にデータベースに列を追加します。この列には、画像の名前が共通のディレクトリ「s8u903wmips.jpg」に保存されています。

データのエクスポート:

  • コンテンツプロバイダは、まさにこの理由のために作成されます。 https://developer.android.com/guide/topics/providers/content-providers.html
  • コンテンツプロバイダは、Androidアプリケーションの主要なビルディングブロックの1つで、アプリケーションにコンテンツを提供します。それらは単一のContentResolverインターフェースを通してデータをカプセル化し、アプリケーションに提供します。コンテンツプロバイダは、複数のアプリケーション間でデータを共有する必要がある場合にのみ必要です。たとえば、連絡先データは複数のアプリケーションで使用されるため、コンテンツプロバイダに格納する必要があります。複数のアプリケーション間でデータを共有する必要がない場合は、SQLiteDatabase経由で直接データベースを使用できます。
+0

貴重な情報ありがとうございました。 私は、データがSQLiteデータベースに格納され、必要に応じてエクスポートされた形式でサーバーに手動で転送されることが必要です。 – Himanshu

+0

+1は生のイメージバイトではなくファイルパスを格納するためのものです。 OPの「エクスポート」機能は、ユーザーが自分のデータをバックアップ/転送するためのツールのように聞こえるため、ContentProviderは不要です。 – Karakuri

+0

@Himanshu "エクスポート"機能が組み込まれていないので、自分で書き込む必要があります。つまり、標準のJavaファイル記述を使用して、任意の形式にエクスポートできます(Webで例を検索してください)。また、それらのファイルを読み込んでデータベースにそのようにデータを「インポート」するコードを書くこともできます。 – Karakuri

関連する問題