Java Android上传图像进度条
我试图找到一种方法来显示上传文件的进度条和百分比。我需要添加一个进度条和文件的传输百分比 这是我的密码。它正在传输文件,但没有进度条Java Android上传图像进度条,java,android,percentage,progress,Java,Android,Percentage,Progress,我试图找到一种方法来显示上传文件的进度条和百分比。我需要添加一个进度条和文件的传输百分比 这是我的密码。它正在传输文件,但没有进度条 package com.example.christian.progressbar5; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.M
package com.example.christian.progressbar5;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
ImageView ivImage;
Button btnUpload;
ProgressBar progressBar;
EditText etFilename;
final int GALLERY_REQUEST = 38473;
Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etFilename = (EditText) findViewById(R.id.etFilename);
ivImage = (ImageView) findViewById(R.id.ivImage);
btnUpload = (Button) findViewById(R.id.btnUpload);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
ivImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, GALLERY_REQUEST);
}
});
btnUpload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
uploadImage();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
if(requestCode == GALLERY_REQUEST){
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
ivImage.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void uploadImage()
{
final String filename = etFilename.getText().toString();
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
String URL = "http://inventsystem.esy.es/uploadimage2.php";
Bitmap resized = getResizedBitmap(bitmap, 500);
final String photo = ImageToString(resized);
if(bitmap == null || bitmap.equals("")){
Toast.makeText(this, "No Image", Toast.LENGTH_SHORT).show();
return;
}
if(filename.equals("")){
Toast.makeText(this, "What's the filename?", Toast.LENGTH_SHORT).show();
return;
}
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this, "Image has been Uploaded", Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "Something went wrong...", Toast.LENGTH_SHORT).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("image", photo);
params.put("name", filename);
return params;
}
};
queue.add(stringRequest);
}
private String ImageToString(Bitmap bitmap)
{
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArray);
byte[] imgBytes = byteArray.toByteArray();
return Base64.encodeToString(imgBytes,Base64.DEFAULT);
}
public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
int width = image.getWidth();
int height = image.getHeight();
float bitmapRatio = (float)width / (float) height;
if (bitmapRatio > 1) {
width = maxSize;
height = (int) (width / bitmapRatio);
} else {
height = maxSize;
width = (int) (height * bitmapRatio);
}
return Bitmap.createScaledBitmap(image, width, height, true);
}
}
package com.example.christian.progressbar5;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.support.v7.app.AppActivity;
导入android.util.Base64;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.ProgressBar;
导入android.widget.Toast;
导入com.android.volley.AuthFailureError;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入java.io.ByteArrayOutputStream;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
公共类MainActivity扩展了AppCompatActivity{
图像视图;
按钮btnUpload;
ProgressBar ProgressBar;
编辑文本文件名;
最终int画廊_请求=38473;
位图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etFilename=(EditText)findViewById(R.id.etFilename);
ivImage=(ImageView)findViewById(R.id.ivImage);
btnUpload=(按钮)findViewById(R.id.btnUpload);
progressBar=(progressBar)findViewById(R.id.progressBar);
ivImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(Intent.ACTION\u PICK、MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI);
startActivityForResult(意向、画廊申请);
}
});
btnUpload.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
上传图像();
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(resultCode==RESULT\u OK){
if(requestCode==GALLERY\u请求){
Uri=data.getData();
试一试{
位图=MediaStore.Images.Media.getBitmap(getContentResolver(),uri);
设置图像位图(位图);
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
私有void uploadImage()
{
最终字符串文件名=etFilename.getText().toString();
RequestQueue=Volley.newRequestQueue(MainActivity.this);
字符串URL=”http://inventsystem.esy.es/uploadimage2.php";
位图大小=getResizedBitmap(位图,500);
最终字符串照片=ImageToString(调整大小);
if(位图==null | |位图.equals(“”){
Toast.makeText(这个“无图像”,Toast.LENGTH_SHORT).show();
返回;
}
if(filename.equals(“”){
Toast.makeText(这是“文件名是什么?”,Toast.LENGTH_SHORT.show();
返回;
}
StringRequest StringRequest=new StringRequest(Request.Method.POST,URL,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Toast.makeText(MainActivity.this,“图像已上载”,Toast.LENGTH_SHORT.show();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(MainActivity.this,“出错了…”),Toast.LENGTH_SHORT.show();
}
}){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数放置(“图像”,照片);
参数put(“名称”,文件名);
返回参数;
}
};
添加(stringRequest);
}
私有字符串ImageToString(位图)
{
ByteArrayOutputStream byteArray=新建ByteArrayOutputStream();
压缩(bitmap.CompressFormat.JPEG,100,byteArray);
字节[]imgBytes=byteArray.toByteArray();
返回Base64.encodeToString(imgBytes,Base64.DEFAULT);
}
公共位图getResizedBitmap(位图图像,int maxSize){
int width=image.getWidth();
int height=image.getHeight();
浮点位图比率=(浮点)宽度/(浮点)高度;
如果(位图比率>1){
宽度=最大尺寸;
高度=(int)(宽度/位图比率);
}否则{
高度=最大尺寸;
宽度=(int)(高度*位图比率);
}
返回位图.createScaledBitmap(图像、宽度、高度、真值);
}
}
您可以使用VolleyPlus而不是Volley来添加此功能
jsonRequest.setOnProgressListener(new Response.ProgressListener() {
@Override
public void onProgress(long transferredBytes, long totalSize) {
int percentage = (int) ((transferredBytes / ((float) totalSize)) * 100);
}
});
这里有一个很好的代码snipplet如何实现:
试试这个嗨,我该在哪里应用代码呢,先生?凌空二号打得很好。。但是我恐怕不知道把jsonRequest.setOnProgressListener放在哪里。。请给我一个提示。谢谢你,赫里斯托!您应该将它放在StringRequest构造函数和将其添加到que之间。(在此之前:queue.add(stringRequest))