Android 将图像上载到web服务器
因此,我试图上传一个带有附加信息的图像到一个web服务器上,但我在上传时出错了 我的原木猫 12-14 00:17:25.246 11931-11931/com.erlucks.albarol.capstoneeventlocator D/ViewRootImpl:ViewPostImeInputStage操作向下12-14 00:17:25.346 11931-11931/com.erlucks.albarol.capstoneeventlocator E/ViewRootImpl:sendUserActionEvent()mView==null 12-14 00:17:26.116 11931-11931/com.erlucks.albarol.capstoneeventlocator D/ViewRootImpl:ViewPostImeInputStage操作向下12-14 00:17:26.256 11931-16240/com.erlucks.albarol.capstoneeventlocator E/AndroidRuntime:致命异常:AsyncTask#1 进程:com.erlunk.albarol.capstoneeventlocator,PID:11931 java.lang.RuntimeException:执行时出错 doInBackground() 在android.os.AsyncTask$3.done(AsyncTask.java:300) 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 位于java.util.concurrent.FutureTask.setException(FutureTask.java:222) 位于java.util.concurrent.FutureTask.run(FutureTask.java:242) 在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 运行(Thread.java:818) 原因:java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=0 在 com.erlucks.albarol.capstoneeventlocator.CreateEvent\u 2Activity$1UploadImage.doInBackground(CreateEvent\u 2Activity.java:268) 在 com.erlucks.albarol.capstoneeventlocator.CreateEvent\u 2Activity$1UploadImage.doInBackground(CreateEvent\u 2Activity.java:248) 在android.os.AsyncTask$2.call(AsyncTask.java:288) 位于java.util.concurrent.FutureTask.run(FutureTask.java:237) 在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在java.lang.Thread.run(Thread.java:818)12-14 00:17:26.626 11931-12007/com.erlucks.albarol.capstoneeventlocator D/OpenGLRenderer:0x9bc0c800上的endAllStagingAnimators (波纹可移动)带手柄0x9df86430 12-14 00:17:26.636 11931-11931/com.erlucks.albarol.capstoneeventlocator I/时间线: 时间线:Activity\u idle id:android.os。BinderProxy@2322f347 时间:47950722 我的代码Android 将图像上载到web服务器,android,android-asynctask,Android,Android Asynctask,因此,我试图上传一个带有附加信息的图像到一个web服务器上,但我在上传时出错了 我的原木猫 12-14 00:17:25.246 11931-11931/com.erlucks.albarol.capstoneeventlocator D/ViewRootImpl:ViewPostImeInputStage操作向下12-14 00:17:25.346 11931-11931/com.erlucks.albarol.capstoneeventlocator E/ViewRootImpl:sendU
private int PICK_IMAGE_REQUEST = 1;
private Button b_choose;
private Button b_upload;
private Button b_viewimage;
private Button time_button;
private Button date_button;
private ImageView iv_image;
private Bitmap bitmap;
private Uri filePath;
private TextView time_textview;
private TextView date_textview;
private TextView timeTextView;
private TextView dateTextView;
String date;
String time;
Intent i = getIntent();
String title;
String address;
String description;
String phone;
String lng;
String lat;
String category;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_event_2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
b_choose = (Button) findViewById(R.id.b_choose);
b_upload = (Button) findViewById(R.id.b_upload);
/*b_viewimage = (Button) findViewById(R.id.b_viewimage);*/
/*Date and Time Picker*/
timeTextView = (TextView)findViewById(R.id.time_textview);
dateTextView = (TextView)findViewById(R.id.date_textview);
Button timeButton = (Button)findViewById(R.id.time_button);
Button dateButton = (Button)findViewById(R.id.date_button);
iv_image = (ImageView) findViewById(R.id.iv_image);
time_textview = (TextView) findViewById(R.id.time_textview);
date_textview = (TextView) findViewById(R.id.date_textview);
b_choose.setOnClickListener(this);
b_upload.setOnClickListener(this);
timeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar now = Calendar.getInstance();
TimePickerDialog tpd = TimePickerDialog.newInstance(
CreateEvent_2Activity.this,
now.get(Calendar.HOUR_OF_DAY),
now.get(Calendar.MINUTE),
false
);
tpd.setThemeDark(true);
tpd.setTitle("TimePicker Title");
tpd.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
Log.d("TimePicker", "Dialog was cancelled");
}
});
tpd.show(getFragmentManager(), "Timepickerdialog");
}
});
dateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar now = Calendar.getInstance();
DatePickerDialog dpd = DatePickerDialog.newInstance(
CreateEvent_2Activity.this,
now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH)
);
dpd.setThemeDark(true);
dpd.showYearPickerFirst(true);
dpd.setTitle("DatePicker Title");
dpd.show(getFragmentManager(), "Datepickerdialog");
}
});
}
@Override
public void onResume() {
super.onResume();
TimePickerDialog tpd = (TimePickerDialog) getFragmentManager().findFragmentByTag("Timepickerdialog");
DatePickerDialog dpd = (DatePickerDialog) getFragmentManager().findFragmentByTag("Datepickerdialog");
if(tpd != null) tpd.setOnTimeSetListener(this);
if(dpd != null) dpd.setOnDateSetListener(this);
}
@Override
public void onClick(View v) {
if (v == b_choose) {
showFileChooser();
}
if(v == b_upload){
Intent i = getIntent();
title = i.getStringExtra("title");
address = i.getStringExtra("address");
time = date_textview.getText().toString();
date = time_textview.getText().toString();
phone = i.getStringExtra("phone");
description = i.getStringExtra("description");
lng = i.getStringExtra("lng");
lat = i.getStringExtra("lat");
category = i.getStringExtra("category");
uploadImage(title,address,time,date,phone,description,lng,lat,category);
}
}
@Override
public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int second) {
String hourString = hourOfDay < 10 ? "0"+hourOfDay : ""+hourOfDay;
String minuteString = minute < 10 ? "0"+minute : ""+minute;
String time = hourString+"h"+minuteString+"m";
timeTextView.setText(time);
}
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
String date = +dayOfMonth+"/"+(++monthOfYear)+"/"+year;
dateTextView.setText(date);
}
private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
filePath = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
iv_image.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public String getStringImage(Bitmap bmp){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
private void uploadImage(String title, String address, String time, String date, String phone, String description, String lng, String lat, String category) {
class UploadImage extends AsyncTask<Bitmap, Void, String> {
ProgressDialog loading;
ServerConnection rh = new ServerConnection();
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(CreateEvent_2Activity.this, "Uploading Image", "Please wait...", true, true);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Bitmap... params) {
Bitmap bitmap = params[0];
String uploadImage = getStringImage(bitmap);
HashMap<String, String> data = new HashMap<>();
data.put(UPLOAD_KEY, uploadImage);
data.put("name", CreateEvent_2Activity.this.title);
data.put("address", CreateEvent_2Activity.this.description);
data.put("time", CreateEvent_2Activity.this.time);
data.put("date", CreateEvent_2Activity.this.date);
data.put("phone", CreateEvent_2Activity.this.phone);
data.put("description", CreateEvent_2Activity.this.description);
data.put("lat", CreateEvent_2Activity.this.lat);
data.put("lng", CreateEvent_2Activity.this.lng);
data.put("categoryType", CreateEvent_2Activity.this.category);
String result = rh.sendPostRequest(UPLOAD_URL, data);
return result;
}
}
UploadImage up = new UploadImage();
up.execute();
}
private int PICK\u IMAGE\u REQUEST=1;
私人按钮b_选择;
私人按钮b_上传;
私人按钮b_viewimage;
私人按钮时间按钮;
私人按钮日期按钮;
私人影像查看iv_影像;
私有位图;
私有Uri文件路径;
私有文本视图时间\u文本视图;
私有文本视图日期\u文本视图;
私有文本视图时间文本视图;
私有文本视图日期文本视图;
字符串日期;
串时间;
Intent i=getIntent();
字符串标题;
字符串地址;
字符串描述;
字符串电话;
管柱液化天然气;
弦拉特;
字符串类别;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u create\u event\u 2);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
b_choose=(按钮)findviewbyd(R.id.b_choose);
b_upload=(按钮)findviewbyd(R.id.b_upload);
/*b_viewimage=(按钮)findViewById(R.id.b_viewimage)*/
/*日期和时间选择器*/
timeTextView=(TextView)findViewById(R.id.time\u TextView);
dateTextView=(TextView)findViewById(R.id.date\u TextView);
按钮时间按钮=(按钮)findViewById(R.id.time\u按钮);
按钮日期按钮=(按钮)findViewById(R.id.date\u按钮);
iv_图像=(ImageView)findViewById(R.id.iv_图像);
time_textview=(textview)findViewById(R.id.time_textview);
date_textview=(textview)findViewById(R.id.date_textview);
b_choose.setOnClickListener(这个);
b_upload.setOnClickListener(此);
timeButton.setOnClickListener(新视图.On