【问题标题】:Image uploading using Volley fails使用 Volley 上传图片失败
【发布时间】:2017-08-18 03:53:56
【问题描述】:

我正在尝试使用 Volley 将图像上传到远程服务器,但图像无法上传并且服务器没有响应。

应用程序将错误显示为Toast Message

我的 MainActivity.java 文件

package com.example.mashood.test;

import android.app.Activity;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;

import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


public class MainActivity extends Activity {

    ImageView imageView;
    EditText edit1;
    EditText edit2;
    Button choose;
    Button upload;
    final int IMG_REQUEST=0;
    Bitmap bitmap;
    public static String url="http://www.muftiattaullahmultani.com/android/image.php";

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView)findViewById(R.id.imageView);
        edit1=(EditText)findViewById(R.id.edit);
        choose=(Button)findViewById(R.id.choose);
        upload=(Button)findViewById(R.id.upload);
        upload.setOnClickListener(
            new Button.OnClickListener(){

                @Override
                public void onClick(View v) {
                    uploadImage();
                }
            });

        choose.setOnClickListener(
            new Button.OnClickListener() {
                @Override
                public void onClick(View v) {
                    SelectImage();
                }
            });
    }

    void SelectImage()
    {
        Intent intent=new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent,IMG_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==IMG_REQUEST&&resultCode==RESULT_OK&& data!=null)
        {
            Uri path=data.getData();
            try {
                bitmap= MediaStore.Images.Media.getBitmap(getContentResolver(),path);
                imageView.setImageBitmap(bitmap);
                imageView.setVisibility(View.VISIBLE);
                edit1.setVisibility(View.VISIBLE);

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

    private String ImageToString(Bitmap bitmap)
    {

        ByteArrayOutputStream outputstream=new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,100,outputstream);
        byte[] imgbyte=outputstream.toByteArray();
        return Base64.encodeToString(imgbyte,Base64.DEFAULT);
    }

    private void uploadImage()
    {
        StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Toast.makeText(getApplicationContext(),"Succes",Toast.LENGTH_LONG).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String>param=new HashMap<String, String>();
                param.put("name","img");
                param.put("image",ImageToString(bitmap));
                return param;
            }
        };
        MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);
    }
}

服务器 image.php 文件

<?PHP
    include 'database.php';
    $name=$_POST['name'];
    $image=$_POST['image'];
    $path="/home4/hazrat/public_html/audio/$name.jpg";
    file_put_contents($path,base64_decode($image));
    echo "succesful";
?>

当我单击上传按钮时,应用程序将错误显示为 toast 消息。我是否遗漏了代码中的某些内容,或者服务器端 PHP 脚本中是否有任何错误?

【问题讨论】:

  • 你能显示错误信息的内容吗?
  • 我猜&lt;?PHP应该是&lt;?php
  • 它在错误侦听器中显示 toast 消息 .. 而不是执行响应方法 .. 正在执行错误侦听器 .. 看看 uploadImage() 函数

标签: android android-volley


【解决方案1】:

在您的onErrorResponse 中输入error.printStackTrace() 以获取有关出错位置的更多信息。我假设@pavneet_singh 说将&lt;?PHP 更改为&lt;?php

【讨论】:

  • com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:169) com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:113) 我收到此错误,无法找出问题
猜你喜欢
  • 1970-01-01
  • 2015-06-08
  • 2019-08-30
  • 2014-10-25
  • 1970-01-01
  • 2016-04-11
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多