Мне нужно разработать приложение, используя базу данных Azure SQL. Для этого мне нужно загрузить фотографии, сделанные пользователем, за одно действие. Но когда я пытаюсь выполнить код, я получаю сброс соединения ввода-вывода, и изображения не сохраняются в базе данных. Я не могу понять, где ошибка. Если попробовать код с другими XML-файлами, которые содержат только виды редактирования текста, то вставка возможна.
Это XML-файл:
<LinearLayout 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"
android:background="#e74c3c"
android:orientation="vertical"
android:weightSum="12" >
<TextView
android:id="@+id/lblclick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="7dp"
android:layout_weight="1"
android:padding="2dp"
android:text="IMAGEVIEW UPLOAD"
android:textColor="#fff"
android:textSize="19dp"
android:typeface="sans" />
<EditText
android:id="@+id/edtname"
android:layout_width="256dp"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1"
android:background="#fff"
android:gravity="center"
android:hint="ENTER IMAGE NAME"
android:padding="5dp"
android:textColor="#e74c3c"
android:typeface="sans" />
<ProgressBar
android:id="@+id/progressBar1"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_gravity="center"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:gravity="center" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:weightSum="2" >
<Button
android:id="@+id/btnchooseimage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_margin="2dp"
android:background="#2c3e50"
android:gravity="center"
android:textStyle="bold"
android:text="CHOOSE IMAGE"
android:textColor="#e74c3c"
android:typeface="sans" />
<Button
android:id="@+id/btnupload"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textStyle="bold"
android:layout_margin="2dp"
android:background="#34495e"
android:gravity="center"
android:text="UPLOAD"
android:textColor="#e74c3c"
android:typeface="sans" />
</LinearLayout>
<ImageView
android:id="@+id/imageview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="5dp"
android:layout_weight="6.5" />
<TextView
android:id="@+id/txtmsg"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_margin="5dp"
android:layout_weight="1.5"
android:padding="10dp"
android:text="yyyyyyy"
android:textColor="#fff"
android:textSize="13sp" />
</LinearLayout>
открытый класс MainActivity расширяет AppCompatActivity {
public static final int requestcode = 1;
ImageView img;
Button btnupload, btnchooseimage;
EditText edtname;
byte[] byteArray;
String encodedImage;
TextView txtmsg;
ProgressBar pg;
ResultSet rs;
Connection con;
@SuppressLint("NewApi")
private Connection ConnectionHelper() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
Connection connection = null;
String ConnectionURL = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
ConnectionURL ="jdbc:jtds:sqlserver://servername.database.windows.net:1433;DatabaseName=salvagedb;user=#####@######;password=######;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";
connection = DriverManager.getConnection(ConnectionURL);
} catch (SQLException se) {
Log.e("ERRO", se.getMessage());
} catch (ClassNotFoundException e) {
Log.e("ERRO", e.getMessage());
} catch (Exception e) {
Log.e("ERRO", e.getMessage());
}
return connection;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView) findViewById(R.id.imageview);
btnupload = (Button) findViewById(R.id.btnupload);
btnchooseimage = (Button) findViewById(R.id.btnchooseimage);
edtname = (EditText) findViewById(R.id.edtname);
txtmsg = (TextView) findViewById(R.id.txtmsg);
pg = (ProgressBar) findViewById(R.id.progressBar1);
pg.setVisibility(View.GONE);
con = ConnectionHelper();
btnchooseimage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChooseImage();
}
});
btnupload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UploadtoDB();
}
});
}
public void UploadtoDB() {
String msg = "unknown";
try {
con = ConnectionHelper();
String commands = "Insert into ImgTbl2 (ImgName,Img) values ('"
+ edtname.getText().toString() + "','" + encodedImage
+ "')";
// encodedImage which is the Base64 String
PreparedStatement preStmt = con.prepareStatement(commands);
preStmt.executeUpdate();
msg = "Inserted Successfully";
} catch (SQLException ex) {
msg = ex.getMessage().toString();
Log.d("hitesh", msg);
} catch (IOError ex) {
// TODO: handle exception
msg = ex.getMessage().toString();
Log.d("$$$$", msg);
} catch (AndroidRuntimeException ex) {
msg = ex.getMessage().toString();
Log.d("$$$$$", msg);
} catch (NullPointerException ex) {
msg = ex.getMessage().toString();
Log.d("$$$$", msg);
}
catch (Exception ex) {
msg = ex.getMessage().toString();
Log.d("$$$$", msg);
}
txtmsg.setText(msg);
}
public void ChooseImage() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)
&& !Environment.getExternalStorageState().equals(
Environment.MEDIA_CHECKING)) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 1);
} else {
Toast.makeText(MainActivity.this,
"No activity found to perform this task",
Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bitmap originBitmap = null;
Uri selectedImage = data.getData();
Toast.makeText(MainActivity.this, selectedImage.toString(),
Toast.LENGTH_LONG).show();
txtmsg.setText(selectedImage.toString());
InputStream imageStream;
try {
imageStream = getContentResolver().openInputStream(
selectedImage);
originBitmap = BitmapFactory.decodeStream(imageStream);
} catch (FileNotFoundException e) {
txtmsg.setText(e.getMessage().toString());
}
if (originBitmap != null) {
this.img.setImageBitmap(originBitmap);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
originBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
Toast.makeText(MainActivity.this, "Conversion Done",
Toast.LENGTH_SHORT).show();
}
} else {
txtmsg.setText("There's an error if this code doesn't work, thats all I know");
}
}
}
Я ожидаю, что изображение и текст будут вставлены в базу данных, но я получил ошибку соединения ввода / вывода