Как исправить ошибку ввода / вывода: сброс соединения в андроиде - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно разработать приложение, используя базу данных 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");

    }
}

}

Я ожидаю, что изображение и текст будут вставлены в базу данных, но я получил ошибку соединения ввода / вывода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...