package com.wise.wawc; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Locale; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.wise.pubclas.BlurImage; import com.wise.pubclas.Constant; import com.wise.pubclas.GetSystem; import com.wise.pubclas.NetThread; import com.wise.pubclas.UploadUtil; import com.wise.pubclas.UploadUtil.OnUploadProcessListener; import com.wise.pubclas.Variable; import com.wise.sql.DBExcute; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import android.R.integer; import android.app.Activity; import android.app.ProgressDialog; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; import android.text.format.DateFormat; import android.util.Log; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; /** * 发表新文章,分享 * * @author 王庆文 */ public class NewArticleActivity extends Activity implements PlatformActionListener, OnUploadProcessListener { private ImageView back = null; private ImageView takePhoto; private LinearLayout linearLayout = null; // 将照片动态添加到布局文件中 EditText et_publish_article; String Content; private TextView location; List<PicData> picDatas = new ArrayList<PicData>(); private int imageNum = 0; // 上传图片成功张数 private int imageSize = 0; // 标识图片大小 0 : 小图 1 大图 private static final int removeImageCode = 1; private static final int publishArticle = 2; private MyHandler myHandler = new MyHandler(); private ProgressDialog myDialog = null; private JSONArray jsonDatas = new JSONArray(); private JSONObject imageUrl = null; private int screenWidth = 0; private int screenHeight = 0; private DBExcute dBExcute; String name = ""; boolean isDelete = false; private SharedPreferences preferences = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_article); getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); TextView publish = (TextView) findViewById(R.id.publish); publish.setOnClickListener(new ClickListener()); back = (ImageView) findViewById(R.id.back); back.setOnClickListener(new ClickListener()); takePhoto = (ImageView) findViewById(R.id.take_photo); takePhoto.setOnClickListener(new ClickListener()); et_publish_article = (EditText) findViewById(R.id.et_publish_article); linearLayout = (LinearLayout) findViewById(R.id.my_linearLayout); dBExcute = new DBExcute(); location = (TextView) findViewById(R.id.localtion); preferences = this.getSharedPreferences(Constant.sharedPreferencesName, Context.MODE_PRIVATE); if (!"".equals(Variable.Adress)) { location.setText(Variable.Adress); } WindowManager manager = getWindowManager(); Display display = manager.getDefaultDisplay(); screenWidth = display.getWidth(); screenHeight = display.getHeight(); } class ClickListener implements OnClickListener { public void onClick(View v) { switch (v.getId()) { case R.id.back: NewArticleActivity.this.finish(); break; case R.id.publish: Content = et_publish_article.getText().toString().trim(); if (Content.equals("")) { Toast.makeText(NewArticleActivity.this, R.string.content_null, Toast.LENGTH_SHORT).show(); } else { if (!"".equals(preferences.getString(Constant.LocationCity, ""))) { if (picDatas.size() > 0) { UploadUtil.getInstance() .setOnUploadProcessListener( NewArticleActivity.this); myDialog = ProgressDialog.show( NewArticleActivity.this, "发车友圈", "发送中..."); myDialog.setCancelable(true); UploadUtil.getInstance().uploadFile( picDatas.get(0).small_pic,"image",Constant.BaseUrl + "upload_image?auth_code=" + Variable.auth_code,new HashMap<String, String>()); } else { myDialog = ProgressDialog.show( NewArticleActivity.this, "数据提交", "提交中..."); myDialog.setCancelable(true); Message msg = new Message(); msg.what = removeImageCode; myHandler.sendMessage(msg); } } else { Toast.makeText(getApplicationContext(), "城市未选择", 0) .show(); } } break; case R.id.take_photo: if(picDatas.size() < 9){ File file = new File(Constant.VehiclePath); if (!file.exists()) { file.mkdirs();// 创建文件夹 } name = new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ""; // 调用照相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra( MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Constant.VehiclePath + name + ".jpg"))); startActivityForResult(intent, 1); } break; case 1: isDelete = false; for (int i = 0 ; i < picDatas.size() ; i++) { PicData picData = picDatas.get(i); if(picData.getTag().equals(String.valueOf(v.getTag()))){ if(picData.isDelete){ picDatas.remove(i); linearLayout.removeView(v); }else{ Intent intent1 = new Intent(NewArticleActivity.this, ImageShowerActivity.class); intent1.putExtra("ImagePath", picData.getBig_pic()); startActivity(intent1); } break; } } break; } } } OnLongClickListener onLongClickListener = new OnLongClickListener() { @Override public boolean onLongClick(View v) { switch (v.getId()) { case 1: isDelete = true; ((ImageView)v).setImageResource(R.drawable.body_icon_delete); for (PicData picData : picDatas) { if(picData.getTag().equals(String.valueOf(v.getTag()))){ picData.setDelete(true); break; } } break; } return true; } }; //点击清空 public boolean dispatchTouchEvent(MotionEvent ev) { if(isDelete){ if(ev.getAction() == MotionEvent.ACTION_DOWN){ for(int i = 0 ; i < linearLayout.getChildCount() ; i++){ ((ImageView)linearLayout.getChildAt(i)).setImageBitmap(null); } } } return super.dispatchTouchEvent(ev); }; class MyHandler extends Handler { public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case removeImageCode: linearLayout.removeAllViews(); String imageDatas = jsonDatas.toString(); String temp = ""; if (!"[]".equals(imageDatas)) { temp = imageDatas.replaceAll("\\\\", ""); } else { temp = jsonDatas.toString(); } List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("cust_id", Variable.cust_id)); params.add(new BasicNameValuePair("city", preferences.getString(Constant.LocationCity, ""))); params.add(new BasicNameValuePair("name", Variable.cust_name)); params.add(new BasicNameValuePair("logo", Constant.UserIconUrl)); params.add(new BasicNameValuePair("title", "title")); params.add(new BasicNameValuePair("content", et_publish_article .getText().toString().trim())); params.add(new BasicNameValuePair("pics", temp)); //测试 // params.add(new BasicNameValuePair("pics", "[null]")); params.add(new BasicNameValuePair("lon", String .valueOf(Variable.Lon))); params.add(new BasicNameValuePair("lat", String .valueOf(Variable.Lat))); System.out.println("temp = " + temp); new Thread(new NetThread.postDataThread(myHandler, Constant.BaseUrl + "blog?auth_code=" + Variable.auth_code, params, publishArticle)) .start(); break; case publishArticle: try { JSONObject jsonObject = new JSONObject(msg.obj.toString()); myDialog.dismiss(); if (Integer.parseInt(jsonObject.getString("status_code")) == 0) { Toast.makeText(getApplicationContext(), "发表成功", Toast.LENGTH_SHORT) .show(); Intent intent = new Intent(NewArticleActivity.this,MainActivity.class); Log.e("new Article","blog_id = " + jsonObject.getInt("blog_id")); intent.putExtra("blog_id", jsonObject.getInt("blog_id")); setResult(67, intent); // ContentValues valuesType = new ContentValues(); // valuesType.put("Type_id", 1); // valuesType.put("Blog_id", // Integer.valueOf(jsonObject.getInt("blog_id"))); // dBExcute.InsertDB(NewArticleActivity.this, valuesType, // Constant.TB_VehicleFriendType); NewArticleActivity.this.finish(); } else { //VehicleFriendActivity.newArticleBlogId = 0; Toast.makeText(getApplicationContext(), "发表失败,请重试...", 0).show(); } } catch (JSONException e) { e.printStackTrace(); } break; } } } @SuppressWarnings("deprecation") private void ShowBitMap() { File file = null; String fileName = ""; Bitmap small_image = null; Bitmap big_image = null; if (getSDPath() == null) { Toast.makeText(getApplicationContext(), "SDCard Is Not Exist!", 0) .show(); return; } else { PicData picData = new PicData(); file = new File(Constant.VehiclePath); file.mkdirs();// 创建文件夹 // fileName = Constant.VehiclePath + name + ".jpg"; // // createImage(fileName, bitmap); //创建文件(临时) // File imageFile = new File(fileName); // 将图片压缩至屏幕大小(大图) Bitmap myBitmap = BlurImage.decodeSampledBitmapFromPath( Constant.VehiclePath + name + ".jpg", 480, 800); // 存储到SD卡 将要上传的大图(无 需删除) GetSystem.saveImageSD(myBitmap, Constant.VehiclePath, name + "big_image.jpg", 50); Log.e("上传的大图", "宽 = " + myBitmap.getWidth()); Log.e("上传的大图", "高= " + myBitmap.getHeight()); Log.e("大图资源大小", "size= " + myBitmap.getRowBytes() * myBitmap.getHeight() / (1024 * 1024) + "M"); // 获取正方形图片 Bitmap squareBitmap = BlurImage.getSquareBitmap(myBitmap); Log.e("未压缩的正方形图片", "宽 = " + squareBitmap.getWidth()); Log.e("未压缩的正方形图片", "高= " + squareBitmap.getHeight()); // 存储到内存卡 用户压缩得到小图(需 要删除) GetSystem.saveImageSD(squareBitmap, Constant.VehiclePath, name + "square_image.jpg", 50); small_image = BlurImage.decodeSampledBitmapFromPath( Constant.VehiclePath + name + "square_image.jpg", 180, 180); // 存储到sd卡 上传需要 的小图 (无需删除) GetSystem.saveImageSD(small_image, Constant.VehiclePath, name + "small_image.jpg", 50); Log.e("上传的小图", "宽 = " + small_image.getWidth()); Log.e("上传的小图", "高 = " + small_image.getHeight()); Log.e("小图资源大小", "size= " + small_image.getRowBytes() * small_image.getHeight() + "bytes"); picData.setSmall_pic(Constant.VehiclePath + name + "small_image.jpg"); picData.setBig_pic(Constant.VehiclePath + name + "big_image.jpg"); if (new File(Constant.VehiclePath, name + "square_image.jpg") .exists()) { new File(Constant.VehiclePath, name + "square_image.jpg") .delete(); } if (new File(Constant.VehiclePath + name + ".jpg").exists()) { new File(Constant.VehiclePath + name + ".jpg").delete(); } // 动态在LinearLayout中添加一张图片 ImageView imageView = new ImageView(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(takePhoto.getHeight(), takePhoto.getHeight()); params.setMargins(5, 0, 0, 0); imageView.setLayoutParams(params); imageView.setBackgroundDrawable(new BitmapDrawable(small_image)); imageView.setId(1); imageView.setOnClickListener(new ClickListener()); imageView.setOnLongClickListener(onLongClickListener); linearLayout.addView(imageView); tag++; imageView.setTag(""+tag); picData.setTag(""+tag); picDatas.add(picData); } } int tag = 0; protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Toast.makeText(this, "没有多余内存", 0).show(); return; } ShowBitMap(); } } public void createImage(String fileName, Bitmap bitmap) { FileOutputStream b = null; try { b = new FileOutputStream(fileName); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } } public String getSDPath() { File sdDir = null; boolean sdCardExist = Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在 if (sdCardExist) { sdDir = Environment.getExternalStorageDirectory();// 获取跟目录 } return sdDir.toString(); } // 图片上传的状态监听函数 public void onUploadDone(int responseCode, String message) { StringBuffer sb = new StringBuffer(); switch (responseCode) { case UploadUtil.UPLOAD_SUCCESS_CODE: try { JSONObject jsonObject = new JSONObject(message); if (imageSize == 0) { imageUrl = new JSONObject(); } // 存储返回的图片url if (imageNum < picDatas.size()) { // 小图上传成功 if (imageSize == 0) { File smallImage = new File(picDatas.get(imageNum).small_pic); if (smallImage.exists()) { String imageFileUrl = jsonObject .getString("image_file_url"); // TODO Log.e("小图上传成功返回的url:", imageFileUrl); imageUrl.putOpt("small_pic", imageFileUrl); String newPath = Constant.VehiclePath + imageFileUrl.substring(imageFileUrl .lastIndexOf("/") + 1); File newFile = new File(newPath); smallImage.renameTo(newFile); } imageSize = 1; // 上传大图 UploadUtil.getInstance().uploadFile(picDatas.get(imageNum).big_pic, "image", Constant.BaseUrl + "upload_image?auth_code=" + Variable.auth_code, new HashMap<String, String>()); return; } else { File bigImage = new File(picDatas.get(imageNum).big_pic); if (bigImage.exists()) { String imageFileUrl = jsonObject.getString( "image_file_url").toString(); imageUrl.putOpt("big_pic", imageFileUrl); String newPath = Constant.VehiclePath + imageFileUrl.substring(imageFileUrl .lastIndexOf("/") + 1); File newFile = new File(newPath); bigImage.renameTo(newFile); jsonDatas.put(imageUrl); } imageNum++; imageSize = 0; // 上传下一张小图 if (imageNum < picDatas.size()) { UploadUtil.getInstance().uploadFile(picDatas.get(imageNum).small_pic, "image", Constant.BaseUrl + "upload_image?auth_code=" + Variable.auth_code, new HashMap<String, String>()); } } } } catch (JSONException e) { e.printStackTrace(); } if (imageNum == picDatas.size()) { picDatas.clear(); Message msg = new Message(); msg.what = removeImageCode; myHandler.sendMessage(msg); imageNum = 0; } break; case UploadUtil.UPLOAD_SERVER_ERROR_CODE: break; } } public void onUploadProcess(int uploadSize) { } public void initUpload(int fileSize) { } public void onCancel(Platform arg0, int arg1) { } public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) { } public void onError(Platform arg0, int arg1, Throwable arg2) { } class PicData { String small_pic; String big_pic; String tag; boolean isDelete; public String getSmall_pic() { return small_pic; } public void setSmall_pic(String small_pic) { this.small_pic = small_pic; } public String getBig_pic() { return big_pic; } public void setBig_pic(String big_pic) { this.big_pic = big_pic; } public String getTag() { return tag; } public void setTag(String tag) { this.tag = tag; } public boolean isDelete() { return isDelete; } public void setDelete(boolean isDelete) { this.isDelete = isDelete; } } }