Android 什么';发帖有什么问题?
我一直在使用HttpUrlConnection发布视频和其他一些参数, 代码运行良好,否则它当然不会发布数据,它能够获取 来自服务器的响应,我似乎无法解决问题。 谢谢你的帮助Android 什么';发帖有什么问题?,android,httpurlconnection,Android,Httpurlconnection,我一直在使用HttpUrlConnection发布视频和其他一些参数, 代码运行良好,否则它当然不会发布数据,它能够获取 来自服务器的响应,我似乎无法解决问题。 谢谢你的帮助 class MyAsyncTask extends AsyncTask<String, Void, String> { HttpURLConnection connection = null; DataOutputStream outputStream = null; DataInput
class MyAsyncTask extends AsyncTask<String, Void, String> {
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
DataInputStream inputStream = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
ProgressDialog dialog;
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
int serverResponseCode = 0;
String line = null;
String floatMessage = null;
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(EventsActivity.this);
dialog.show();
dialog.setMessage("Uploading Event");
dialog.setCancelable(false);
super.onPreExecute();
}
@Override
protected String doInBackground(String... urls) {
try {
FileInputStream fileInputStream = new FileInputStream(new File(videopath));
URL url = new URL("http://workintelligent.com/TagFrame/webservice/upload_video");
connection = (HttpURLConnection) url.openConnection();
// Allow Inputs & Outputs.
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
// Set HTTP method to POST.
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
connection.setRequestProperty("video_file", videopath);
Log.e("getting user_id", userid);
connection.setRequestProperty("user_id",userid);
connection.setRequestProperty("access_type ", "public");
connection.setRequestProperty("title", "sdfdsf");
connection.setRequestProperty("description", "sdscfsdf");
connection.setRequestProperty("tags_keywords", "asdf");
connection.setRequestProperty("price", "0");
connection.setRequestProperty("is_paid", "0");
outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name=\"video_file\";filename=\"" + videopath + "\"" + lineEnd);
outputStream.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// Read file
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
outputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
connection.setRequestMethod("GET");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
fileInputStream.close();
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line + '\n');
}
String jsonString = stringBuilder.toString();
Log.e("jsonString", jsonString);
JSONObject resJson = new JSONObject(jsonString);
String floatMessage = resJson.getString("upload");
Log.e("floatMessage", floatMessage);
outputStream.flush();
outputStream.close();
} catch (Exception ex) {
}
return floatMessage;
}
protected void onPostExecute(String result) {
dialog.cancel();
super.onPostExecute(result);
Toast.makeText(EventsActivity.this, floatMessage, Toast.LENGTH_LONG).show();
}
}
类MyAsyncTask扩展了AsyncTask{
HttpURLConnection=null;
DataOutputStream outputStream=null;
DataInputStream inputStream=null;
字符串lineEnd=“\r\n”;
字符串双连字符=“--”;
字符串边界=“*******”;
进程对话;
int字节读取,字节可用,缓冲区大小;
字节[]缓冲区;
int maxBufferSize=1*1024*1024;
int serverResponseCode=0;
字符串行=null;
字符串floatMessage=null;
@凌驾
受保护的void onPreExecute(){
dialog=新建ProgressDialog(EventsActivity.this);
dialog.show();
setMessage(“上传事件”);
对话框。可设置可取消(false);
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…URL){
试一试{
FileInputStream FileInputStream=新的FileInputStream(新文件(视频路径));
URL=新URL(“http://workintelligent.com/TagFrame/webservice/upload_video");
connection=(HttpURLConnection)url.openConnection();
//允许输入和输出。
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setUseCaches(false);
//将HTTP方法设置为POST。
connection.setRequestMethod(“POST”);
setRequestProperty(“连接”,“保持活动”);
connection.setRequestProperty(“内容类型”、“多部分/表单数据;边界=“+boundary”);
setRequestProperty(“视频文件”,videopath);
Log.e(“获取用户id”,userid);
setRequestProperty(“用户id”,userid);
setRequestProperty(“访问类型”、“公共”);
setRequestProperty(“标题”、“sdfdsf”);
setRequestProperty(“描述”、“sdscfsdf”);
setRequestProperty(“tags_关键字”、“asdf”);
connection.setRequestProperty(“价格”、“0”);
connection.setRequestProperty(“已支付”、“0”);
outputStream=新的DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(两个连字符+边界+行结束);
outputStream.writeBytes(“内容配置:表单数据;名称=\”视频文件\“文件名=\”+视频路径+“\”+行结束”);
outputStream.writeBytes(lineEnd);
bytesAvailable=fileInputStream.available();
bufferSize=Math.min(字节可用,maxBufferSize);
buffer=新字节[bufferSize];
//读取文件
bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小);
而(字节读取>0){
写入(缓冲区,0,缓冲区大小);
bytesAvailable=fileInputStream.available();
bufferSize=Math.min(字节可用,maxBufferSize);
bytesRead=fileInputStream.read(缓冲区,0,缓冲区大小);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(两个连字符+边界+两个连字符+lineEnd);
connection.setRequestMethod(“GET”);
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(connection.getInputStream());
StringBuilder StringBuilder=新的StringBuilder();
fileInputStream.close();
而((line=bufferedReader.readLine())!=null){
追加(行+'\n');
}
字符串jsonString=stringBuilder.toString();
Log.e(“jsonString”,jsonString);
JSONObject resJson=新的JSONObject(jsonString);
String floatMessage=resJson.getString(“上传”);
Log.e(“floatMessage”,floatMessage);
outputStream.flush();
outputStream.close();
}捕获(例外情况除外){
}
返回消息;
}
受保护的void onPostExecute(字符串结果){
dialog.cancel();
super.onPostExecute(结果);
Toast.makeText(EventsActivity.this、floatMessage、Toast.LENGTH_LONG.show();
}
}
我从服务器上得到的响应是json格式的,只是一个验证(status=“error”),如果参数没有发布,它会被触发。好的,我自己做了一些研究,发现了这个:“这是最完整的答案。”。我实现了它,效果很好。