头像图片上传到sd及服务器

首先在AndroidManifest.xml设置权限:

<!-- 传头像 -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

在服务器端加入jar包:commons-fileupload-1.3.1.jar,commons-io-2.4.jar

jar包下载地址:http://pan.baidu.com/s/1mg7gPvi

servlet文件:headerPortaitUploadServlet

  1 package com.ghp.servlet;
  2
  3 import java.io.File;
  4 import java.io.IOException;
  5 import java.io.PrintWriter;
  6 import java.util.Iterator;
  7 import java.util.List;
  8
  9 import javax.servlet.ServletException;
 10 import javax.servlet.http.HttpServlet;
 11 import javax.servlet.http.HttpServletRequest;
 12 import javax.servlet.http.HttpServletResponse;
 13
 14 import org.apache.commons.fileupload.DiskFileUpload;
 15 import org.apache.commons.fileupload.FileItem;
 16
 17 import com.ghp.dao.UsersDao;
 18
 19 public class headerPortaitUploadServlet extends HttpServlet {
 20
 21     /**
 22      * Constructor of the object.
 23      */
 24     public headerPortaitUploadServlet() {
 25         super();
 26     }
 27
 28     /**
 29      * Destruction of the servlet. <br>
 30      */
 31     public void destroy() {
 32         super.destroy(); // Just puts "destroy" string in log
 33         // Put your code here
 34     }
 35
 36     /**
 37      * The doGet method of the servlet. <br>
 38      *
 39      * This method is called when a form has its tag value method equals to get.
 40      *
 41      * @param request the request send by the client to the server
 42      * @param response the response send by the server to the client
 43      * @throws ServletException if an error occurred
 44      * @throws IOException if an error occurred
 45      */
 46     public void doGet(HttpServletRequest request, HttpServletResponse response)
 47             throws ServletException, IOException {
 48
 49         doPost(request, response);
 50     }
 51
 52     /**
 53      * The doPost method of the servlet. <br>
 54      *
 55      * This method is called when a form has its tag value method equals to post.
 56      *
 57      * @param request the request send by the client to the server
 58      * @param response the response send by the server to the client
 59      * @throws ServletException if an error occurred
 60      * @throws IOException if an error occurred
 61      */
 62     public void doPost(HttpServletRequest request, HttpServletResponse response)
 63             throws ServletException, IOException {
 64
 65         response.setContentType("text/html;charset=utf8");
 66         PrintWriter out = response.getWriter();
 67         //临时目录
 68         String temp=request.getSession().getServletContext().getRealPath("/")+"temp";
 69         //上传文件存放目录
 70         String loadpath=request.getSession().getServletContext().getRealPath("/")+"headerportaitimages";
 71         DiskFileUpload fu = new DiskFileUpload();
 72         fu.setSizeMax(1*1024*1024);   // 设置允许用户上传文件大小,单位:字节
 73         fu.setSizeThreshold(4096);   // 设置最多只允许在内存中存储的数据,单位:字节
 74         fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
 75
 76       //开始读取上传信息
 77         int index=0;
 78         List fileItems = null;
 79                              try {
 80                                      fileItems = fu.parseRequest(request);
 81                                       System.out.println("fileItems="+fileItems);
 82                              } catch (Exception e) {
 83                                      e.printStackTrace();
 84                              }
 85
 86         // 依次处理每个上传的文件
 87         Iterator iter = fileItems.iterator();
 88         while (iter.hasNext())
 89         {
 90             FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息
 91             if (!item.isFormField())
 92             {
 93                 String img = item.getName();//获取上传文件名,包括路径
 94                 img=img.substring(img.lastIndexOf("\\")+1);//从全路径中提取文件名
 95                 long size = item.getSize();
 96                 if((img==null||img.equals("")) && size==0){
 97                     continue;
 98                 }
 99 //                int point = img.indexOf(".");
100 //                img=(new Date()).getTime()+index+img.substring(point,img.length());
101 //                index++;
102                 File fNew= new File(loadpath, img);
103                 try {
104                                      item.write(fNew);
105                              } catch (Exception e) {
106                                      // TODO Auto-generated catch block
107                                      e.printStackTrace();
108                              }
109                 /*int len=img.length();
110                 int length=len-11;
111                 String userName=img.substring(0,length);
112                 boolean b=UsersDao.updateUsersImg(userName, img);
113                 out.println(b);*/
114
115             }else{
116                 //取出不是文件域的所有表单信息
117                 String fieldvalue = item.getString();
118          //如果包含中文应写为:(转为UTF-8编码)
119          //String fieldvalue = new String(item.getString().getBytes(),"UTF-8");
120             }
121         }
122         //response.getOutputStream().print(true);
123         out.println(true);
124         //out.flush();
125         //out.close();
126     }
127
128     /**
129      * Initialization of the servlet. <br>
130      *
131      * @throws ServletException if an error occurs
132      */
133     public void init() throws ServletException {
134         // Put your code here
135     }
136
137 }

上传头像图片的activity:PersonnalMessageActivity

  1 package com.ghp.guodouRecipe;
  2
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7
  8 import com.android.volley.Request.Method;
  9 import com.android.volley.RequestQueue;
 10 import com.android.volley.Response.ErrorListener;
 11 import com.android.volley.Response.Listener;
 12 import com.android.volley.VolleyError;
 13 import com.android.volley.toolbox.ImageLoader;
 14 import com.android.volley.toolbox.Volley;
 15 import com.ghp.entity.Users;
 16 import com.ghp.tools.CustomRequest;
 17 import com.ghp.tools.GuodouRecipeApplication;
 18 import com.ghp.tools.ToRoundBitmap;
 19 import com.ghp.tools.UploadUtil;
 20 import com.google.gson.Gson;
 21
 22 import android.annotation.SuppressLint;
 23 import android.app.Activity;
 24 import android.app.AlertDialog;
 25 import android.content.DialogInterface;
 26 import android.content.Intent;
 27 import android.graphics.Bitmap;
 28 import android.graphics.BitmapFactory;
 29 import android.graphics.drawable.BitmapDrawable;
 30 import android.graphics.drawable.Drawable;
 31 import android.net.Uri;
 32 import android.os.Bundle;
 33 import android.os.Environment;
 34 import android.os.Handler;
 35 import android.os.Message;
 36 import android.os.StrictMode;
 37 import android.provider.MediaStore;
 38 import android.view.Menu;
 39 import android.view.MenuItem;
 40 import android.view.View;
 41 import android.view.View.OnClickListener;
 42 import android.view.Window;
 43 import android.widget.EditText;
 44 import android.widget.ImageView;
 45 import android.widget.TextView;
 46 import android.widget.Toast;
 47
 48 public class PersonnalMessageActivity extends Activity implements OnClickListener {
 49     private String userName;
 50     private String selecteSex;
 51     /**头像*/
 52     ImageView header_portrait_personnal_img;
 53     /**头像Bitmap*/
 54     private Bitmap headerPortait;
 55     private static String path="/sdcard/guodouRecipe/myHeader/";//sd路径
 56     private String[] items = new String[] { "选择本地图片", "拍照" };
 57     private String picPath = null;
 58     private RequestQueue requestQueue=null;
 59     private ImageLoader mImageLoader;
 60
 61     TextView user_name_personnal_text;
 62     TextView user_tag_personnal_text;
 63     TextView user_sex_personnal_text;
 64     TextView user_area_personnal_text;
 65
 66     ImageView go_back_fisrt;
 67     @SuppressLint("NewApi")
 68     @Override
 69     protected void onCreate(Bundle savedInstanceState) {
 70         this.requestWindowFeature(Window.FEATURE_NO_TITLE);
 71         super.onCreate(savedInstanceState);
 72         setContentView(R.layout.activity_personnal_message);
 73         Intent intent=getIntent();
 74         userName=intent.getStringExtra("userName");
 75
 76         //*****头像的处理*****
 77         requestQueue=Volley.newRequestQueue(PersonnalMessageActivity.this);
 78         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
 79         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
 80
 81         initView();
 82         //**********
 83
 84
 85
 86         String url="http://172.27.211.1/guodouRecipe/servlet/find_user_message_servlet";
 87         CustomRequest request=new CustomRequest(Method.POST, url, new Listener<String>() {
 88
 89             @Override
 90             public void onResponse(String result) {
 91                 // TODO Auto-generated method stub
 92                 Gson gson=new Gson();
 93                 Users u=gson.fromJson(result, Users.class);
 94                 user_name_personnal_text.setHint(userName);
 95                 user_tag_personnal_text.setText(u.getUserPersonnalTag());
 96                 user_sex_personnal_text.setText(u.getUserSex());
 97             }
 98         }, new ErrorListener(){
 99
100             @Override
101             public void onErrorResponse(VolleyError arg0) {
102                 // TODO Auto-generated method stub
103
104             }
105
106         });
107         request.setParam("userName", userName);
108
109         GuodouRecipeApplication app=(GuodouRecipeApplication)PersonnalMessageActivity.this.getApplication();
110         app.getmRequestQueue().add(request);
111     }
112
113     private void initView() {
114         header_portrait_personnal_img=(ImageView) findViewById(R.id.header_portrait_personnal_img);
115         header_portrait_personnal_img.setOnClickListener(listener);
116
117         //*******头像处理*******
118         Bitmap bt = BitmapFactory.decodeFile(path + "/"+userName+"_header.jpg");//从Sd中找头像,转换成Bitmap
119         if(bt!=null){
120             @SuppressWarnings("deprecation")
121             Drawable drawable = new BitmapDrawable(bt);//转换成drawable
122             //圆形
123             header_portrait_personnal_img.setImageBitmap(ToRoundBitmap.toRoundBitmap(bt));
124             //方形
125             //header_portrait_personnal_img.setImageDrawable(drawable);
126         }else{
127             /**
128              *  如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中
129              *
130              */
131             mImageLoader = getImageLoader();
132              String url="http://172.27.211.1/guodouRecipe/headerportaitimages/";
133              String userImg=userName+"_header.jpg";
134             mImageLoader.get(url+userImg, mImageLoader.getImageListener(header_portrait_personnal_img, 0, 0));
135             Bitmap bm=header_portrait_personnal_img.getDrawingCache();
136             header_portrait_personnal_img.setImageBitmap(ToRoundBitmap.toRoundBitmap(bm));
137         }
138         //****************************
139
140         user_name_personnal_text=(TextView) findViewById(R.id.user_name_personnal_text);
141         //user_name_personnal_text.setOnClickListener(this);
142         user_tag_personnal_text=(TextView) findViewById(R.id.user_tag_personnal_text);
143         user_tag_personnal_text.setOnClickListener(this);
144         user_sex_personnal_text=(TextView) findViewById(R.id.user_sex_personnal_text);
145         user_sex_personnal_text.setOnClickListener(this);
146         user_area_personnal_text=(TextView) findViewById(R.id.user_area_personnal_text);
147         user_area_personnal_text.setOnClickListener(this);
148
149         go_back_fisrt=(ImageView) findViewById(R.id.go_back_fisrt);
150         go_back_fisrt.setOnClickListener(this);
151     }
152
153     //*******头像处理*******
154      private View.OnClickListener listener = new View.OnClickListener(){
155
156         @Override
157         public void onClick(View v) {
158             // TODO Auto-generated method stub
159             showDialog();
160         }};
161          /**
162          * 显示选择对话框
163          */
164         private void showDialog() {
165
166             new AlertDialog.Builder(this)
167             .setTitle("设置头像")
168             .setItems(items, new DialogInterface.OnClickListener() {
169
170                 @Override
171                 public void onClick(DialogInterface dialog, int which) {
172                     switch (which) {
173                     case 0:
174                         Intent intent1 = new Intent(Intent.ACTION_PICK, null);
175                         intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
176                         startActivityForResult(intent1, 11);
177                         break;
178                     case 1:
179
180                         Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
181                         intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
182                                 "/"+userName+"_header.jpg")));
183                         startActivityForResult(intent2, 22);//采用ForResult打开
184                         break;
185                     }
186                 }
187             })
188             .setNegativeButton("取消", new DialogInterface.OnClickListener() {
189
190                 @Override
191                 public void onClick(DialogInterface dialog, int which) {
192                     dialog.dismiss();
193                 }
194             }).show();
195         }
196
197         /**
198          * 调用系统的裁剪
199          * @param uri
200          */
201         public void cropPhoto(Uri uri) {
202             Intent intent = new Intent("com.android.camera.action.CROP");
203             intent.setDataAndType(uri, "image/*");
204             intent.putExtra("crop", "true");
205              // aspectX aspectY 是宽高的比例
206             intent.putExtra("aspectX", 1);
207             intent.putExtra("aspectY", 1);
208             // outputX outputY 是裁剪图片宽高
209             intent.putExtra("outputX", 150);
210             intent.putExtra("outputY", 150);
211             intent.putExtra("return-data", true);
212             startActivityForResult(intent, 33);
213         }
214         /**头像保存到sd*/
215         private void setPicToView(Bitmap mBitmap) {
216              String sdStatus = Environment.getExternalStorageState();
217             if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
218                    return;
219                }
220             FileOutputStream b = null;
221             File file = new File(path);
222             file.mkdirs();// 创建文件夹
223             String fileName =path +userName+"_header.jpg";//图片名字
224             try {
225                 picPath = fileName;
226                 b = new FileOutputStream(fileName);
227                 mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
228
229             } catch (FileNotFoundException e) {
230                 e.printStackTrace();
231             } finally {
232                 try {
233                     //关闭流
234                     b.flush();
235                     b.close();
236                 } catch (IOException e) {
237                     e.printStackTrace();
238                 }
239
240             }
241         }
242
243     @Override
244     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
245             switch (requestCode) {
246             case 11:
247                 if (resultCode == RESULT_OK) {
248                     cropPhoto(data.getData());//裁剪图片
249                 }
250
251                 break;
252             case 22:
253                 if (resultCode == RESULT_OK) {
254                     File temp = new File(Environment.getExternalStorageDirectory()
255                             + "/"+userName+"_header.jpg");
256                     cropPhoto(Uri.fromFile(temp));//裁剪图片
257                 }
258
259                 break;
260             case 33:
261                 if (data != null) {
262                     Bundle extras = data.getExtras();
263                     headerPortait = extras.getParcelable("data");
264                     if(headerPortait!=null){
265                         setPicToView(headerPortait);//保存在SD卡中
266                         File file = new File(picPath);
267                         String request = UploadUtil.uploadFile( file, "http://172.27.211.1/guodouRecipe/servlet/headerPortaitUploadServlet");
268                         if (request!=null&&!request.equals("")) {
269                             Toast.makeText(getApplicationContext(), "头像修改成功", 0).show();
270                         }
271                         header_portrait_personnal_img.setImageBitmap(ToRoundBitmap.toRoundBitmap(headerPortait));//用ImageView显示出来
272                     }
273                 }
274                 break;
275             default:
276                 break;
277
278             }
279             super.onActivityResult(requestCode, resultCode, data);
280         };
281      //**********************************
282         @Override
283         public void onClick(View v) {
284             // TODO Auto-generated method stub
285             switch (v.getId()) {
286             case R.id.user_tag_personnal_text:
287                 //个性标签处理
288                 final EditText et=new EditText(PersonnalMessageActivity.this);
289                 new AlertDialog.Builder(PersonnalMessageActivity.this)
290                 .setTitle("编辑个性标签")
291                 .setView(et)
292                 .setPositiveButton("确定",
293                         new DialogInterface.OnClickListener() {
294
295                     @Override
296                     public void onClick(DialogInterface dialog, int which) {
297                         final String changeUserPersonnalTag=et.getText().toString();
298                         //if (changeUserPersonnalTag!=null&&!changeUserPersonnalTag.equals("")) {
299                             String url="http://172.27.211.1/guodouRecipe/servlet/changeUserPersonnalTagServlet";
300                             CustomRequest postRequest=new CustomRequest(Method.POST, url, new Listener<String>() {
301
302                                 @Override
303                                 public void onResponse(String ret) {
304                                         if(ret.equals("true")){
305                                             if(changeUserPersonnalTag!=null&&!changeUserPersonnalTag.equals("")){
306                                                 user_tag_personnal_text.setText(et.getText().toString());
307                                                 myHandler.sendEmptyMessage(0);
308                                             }else{
309                                                 user_tag_personnal_text.setHint("未填写");
310                                                 Toast.makeText(getApplicationContext(), "没有编辑", 0).show();
311                                             }
312                                         }
313
314                                 }
315                             }, new ErrorListener(){
316
317                                 @Override
318                                 public void onErrorResponse(VolleyError arg0) {
319                                     // TODO Auto-generated method stub
320                                     myHandler.sendEmptyMessage(1);
321                                 }});
322                             postRequest.setParam("userName", userName);
323                             postRequest.setParam("changeUserPersonnalTag", changeUserPersonnalTag);
324                             requestQueue.add(postRequest);
325
326                         //} else {
327                         //    Toast.makeText(getApplicationContext(), "没有编辑", 0).show();
328                         //}
329                     }
330                 })
331                 .setNegativeButton("取消",new DialogInterface.OnClickListener() {
332
333                     @Override
334                     public void onClick(DialogInterface arg0, int arg1) {
335                         Toast.makeText(getApplicationContext(), "已放弃编辑", 0).show();
336                     }
337                 })
338                 .setCancelable(false)
339                 .show();
340
341                 break;
342             case R.id.user_sex_personnal_text:
343                 final String[] sexs={"男","女"};
344                 selecteSex=sexs[0];
345                 new AlertDialog.Builder(PersonnalMessageActivity.this)
346                 .setTitle("请选择性别")
347                 .setSingleChoiceItems(sexs, 0,
348                         new DialogInterface.OnClickListener() {
349
350                             @Override
351                             public void onClick(DialogInterface dialog, int which) {
352                                 // TODO Auto-generated method stub
353                                 selecteSex=sexs[which];
354                             }
355                         })
356                 .setPositiveButton("确定",
357                         new DialogInterface.OnClickListener() {
358
359                             @Override
360                             public void onClick(DialogInterface dialog, int which) {
361                                 // TODO Auto-generated method stub
362                                 Toast.makeText(PersonnalMessageActivity.this, selecteSex, Toast.LENGTH_SHORT).show();
363                                 String url="http://172.27.211.1/guodouRecipe/servlet/changeUserSexServlet";
364                                 CustomRequest postRequest=new CustomRequest(Method.POST, url, new Listener<String>() {
365
366                                     @Override
367                                     public void onResponse(String ret) {
368                                             if(ret.equals("true")){
369                                                 user_sex_personnal_text.setText(selecteSex);
370                                                 //myHandler.sendEmptyMessage(0);
371
372                                             }
373                                     }
374                                 }, new ErrorListener(){
375
376                                     @Override
377                                     public void onErrorResponse(VolleyError arg0) {
378                                         // TODO Auto-generated method stub
379                                         myHandler.sendEmptyMessage(1);
380                                     }});
381                                 postRequest.setParam("userName", userName);
382                                 postRequest.setParam("selecteSex", selecteSex);
383                                 requestQueue.add(postRequest);
384                             }
385                         })
386                 .setNegativeButton("取消", null)
387                 .show();
388                 break;
389             case R.id.go_back_fisrt:
390                 Intent intent=new Intent(PersonnalMessageActivity.this,PersonalGuodouActivity.class);
391                 intent.putExtra("userName", userName);
392                 setResult(5,intent);
393                 finish();
394                 overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
395
396                 break;
397             case R.id.user_area_personnal_text:
398                 Toast.makeText(getApplicationContext(), "还没有开放本功能", Toast.LENGTH_SHORT).show();
399                 break;
400             default:
401                 break;
402             }
403         }
404         Handler myHandler=new Handler(){
405
406             @Override
407             public void handleMessage(Message msg) {
408                 super.handleMessage(msg);
409                 switch (msg.what) {
410                 case 0:
411                     Toast.makeText(getApplicationContext(), "编辑成功", 0).show();
412                     break;
413                 case 1:
414                     Toast.makeText(getApplicationContext(), "请求失败了", 0).show();
415                     break;
416                 default:
417                     break;
418                 }
419             }
420
421         };
422         public ImageLoader getImageLoader(){
423             GuodouRecipeApplication tna=(GuodouRecipeApplication) getApplication();
424             return tna.getmImageLoader();
425         }
426 }

activity的布局文件:

  1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2     xmlns:tools="http://schemas.android.com/tools"
  3     android:layout_width="match_parent"
  4     android:layout_height="match_parent"
  5     tools:context="${relativePackage}.${activityClass}" >
  6
  7     <RelativeLayout
  8         android:id="@+id/personal_message_header"
  9         android:layout_width="match_parent"
 10         android:layout_height="50dp"
 11         android:background="#efe7d7" >
 12
 13         <ImageView
 14             android:id="@+id/go_back_fisrt"
 15             android:layout_width="wrap_content"
 16             android:layout_height="fill_parent"
 17             android:layout_alignParentLeft="true"
 18             android:adjustViewBounds="true"
 19             android:gravity="center_vertical"
 20             android:src="@drawable/goback_activity" />
 21
 22         <ImageView
 23             android:id="@+id/header_logo"
 24             android:layout_width="wrap_content"
 25             android:layout_height="fill_parent"
 26             android:layout_gravity="center_vertical"
 27             android:layout_marginRight="5dp"
 28             android:layout_toRightOf="@+id/go_back_fisrt"
 29             android:adjustViewBounds="true"
 30             android:src="@drawable/ic_main_logo" />
 31
 32         <TextView
 33             android:id="@+id/personal_user_name"
 34             android:layout_width="wrap_content"
 35             android:layout_height="fill_parent"
 36             android:layout_toRightOf="@+id/header_logo"
 37             android:gravity="center_vertical"
 38             android:textSize="18sp"
 39             android:textStyle="bold"
 40             android:text="个人资料" />
 41
 42     </RelativeLayout>
 43     <RelativeLayout
 44         android:id="@+id/personal_message_canter"
 45         android:layout_width="match_parent"
 46         android:layout_height="wrap_content"
 47         android:layout_below="@+id/personal_message_header"
 48         android:layout_marginLeft="15dp"
 49         android:layout_marginRight="15dp"
 50         android:layout_marginTop="10dp"
 51         android:layout_marginBottom="5dp">
 52     <TextView
 53         android:id="@+id/header_portrait_personnal"
 54         android:layout_width="120dp"
 55         android:layout_height="30dp"
 56         android:textSize="16sp"
 57         android:layout_marginTop="8dp"
 58         android:layout_marginBottom="8dp"
 59         android:gravity="center_vertical"
 60         android:text="头像" />
 61     <ImageView
 62         android:id="@+id/header_portrait_personnal_img"
 63         android:layout_width="30dp"
 64         android:layout_height="30dp"
 65         android:layout_marginTop="8dp"
 66         android:layout_toRightOf="@+id/header_portrait_personnal"
 67         android:background="@drawable/default_user_photo"/>
 68     <ImageView
 69         android:id="@+id/line1"
 70         android:layout_below="@+id/header_portrait_personnal"
 71         style="@style/left_drawer_item_line" />
 72     <TextView
 73         android:id="@+id/user_name_personnal"
 74         android:layout_width="120dp"
 75         android:layout_height="30dp"
 76         android:layout_below="@+id/line1"
 77         android:textSize="16sp"
 78         android:layout_marginTop="8dp"
 79         android:layout_marginBottom="8dp"
 80         android:gravity="center_vertical"
 81         android:text="昵称" />
 82     <TextView
 83         android:id="@+id/user_name_personnal_text"
 84         android:layout_width="wrap_content"
 85         android:layout_height="30dp"
 86         android:layout_below="@+id/line1"
 87         android:layout_marginTop="8dp"
 88         android:layout_toRightOf="@+id/header_portrait_personnal"
 89         android:textSize="16sp"
 90         android:gravity="center_vertical"
 91         android:hint="昵称"/>
 92     <ImageView
 93         android:id="@+id/line2"
 94         android:layout_below="@+id/user_name_personnal"
 95         style="@style/left_drawer_item_line" />
 96
 97     <TextView
 98         android:id="@+id/user_tag_personnal"
 99         android:layout_width="120dp"
100         android:layout_height="30dp"
101         android:layout_below="@+id/line2"
102         android:textSize="16sp"
103         android:layout_marginTop="8dp"
104         android:layout_marginBottom="8dp"
105         android:gravity="center_vertical"
106         android:text="个性化标签" />
107     <TextView
108         android:id="@+id/user_tag_personnal_text"
109         android:layout_width="wrap_content"
110         android:layout_height="30dp"
111         android:layout_below="@+id/line2"
112         android:layout_marginTop="8dp"
113         android:layout_toRightOf="@+id/user_tag_personnal"
114         android:textSize="16sp"
115         android:gravity="center_vertical"
116         android:hint="未填写"/>
117     <ImageView
118         android:id="@+id/line3"
119         android:layout_below="@+id/user_tag_personnal"
120         style="@style/left_drawer_item_line" />
121
122     <TextView
123         android:id="@+id/user_sex_personnal"
124         android:layout_width="120dp"
125         android:layout_height="30dp"
126         android:layout_below="@+id/line3"
127         android:textSize="16sp"
128         android:layout_marginTop="8dp"
129         android:layout_marginBottom="8dp"
130         android:gravity="center_vertical"
131         android:text="性别" />
132     <TextView
133         android:id="@+id/user_sex_personnal_text"
134         android:layout_width="wrap_content"
135         android:layout_height="30dp"
136         android:layout_below="@+id/line3"
137         android:layout_marginTop="8dp"
138         android:layout_toRightOf="@+id/user_sex_personnal"
139         android:textSize="16sp"
140         android:gravity="center_vertical"
141         android:hint="未选择"/>
142     <ImageView
143         android:id="@+id/line4"
144         android:layout_below="@+id/user_sex_personnal"
145         style="@style/left_drawer_item_line" />
146
147     <TextView
148         android:id="@+id/user_area_personnal"
149         android:layout_width="120dp"
150         android:layout_height="30dp"
151         android:layout_below="@+id/line4"
152         android:textSize="16sp"
153         android:layout_marginTop="8dp"
154         android:layout_marginBottom="8dp"
155         android:gravity="center_vertical"
156         android:text="地区" />
157     <TextView
158         android:id="@+id/user_area_personnal_text"
159         android:layout_width="wrap_content"
160         android:layout_height="30dp"
161         android:layout_below="@+id/line4"
162         android:layout_marginTop="8dp"
163         android:layout_toRightOf="@+id/user_area_personnal"
164         android:textSize="16sp"
165         android:gravity="center_vertical"
166         android:hint="请选择所在地区"/>
167     <ImageView
168         android:id="@+id/line5"
169         android:layout_below="@+id/user_area_personnal"
170         style="@style/left_drawer_item_line" />
171     </RelativeLayout>
172 </RelativeLayout>

完整代码供大家参考,希望有用,中间有用到方形图片转换成圆形,方法在我的另一篇博文里

时间: 2024-10-12 09:17:42

头像图片上传到sd及服务器的相关文章

DWZ集成的xhEditor编辑器浏览本地图片上传的设置

有关xhEditor的文件上传配置官方文档链接:http://i.hdu.edu.cn/dcp/dcp/comm/xheditor/demos/demo08.html 一.xhEditor图片上传的配置 DWZ集成的xhEditor默认的配置是默认模式没有如下图上传按钮的,如果需要本地浏览上传,则需相关的配置 这里拿上传图片为例: <textarea class="editor" upimgurl="@Url.Action("xhEditorImgUpload

ashx 图片上传

为了方便多出调用图片上传方法       首先我们将图片上传方法抽离出来 创建ashx 一个新的方法 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Web; namespace FileImg { /// <summary> /// ImgUpL

Android之修改用户头像并上传服务器(实现手机拍照和SD卡选择上传)

写了这么多个的APP,最近才把他这个功能写上来,就抽取其中的用户修改头像的相关操作这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 案例包含了: Xutil图片上传 拍照和SD卡选择图片 图片缓存和界面逻辑处理 图片压缩和图片处理 自定义圆形头像 XUtils.Jar 下载 其他图片上传方式请看博客  :Volley-XUtils-OkHttp三种方式实现单张多张图片上传 效果图:(注:模拟器没拍照功能,效果图只有SD卡上传,手机测试拍照上传也是可以的) 代码: MainActivity.

Android图片上传(头像裁切+原图原样)

还是那句话,最近项目比较忙拖了很久这篇文章终于完成了! 先看一下效果图: (一)头像裁切.上传服务器(效果图) 一般都是有圆形显示头像的,这里我自定义了一个ImageView,页面很干净但是看着很上档次吧! 点击头像从底部弹出一个对话框,提示用户头像来自相机或者相册,这都是常规流程. 上传完成后默认的"程序员头像"换成了萌妹子 (二)普通图片上传服务器(效果图) 模仿QQ空间发动态的布局随意捏造一个界面出来 点击添加图片从底部弹出一个对话框,提示用户图片来自相机或者相册,这也都是常规流

微信端调取相册和摄像头,实现图片上传,并上传到本地服务器

在微信公众号网页开发时,遇到了图片上传的问题,查看了微信的开发者文档,里面的资料比较全.接着我们看一下整个的流程 1.config权限配置 $.ajax({ url:'wx_getConfig', type:'get', dataType:'json', async:false, success:function(data){ var appId = data[0].appId; var timestamp = data[0].timestamp; var nonceStr = data[0].

项目整合ckeditor实现图片上传到远程服务器

最近手头上的一个Java项目需要做一个门户网站,其中有一个模块就是用来发布最新的业界安全动态的模块,因此需要用到后台发布新闻的功能:刚开始的时候在网上搜了一下,大部分都是关于PHP和.NET的,关于Java不多,而且查到的都是说用ckeditor+ckfinder来实现,ckeditor实现文本的编辑,ckfinder实现图片的上传,刚开始我也是准备用ckeditor+ckfinder来实现的,但是后来研究ckfinder的时候不知道如何配置ckfinder的图片上传路径问题,网上可以找到好多例

kindeditor扩展粘贴图片功能&amp;修改图片上传路径并通过webapi上传图片到图片服务器

前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功能 kindeditor修改图片上传路径并通过webapi上传图片到图片服务器(支持分布式图片) 结果演示 1.扩展粘贴图片功能演示 2.修改图片上传路径演示: 我们的网站演示地址是:http://localhost:9393/ 我们的图片服务器地址是:http://localhost:9394/

felayman——PHP中图片上传到服务器

1.upload_file.php <?php //该文件负责获取上传的图片的扩展名和随机生成文件名 header("content-type:text/html;charset=utf-8"); /** * 获取文件扩展名 *Enter description here ... * @param unknown_type $filename */ function getFileName($filename){ //strrchr- 查找指定字符在字符串中的最后一次出现 ret

php form 图片上传至服务器上

本文章也是写给自己看的,因为写的很简洁,连判断都没有,只是直接实现了能上传的功能. 前台: <form action="upload.php" method="POST" enctype="multipart/form-data"> <input type="file" name="myfile" /> <input type="submit" value=