2016-09-26 8 views
0

Volleyを使用して自分のデータを投稿しようとしていますが、自分のイメージをサーバーにアップロードできません。 http:\\www.mybaseurl.com/upload.phpの予期しない応答コード500のようなエラーが常に発生する。続き は私がVolleyを使ってサーバー上の画像をアップロードするには?

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(){ 
    //Showing the progress dialog 
    final ProgressDialog loading = ProgressDialog.show(this,"Uploading...","Please wait...",false,false); 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String s) { 
        //Disimissing the progress dialog 
        loading.dismiss(); 
        //Showing toast message of the response 
        Toast.makeText(MainActivity.this, s , Toast.LENGTH_LONG).show(); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError volleyError) { 
        //Dismissing the progress dialog 
        loading.dismiss(); 

        //Showing toast 
        Toast.makeText(MainActivity.this, ""+volleyError, Toast.LENGTH_LONG).show(); 
       } 
      }){ 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      //Converting Bitmap to String 
      String image = getStringImage(bitmap); 
      //Getting Image Name 
      String name = editTextName.getText().toString().trim(); 
      //Creating parameters 
      Map<String,String> params = new Hashtable<String, String>() 
      params.put("empsno", "81"); 
      params.put("storesno", "165"); 
      params.put("lrSno", "1808"); 
      params.put("recQty", "0"); 
      params.put("recVol", "0"); 
      params.put("recWgt", "0"); 
      params.put("damageQty", "0"); 
      params.put("looseQty", "0"); 
      params.put("deliveryDate", "2016-09-24"); 
      params.put("deliveryTime", "10:15"); 
      params.put("uploadFile", image); 
      params.put("remarks", "mytestingrem"); 
      params.put("receivedBy", "amankumar"); 
      params.put("ipAddress", "12.65.65.32"); 

      //returning parameters 
      return params; 
     } 
    }; 

    //Creating a Request Queue 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 

    //Adding request to the queue 
    requestQueue.add(stringRequest); 
} 

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) { 
     Uri filePath = data.getData(); 
     try { 
      //Getting the Bitmap from Gallery 
      bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
      //Setting the Bitmap to ImageView 
      imageView.setImageBitmap(bitmap); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
public void onClick(View v) { 

    if(v == buttonChoose){ 
     showFileChooser(); 
    } 

    if(v == buttonUpload){ 
     uploadImage(); 
    } 
} 

をアップロードしようとしているこれで私のコードでこれらのパラメータを指定してファイルをアップロードする方法を、私を助けてください。私はボレーで新しいです。私は単にhttps://www.simplifiedcoding.net/android-volley-tutorial-to-upload-image-to-serverからこのコードをコピーしてコピーします。たとえ私が正しく使用しているかどうかはわかりません。 ありがとうございます。

+0

を使用してアップロードが

+0

あなたのPHPコードを共有できますか? – Adi

+0

@Adi PHPコード私は知らない。私は議論だけを知っています**残りの**(クロムの拡張子)サーバーにデータを送信する方法 –

答えて

1

あなたはvolleyライブラリと画像のアップロードのコンセプトを理解する必要があります。画像のアップロードと、volleyライブラリの使用のための他の便利なリンクがあります。

volley library

Image upload using multipart

注:私はまた、あなたのtutorial.codeをテストしているOKです。あなたのイメージパスを正しく確認してください。可能であれば、ホストされているWebサーバー上でPHPコードを使用してください。サーバースクリプトのパラメータでUが渡したjson応答とcoross check urパラメータを確認してください。

+0

のこのリンクを提供しました。このエラーを受け取った画像のコードを直接挿入している場合** BasicNetwork.performRequest: "http://example.com/upload**"の予期しない応答コード500 は直接http: //pastebin.com/N3iegMU8 –

+0

具体的にしてください。私はコードを挿入していません。 – Adi

+0

それはとてもシンプルで優れたチュートリアルです。あなたは基本的なPHPの概念(データベースを使った基本的なクエリ)に関する知識が必要です。 Uがイメージパスを失っていると言う。 – Adi

2

実際にmaプロジェクトで使用したこの方法を試すことができます。ギャラリーからイメージを選択する必要があります。ギャラリーを開くには、イメージ

    private void showFileChooser() { 
        Intent pickImageIntent = new Intent(Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
           pickImageIntent.setType("image/*"); 
           pickImageIntent.putExtra("aspectX", 1); 
           pickImageIntent.putExtra("aspectY", 1); 
           pickImageIntent.putExtra("scale", true); 
           pickImageIntent.putExtra("outputFormat", 
           Bitmap.CompressFormat.JPEG.toString()); 
           startActivityForResult(pickImageIntent, PICK_IMAGE_REQUEST); 
         } 

を選択する文字列に変換され、サーバーにボレーを経由して送信され

// initialize 
    private int PICK_IMAGE_REQUEST = 1; 

    //set click listener 
     Upload.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //method to upload the image 
         showFileChooser(); 

        } 
       }); 

方法の画像は実際にサーバーに送信されたばかり。このmethod.Hereを追加します。

@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) { 
          Uri filePath = data.getData(); 
          try { 
           Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
           Bitmap lastBitmap = null; 
           lastBitmap = bitmap; 
           //encoding image to string 
           String image = getStringImage(lastBitmap); 
           Log.d("image",image); 
           //passing the image to volley 
           SendImage(image) 

          } 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 SendImage(final String image) { 
      final StringRequest stringRequest = new StringRequest(Request.Method.POST, "URL", 
        new Response.Listener<String>() { 
         @Override 
         public void onResponse(String response) { 
          Log.d("uploade",response); 
          try { 
           JSONObject jsonObject = new JSONObject(response); 

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

         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          Toast.makeText(Edit_Profile.this, "No internet connection", Toast.LENGTH_LONG).show(); 

         } 
        }) { 
       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 

        Map<String, String> params = new Hashtable<String, String>(); 

        params.put("image", image); 
        return params; 
       } 
      }; 
      { 
       int socketTimeout = 30000; 
       RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); 
       stringRequest.setRetryPolicy(policy); 
       RequestQueue requestQueue = Volley.newRequestQueue(this); 
       requestQueue.add(stringRequest); 
      } 
     } 
関連する問題