首页 > 解决方案 > 如何在android图像视图中检索图像

问题描述

请正在处理一个我将很快提交的课程项目,我需要你的帮助。我正在尝试将我的 sql server 2016 中以 varbinary 格式保存的图像保存到我的 android Image view 中。我在这个级别上已经有一段时间了,我需要帮助才能越过它。我还检查了 google 和 youtube,但我找到的答案并没有帮助我。我的数据库表中的其他值被检索,除了图像当我查看日志文件时它告诉我没有附加适配器跳过布局.正如您将在我的适配器附加的代码中看到的那样。请帮助。下面是我使用 jtds 连接到数据库的代码

package com.example.abun.shoprite1;


import java.lang.String; 
import java.io.File;
import android.annotation.SuppressLint;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import static java.nio.file.Files.size;
import java.sql.*;
import java.util.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.StrictMode;
import android.util.Log;


public class ConnectionClass {

String url;
String serverName;
String instanceName;
String databaseName;
String userName;
String password;
String port;
String sql;

ConnectionClass() {

    serverName = "192.168.80.1";
    port ="1433";
    //instanceName = "";
    databaseName = "shoprite";
    userName = "abun2";
    password = "shoprite";
}
private String getConnectionUrl() {
    // Constructing the connection string
    return url + serverName +" ;DatabaseName = " +databaseName +";user="+userName + ";password="+password +";";
}

//private String getConnectionUrl() {
// Constructing the connection string
//return url + serverName  +" ;DatabaseName = " +databaseName+"; integratedSecurity=true";
//}

@SuppressLint("NewApi")
public Connection getConnection() throws SQLException, ClassNotFoundException {

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    String ConnUrl;
    //String conny= "jdbc:jtds:sqlserver://"+ serverName+ ":" +port+ ";"+ " ;DatabaseName = " +databaseName+"; integratedSecurity=true";
    ConnUrl="jdbc:jtds:sqlserver://" + serverName+ ":" +port+ ";"+ "databaseName=" + databaseName + ";user=" + userName + ";password=" + password + ";";
    Connection con =null;
    try {
        Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
        con = DriverManager.getConnection(ConnUrl);
        //con = DriverManager.getConnection(conny);
        //""+"jdbc:jtds:sqlserver://127.0.0.1/shoprite; integrated security=true"
        // Establishing the connection
        //con = DriverManager.getConnection(getConnectionUrl());
        //con = DriverManager.getConnection(ConnUrl);
        if(con != null){
            System.out.println("Connection Successful!");
        }
        else{
            System.out.println(" no Connection ");
        }
    }catch(SQLException se){
        Log.e("ERROR--",se.getMessage());
        Log.e("ERROR--",se.getSQLState());
        Log.e("ERROR--",se.getLocalizedMessage());
        Log.e("ERROR--",se.getCause().toString());
        Log.e("ERROR--",se.getStackTrace().toString());

    }catch(ClassNotFoundException se){
        Log.e("ERROR--",se.getMessage());
        Log.e("ERROR--",se.getLocalizedMessage());

    }catch(Exception se){
        Log.e("ERROR--",se.getMessage());
        Log.e("ERROR--",se.getLocalizedMessage());

    }
    return con;
}

public boolean verifyCustomer(String username,String password)throws SQLException{
    Connection con1;
    ResultSet resultSet = null;
    String query = "select * from Customer_Details where Customer_Name =? and Password=?";
    try {
        con1 = getConnection();
        PreparedStatement stmt = con1.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        stmt.setString(1, username);
        stmt.setString(2, password);

        resultSet = stmt.executeQuery();
        if(resultSet.next()){
            return true;
        }else{
            return false;
        }
    }catch(Exception e){
        return false;
    } finally {

        if(resultSet != null)
            resultSet.close();
    }
}

public boolean verifyEmployee(String username,String password)throws SQLException{
    Connection con1;
    ResultSet resultSet = null;
    String query = "select * from Employee_Details where Employee_Name =? and Designation=?";
    try {
        con1 = getConnection();
        PreparedStatement stmt = con1.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        stmt.setString(1, username);
        stmt.setString(2, password);

        resultSet = stmt.executeQuery();
        if(resultSet.next()){
            return true;
        }else{
            return false;
        }
    }catch(Exception e){
        return false;
    } finally {

        if(resultSet != null)
            resultSet.close();
    }
}

public boolean insertDataCustomer(String name, String gender,String address,int phone,
                                  String DOB,String password,String email,int creditcard,String creditCardType){
    Connection con1;
    String query = "insert into Customer_Details(Customer_Name,Gender,Address,Phone,DOB,Password,CreditCardNo,CreditCardType) values( ?, ?, ?, ?,?,?,?,?)";
    try {
        con1 = getConnection();
        PreparedStatement stmt = con1.prepareStatement(query);
        stmt.setString(1, name);
        stmt.setString(2, gender);
        stmt.setString(3, address);
        stmt.setInt(4, phone);
        stmt.setString(5, DOB);
        stmt.setString(6, password);
        //stmt.setString(7, email);
        stmt.setInt(7, creditcard);
        stmt.setString(8, creditCardType);

        long ent= stmt.executeUpdate();
        if(ent == -1)
            return false;
        else
            return true;

    }catch(Exception e){
        // System.out.println(e.getMessage());
        Log.e( "error here: ",e.getMessage());
        Log.e( "error here: ",e.getLocalizedMessage());
        Log.e( "error here: ",e.getCause().toString());
        return  false;
    }
}

public boolean insertDataEmployee(String ID, String name, String gender,
                                  String DOB,String Designation,String address,String email,String phone){
    Connection con1;
    String query = "insert into Employee_Details(ID,name,gender,DOB,Designation,address,email,phone) values(?, ?, ?, ?, ?,?,?,?)";
    try {
        con1 = getConnection();
        PreparedStatement stmt = con1.prepareStatement(query);
        stmt.setString(1, name);
        stmt.setString(2, gender);
        stmt.setString(3, DOB);
        stmt.setString(4, Designation);
        stmt.setString(5, address);
        stmt.setString(6, email);
        stmt.setString(7, phone);


        long ent= stmt.executeUpdate();
        if(ent == -1)
            return false;
        else
            return true;

    }catch(Exception e){
        // System.out.println(e.getMessage());
        Log.e( "error here: ",e.getMessage());
        return  false;
    }
}

public void veiwOrders()throws SQLException{
    Connection con1;
    ResultSet resultSet = null;
    String query = "select * from Order_Details";
    try {
        con1 = getConnection();
        PreparedStatement stmt = con1.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

        resultSet = stmt.executeQuery();
        if(resultSet.next()){
            while(resultSet.next()){

            }
        }
    }catch(Exception e){
        //return false;
    } finally {

        if(resultSet != null)
            resultSet.close();
    }
}
}

下面是我的活动类包com.example.abun.shoprite1;

/**
* Created by Abun on 5/12/2018.
*/
import android.app.Activity;
import android.app.ProgressDialog;
import android.support.annotation.RequiresPermission.Write;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.MenuItem;
import android.os.AsyncTask;
import android.support.design.widget.NavigationView;
import android.content.Intent;
//import android.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.View;
import android.support.v7.app.ActionBar;
import android.widget.Toast;

import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

public class productPage extends AppCompatActivity  {

private RecyclerView mRecycler;

private RecyclerView.LayoutManager mLayoutManager;

private RecyclerView.Adapter mAdapter;
private DrawerLayout mDrawerLayout;
private ArrayList<String> mData;
private ArrayList<ProductPageRetrive> data;
ConnectionClass db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.productpage1);
    db = new ConnectionClass();


    data = new ArrayList<ProductPageRetrive>();
    mData = new ArrayList<>();
    for (int i = 0;i<30;i++){
        mData.add("new title"+i);
    }

    SyncData orderData = new SyncData();
    orderData.execute("");
    mRecycler = (RecyclerView) findViewById(R.id.recycler_view);
    mRecycler.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(productPage.this,LinearLayoutManager.HORIZONTAL,false);
    mRecycler.setLayoutManager(mLayoutManager);
    mAdapter = new MainAdapter(data,productPage.this);
    mRecycler.setAdapter(mAdapter);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.mipmap.ic_launcher);

    mDrawerLayout = findViewById(R.id.drawer_layout);
    mDrawerLayout.addDrawerListener(
            new DrawerLayout.DrawerListener() {
                @Override
                public void onDrawerSlide(View drawerView, float slideOffset) {
                    // Respond when the drawer's position changes
                }

                @Override
                public void onDrawerOpened(View drawerView) {
                    // Respond when the drawer is opened
                }

                @Override
                public void onDrawerClosed(View drawerView) {
                    // Respond when the drawer is closed
                }

                @Override
                public void onDrawerStateChanged(int newState) {
                    // Respond when the drawer motion state changes
                }
            }
    );


    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {
                    // set item as selected to persist highlight
                    menuItem.setChecked(true);
                    // close drawer when item is tapped
                    mDrawerLayout.closeDrawers();

                    // Add code here to update the UI based on the item selected
                    // For example, swap UI fragments here

                    return true;
                }
            });





}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

private class SyncData extends AsyncTask<String ,String,String>{
    String msg="Internet/DB_Credentials/Windows_FireWall_TurnOn Error, see android monitor in the buttom for details";
    ProgressDialog progress;
    boolean success = false;

    @Override
    protected void onPreExecute(){
        progress = ProgressDialog.show(productPage.this,"Synchronising","RecyclerView loading! please wait...",true);
    }

    @Override
    protected String doInBackground(String...strings){
        try {
            Connection con = db.getConnection();
            ResultSet resultSet = null;
            if (con == null) {

                msg="No Data found";
                success = false;
            }else{
                String query = "SELECT * FROM Product_Details";
                PreparedStatement stmt = con.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);


                resultSet = stmt.executeQuery();
                while (resultSet.next()) {
                    try {

                        data.add(new ProductPageRetrive(resultSet.getBinaryStream("Image"), resultSet.getInt("Price"), resultSet.getInt("Discount")));

                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }
                msg ="found";
                success=true;
            }
        }catch(Exception e){
            e.printStackTrace();
            //Write write = new StringWriter();
            //e.printStackTrace(new PrintWriter(write));
            //msg=writer.toString();
            success=false;
        }
        return msg;
    }

    @Override
    protected void onPostExecute(String msg){
        progress.dismiss();
        Toast.makeText(productPage.this,msg+"",Toast.LENGTH_LONG).show();
        if(success == true){



            mAdapter.notifyDataSetChanged();

        }else{
            try{

            }catch (Exception e){

            }

        }
    }
}

}

下面是数组数据的数据对象;包 com.example.abun.shoprite1;

import java.io.InputStream;
import java.sql.Blob;
import java.sql.ResultSet;

/**
* Created by Abun on 6/14/2018.
*/

public class ProductPageRetrive {

private int price;
private int rating;
private String img1;
private InputStream ism;
private ResultSet rs;


public ProductPageRetrive(InputStream is, int money, int rate){
    this.ism=is;
    this.price=money;
    this.rating=rate;
}

public int getRating() {
    return rating;
}

public void setRating(int rating) {
    this.rating = rating;
}

public int getPrice() {
    return price;
}

public void setPrice(int price) {
    this.price = price;
}

public String getImg1() {
    return img1;
}

public void setImg1(String img1) {
    this.img1 = img1;
}

public InputStream getIsm() {
    return ism;
}

public void setIsm(InputStream ism) {
    this.ism = ism;
}
}

下面是我的适配器类包 com.example.abun.shoprite1;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.widget.RecyclerView;
import android.util.Base64;
import java.io.FileOutputStream;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.SQLException;
import java.util.ArrayList;
import com.squareup.picasso.Picasso;
import android.content.Context;

/**
* Created by Abun on 6/13/2018.
*/


public class MainAdapter extends  RecyclerView.Adapter<MainAdapter.ViewHolder> {

private ArrayList<String> mData;
private ArrayList<ProductPageRetrive> Data;
private Context ct1;

public MainAdapter(ArrayList<String> Data1){

    this.mData=Data1;
}

public MainAdapter(ArrayList<ProductPageRetrive> Data, Context ct)
{
    this.Data=Data;
    this.ct1 =ct;
}

@Override
public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.contain,parent,false);
    // set the view size, margin,padding and layout parameters
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) {
    int py =Data.get(position).getRating();
    String pp = py +"";
    holder.mtitle.setText(pp);

    try {
        InputStream is = Data.get(position).getIsm();
        OutputStream os = new FileOutputStream(new File("photo1.jpg"));
        byte[] content = new byte[1024];
        int size = 0;
        while((size=is.read(content))!=-1){
            os.write(content,0,size);
        }
        os.close();
        is.close();
        //Picasso.get().load("file:photo1.jpg").into(holder.img);

        Picasso.get().load("file:photo1.jpg").into(holder.img);


    }catch (Exception e){

    }
    /*byte[] decorde = Base64.decode(Data.get(position).getImg1(),Base64.DEFAULT);
    Bitmap mp = BitmapFactory.decodeByteArray(decorde,0,decorde.length);
    holder.img.setImageBitmap(mp);*/

}

@Override
public int getItemCount() {
    return Data.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{
    public TextView mtitle;
    public TextView mtitle1;
    public ImageView img;
    public View layout;

    public ViewHolder(View itemView){
        super(itemView);
        layout = itemView;
        mtitle = (TextView) itemView.findViewById(R.id.mtitle);
        img = (ImageView) itemView.findViewById(R.id.imaging);
    }
}
}

标签: androidandroid-studio

解决方案


推荐阅读