2016-09-10 2 views
2

Volley를 사용하여 이미지 및 기타 세부 정보로 프로필을 업데이트하려고합니다.이미지를 파일로 변환하여 volley 및 json URL로 보내기

이미지 파일을 변환하고 url 매개 변수로 보내야합니다.

프로필을 업데이트하기 위해 다른 모든 세부 정보도 구문 분석해야합니다.

프로필 이미지를 업데이트하려면 어떻게해야합니까?

   url = "http://192.168.1.30:1021/mobileapi/profile_update.html?&user_id="+user+"&firstname="+First.getText().toString()+ 
         "&lastname="+last.getText().toString()+"&secondaryemail="+sEmail.getText().toString()+ 
         "&phonemobile="+mob.getText().toString()+"&aboutus="+work.getText().toString()+"&phonework="+phone.getText().toString()+ 
         "&skypeid="+skypeid.getText().toString()+"&gender="+gender+"&smtp_password="+mpass.getText().toString()+"&image="+fos; 

       url=url.trim().replaceAll("\\s+",""); 
       System.out.println("url" + url); 
       pDialog = new ProgressDialog(getActivity()); 

       pDialog.setMessage("Loading..."); 
       pDialog.show(); 
       pDialog.dismiss(); 
       queue = Volley.newRequestQueue(getActivity()); 

       request = new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() { 


        @Override 
        public void onResponse(JSONArray response) { 

         try { 
          System.out.println("updaa" + response.toString()); 
          JSONObject update = response.getJSONObject(0); 
          int httpcode = Integer.parseInt(update.getString("status")); 
          if (httpcode == 200) { 
           String mess = update.getString("message"); 
           Toast.makeText(getActivity(), mess, Toast.LENGTH_LONG).show(); 
           int userid = Integer.parseInt(update.getString("user_id")); 
           String fname = update.getString("firstname"); 
           String lname = update.getString("lastname"); 
           String mail = update.getString("email"); 
           String smail=update.getString("secondary_email"); 
          /* String ph= String.valueOf(Integer.parseInt(update.getString("phone_work"))); 
           String phone= String.valueOf(Integer.parseInt(update.getString("phone_mobile")));*/ 
           String skype_id = update.getString("skype_id"); 
           String user_title = update.getString("user_title"); 
           String imgUrl = update.getString("image"); 

           editor.putString("name", fname); 
           editor.putString("userid", String.valueOf(userid)); 
           editor.putString("lname",lname); 
           editor.putString("mail",mail); 
           editor.putString("skype",skype_id); 
           editor.putString("image",imgUrl); 
     //         editor.putString("phone",  String.valueOf(ph)); 
           editor.putString("work",user_title); 
           editor.putString("smail",smail); 
       //         editor.putString("phone", String.valueOf(phone)); 
           editor.commit(); 


          } else { 
           JSONObject typ = response.getJSONObject(0); 
           String message = typ.getString("message"); 
           Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show(); 
          } 


         } catch (JSONException e) { 

          e.printStackTrace(); 
         } 
        } 
       }, new Response.ErrorListener() { 
          @Override 

          public void onErrorResponse(VolleyError error) { 

           System.out.println("result" + error.getLocalizedMessage()+"__"+error.getMessage()); 
           Log.e("Volley", "Error"); 

          } 
         }){ 
                        }; 


       queue.add(request); 
      } 
     } 
    }); 

    return view; 
} 


private void opengallery() { 
    Intent intent = new Intent(); 
    // Show only images, no videos or anything else 
    intent.setType("image/*"); 
         intent.setAction(Intent.ACTION_GET_CONTENT); 
    // Always show the chooser (if there are multiple options available) 
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 

} 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 


    if (requestCode == PICK_IMAGE_REQUEST && intent != null && intent.getData() != null) { 

     Uri uri = intent.getData(); 

     try { 
      /*Uri selectedImageURI = data.getData(); 
      imageFile = new File(getRealPathFromURI(selectedImageURI));*/ 

      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri); 
      Log.d("TAG", String.valueOf(bitmap)); 
      Bpro.setImageBitmap(bitmap); 

      String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
      OutputStream outStream = null; 
      File file = new File(uri + ".png"); 
      file = new File(extStorageDirectory, uri + ".png"); 
      Log.e("file exist", "" + file + ",Bitmap= " + uri); 
      fos = new FileOutputStream(file); 

      bitmap.compress(Bitmap.CompressFormat.PNG, 85, fos); 


      /* fos = new FileOutputStream(f); 
      fos.write(bitmapdata);*/ 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

JSON 응답

[{ 
    "smtp_password":"abdul", 
    "status":"200", 
    "user_type":"2", 
    "skype_id":"skype", 
    "emp_id":"N0418", 
    "phone_work":"9864545454", 
    "image":"http:\/\/192.168.1.30:1021\/uploads\/Nandha\/profile_image\/180_200\/45571.png", 
    "lastname":"Rahman", 
    "firstname":"Abdul", 
    "user_title":"android", 
    "message":"Profile has been updated successfully", 
    "email":"[email protected]", 
    "gender":"1", 
    "user_id":"45571", 
    "secondary_email":"[email protected]", 
    "phone_mobile":"9892545454" 
}] 
+0

무엇이 문제입니까? JSON 응답도 표시하십시오. – earthw0rmjim

+0

urlhttp : //192.168.1.30 : 1021/mobileapi/profile_update.html &user_id=45571&firstname=Abdul&lastname=Rahman&[email protected]&phonemobile=9892545454&aboutus=android&phonework=9864545454&skypeid=skype&gender=1&smtp_password=abdul&image=null 난 널 (null)로 이미지를 가지고있다 갤러리에서 이미지를 선택하더라도 –

+0

프로필 이미지를 업데이트해야합니다. 이미지를 파일 –

답변

1

사용 저 .Its이 다중 이미지를 전송 작동 가깝지만이 코드.

private void saveProfileDetails() { 
    // loading or check internet connection or something... 
    // ... then 
    String url = "http://51.76.27.90:8080/post/new/"; 
    VolleyMultipartRequest multipartRequest = new VolleyMultipartRequest(Request.Method.POST, url, new Response.Listener<NetworkResponse>() { 
     @Override 
     public void onResponse(NetworkResponse response) { 
      System.out.println("statuscode is " + response.statusCode); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      NetworkResponse networkResponse = error.networkResponse; 
      String errorMessage = "Unknown error"; 
      if (networkResponse == null) { 
       if (error.getClass().equals(TimeoutError.class)) { 
        errorMessage = "Request timeout"; 
       } else if (error.getClass().equals(NoConnectionError.class)) { 
        errorMessage = "Failed to connect server"; 
       } 
      } else { 
       String result = new String(networkResponse.data); 
       try { 
        JSONObject response = new JSONObject(result); 
        String status = response.getString("status"); 
        String message = response.getString("message"); 

        Log.e("Error Status", status); 
        Log.e("Error Message", message); 

        if (networkResponse.statusCode == 404) { 
         errorMessage = "Resource not found"; 
        } else if (networkResponse.statusCode == 401) { 
         errorMessage = message + " Please login again"; 
        } else if (networkResponse.statusCode == 400) { 
         errorMessage = message + " Check your inputs"; 
        } else if (networkResponse.statusCode == 500) { 
         errorMessage = message + " Something is getting wrong"; 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      Log.i("Error", errorMessage); 
      error.printStackTrace(); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<>(); 
      params.put("username", "[email protected]"); 
      params.put("category", "product"); 
      params.put("type", "product"); 
      params.put("title", "i am done "); 
      params.put("content", "contentssssssssssssssssssssssss"); 
      params.put("location", "Bangalore"); 

      return params; 
     } 

     @Override 
     protected Map<String, DataPart> getByteData() { 
      Map<String, DataPart> params = new HashMap<>(); 
      // file name could found file base or direct access from real path 
      // for now just get bitmap data from ImageView 
      params.put("imageC", new DataPart("file_avatar.jpg", AppClass.getFileDataFromDrawable(getBaseContext(), colorImage.getDrawable()), "image/jpeg")); 
      params.put("imageBW", new DataPart("file_cover.jpg", AppClass.getFileDataFromDrawable(getBaseContext(), blackAndWhiteImage.getDrawable()), "image/jpeg")); 

      return params; 
     } 
    }; 

    VolleySingleton.getInstance(getBaseContext()).addToRequestQueue(multipartRequest); 
} 

하고 PLS는 권리로이 답변하는 데 도움을주는 경우이 당신의 VollySingleton 기능

/** 
* Created by snehasish on 29/7/16. 
*/ 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.support.v4.util.LruCache; 

import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.Volley; 

/** 
* Singleton volley to populate request into single queue. 


*/ 
public class VolleySingleton { 
private static VolleySingleton mInstance; 
private RequestQueue mRequestQueue; 
private ImageLoader mImageLoader; 
private static Context mCtx; 

/** 
* Private constructor, only initialization from getInstance. 
* 
* @param context parent context 
*/ 
private VolleySingleton(Context context) { 
    mCtx = context; 
    mRequestQueue = getRequestQueue(); 

    mImageLoader = new ImageLoader(mRequestQueue, 
      new ImageLoader.ImageCache() { 
       private final LruCache<String, Bitmap> cache = new LruBitmapCache(mCtx); 

       @Override 
       public Bitmap getBitmap(String url) { 
        return cache.get(url); 
       } 

       @Override 
       public void putBitmap(String url, Bitmap bitmap) { 
        cache.put(url, bitmap); 
       } 
      }); 
} 

/** 
* Singleton construct design pattern. 
* 
* @param context parent context 
* @return single instance of VolleySingleton 
*/ 
public static synchronized VolleySingleton getInstance(Context context) { 
    if (mInstance == null) { 
     mInstance = new VolleySingleton(context); 
    } 
    return mInstance; 
} 



/** 
* Get current request queue. 
* 
* @return RequestQueue 
*/ 
public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     // getApplicationContext() is key, it keeps you from leaking the 
     // Activity or BroadcastReceiver if someone passes one in. 
     mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); 
    } 
    return mRequestQueue; 
} 

/** 
* Add new request depend on type like string, json object, json array request. 
* 
* @param req new request 
* @param <T> request type 
*/ 
public <T> void addToRequestQueue(Request<T> req) { 
    getRequestQueue().add(req); 
} 

/** 
* Get image loader. 
* 
* @return ImageLoader 
*/ 
public ImageLoader getImageLoader() { 
    return mImageLoader; 
} 
} 

입니다!

+0

답변을 주셔서 감사합니다 나는 시도하고 내 의견을 넣을 것입니다 –

+0

그것은 당신에게 도움이된다면 분명히 그것을 잊지 말아주세요. :) – snehasish

+0

제가 말씀 드린 URL에 패스를 전달하고 싶습니다. –

관련 문제