开机自检时Android Volly Client错误

时间:2018-06-25 18:40:11

标签: php android post

我想在donutProgress栏中显示上传百分比。我有2节课。一种是用要上传的图像文件完成所有工作,另一种是我扩展AsyncTask以显示进度的第二类。

现在在第二节课上,我尝试使用Volly将其发布到我的应用服务器,但是POST似乎根本没有发送任何数据。我已经检查了所有参数是否包含所有必需的值,但仍然收到com.android.volly.ClientError;。在github文档中,它说这是由4xx错误的网络引起的,但是由php页面未收到任何发布数据引起的。

这是完整的代码。

package com.mymss.mymss;
import static com.mymss.mymss.MarksFilter.changeBackArrowColor;

public class CaptureImage extends AppCompatActivity{

    Spinner s1,s2,s3;
    Button button;
    Boolean flag;
    ImageButton capture,upload,next,previous;
    ImageView imageContainer;
    TextView studentInfo;
    Toolbar toolbar;
    private static String StudentId,imgStr,sCode,defaultSession;
    DonutProgress donutProgress;
    String[] clas,sec,roll,cid,sid,rid,stdid,resultSet,rSetId;
    String url="",getSecUrl,getRollUrl,sID,sName,sMob,resultClass,resultSec,resultRoll,getStdUrl;
    ProgressDialog progressDialog;
    JSONObject jsonObject;
    JSONArray jsonArray;
    ArrayAdapter<String> arrayAdapter,aD2,aD3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_capture_image);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        defaultSession="2018";
        flag = false;
        s1 = findViewById(R.id.spClass);
        s2 = findViewById(R.id.spSec);
        s3 = findViewById(R.id.spRoll);
        button = findViewById(R.id.btnCaptureGet);
        imageContainer = findViewById(R.id.ImageView_image);
        previous = findViewById(R.id.leftBtn2);
        next = findViewById(R.id.rightBtn2);
        capture = findViewById(R.id.captureImage);
        donutProgress = findViewById(R.id.donut_progress1);
        upload = findViewById(R.id.upload);
        studentInfo = findViewById(R.id.imageName);
        toolbar = findViewById(R.id.toolbarImage);
        imageContainer.setVisibility(View.GONE);
        previous.setVisibility(View.GONE);
        next.setVisibility(View.GONE);
        studentInfo.setVisibility(View.GONE);
        button.setVisibility(View.GONE);
        capture.setVisibility(View.GONE);
        upload.setVisibility(View.GONE);
        setSupportActionBar(toolbar);
        final UploadFileToServer uploadFileToServer;
        getSupportActionBar().setHomeAsUpIndicator(changeBackArrowColor(this, Color.rgb(2, 2, 250)));
        toolbar.setNavigationOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        onBackPressed();

                    }
                }
        );

        Intent intent = getIntent();
        try {
            sID = intent.getExtras().getString("ID");
            sCode = intent.getExtras().getString("School");
            sName = intent.getExtras().getString("Name");
            sMob = intent.getExtras().getString("Mobile");

        }
        catch (NullPointerException e)
        {
            new AlertDialog.Builder(CaptureImage.this)
                    .setTitle("ERROR !!")
                    .setMessage("Error Code = "+e.toString())
                    .setCancelable(false)
                    .setIcon(R.drawable.ic_logo)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                            //finishAffinity();
                            //System.exit(0);
                        }
                    }).show();
        }
        url = "https://www.mymss.com/Android/photo.php?action=getclass&session="+defaultSession+"&code="+sCode+"&user="+sID;
        callNet(url,"Class");
        s1.setOnItemSelectedListener(
                new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                        try {

                            Object item = adapterView.getItemAtPosition(i);
                            if (item != null) {

                                //Toast.makeText(TeacherLand.this, item.toString() + " selected with mobile no "+number[i],
                                //      Toast.LENGTH_SHORT).show();

                                resultClass = cid[i];
                                //examName = exam[i];
                                if(resultClass.compareToIgnoreCase("0")!=0)
                                {
                                    getSecUrl = "https://www.mymss.com/Android/photo.php?action=secexam&session="+defaultSession+"&code="+sCode+"&user="+sID+"&element_1="+resultClass;
                                    callNet(getSecUrl,"Section");
                                }

                            }
                        }
                        catch (NullPointerException e)
                        {
                            Toast.makeText(CaptureImage.this,"Error Block",Toast.LENGTH_SHORT).show();
                        }

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> adapterView) {

                    }
                }
        );
        s2.setOnItemSelectedListener(
                new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                        try {

                            Object item = adapterView.getItemAtPosition(i);
                            if (item != null) {

                                //Toast.makeText(TeacherLand.this, item.toString() + " selected with mobile no "+number[i],
                                //      Toast.LENGTH_SHORT).show();

                                resultSec = sid[i];
                                //examName = exam[i];
                                if(resultSec.compareToIgnoreCase("0")!=0)
                                {
                                    getRollUrl = "https://www.mymss.com/Android/photo.php?action=allroll&session="+defaultSession+"&code="+sCode+"&user="+sID+"&class="+resultClass+"&sec="+resultSec;
                                    callNet(getRollUrl,"Roll");
                                }
                            }
                        }
                        catch (NullPointerException e)
                        {
                            Toast.makeText(CaptureImage.this,"Error Block",Toast.LENGTH_SHORT).show();
                        }

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> adapterView) {

                    }
                }
        );
        s3.setOnItemSelectedListener(
                new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                        try {

                            Object item = adapterView.getItemAtPosition(i);
                            if (item != null) {

                                //Toast.makeText(TeacherLand.this, item.toString() + " selected with mobile no "+number[i],
                                //      Toast.LENGTH_SHORT).show();

                                resultRoll = rid[i];
                                StudentId = stdid[i];

                                //examName = exam[i];
                                if(resultRoll.compareToIgnoreCase("0")!=0)
                                {
                                    getStdUrl = "https://www.mymss.com/Android/photo.php?action=get&session="+defaultSession+"&code="+sCode+"&user="+sID+"&stdid="+stdid[i];
                                    //callNet(getRollUrl,"Roll");
                                    button.setVisibility(View.VISIBLE);
                                }
                            }
                        }
                        catch (NullPointerException e)
                        {
                            Toast.makeText(CaptureImage.this,"Error Block",Toast.LENGTH_SHORT).show();
                        }

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> adapterView) {

                    }
                }
        );
        button.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        callNet(getStdUrl,"get");
                        //Toast.makeText(getApplicationContext(),getStdUrl,Toast.LENGTH_LONG).show();
                    }
                }
        );
        capture.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        CropImage.activity()
                                .setActivityTitle("ImageCrop")
                                .setAspectRatio(1,1)
                                .setMultiTouchEnabled(true)
                                .start(CaptureImage.this);
                    }
                }
        );
        uploadFileToServer = new UploadFileToServer(this,imgStr,sCode,defaultSession,StudentId);
        upload.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {


                        uploadFileToServer.execute();
                        //new UploadFileToServer().execute();
                        //uploadImage("blank",imgStr);
                    }
                }
        );

    }

    public static String getImgStr()
    {
        return imgStr;
    }
    public static String getsCode()
    {
        return sCode;
    }
    public static String getDefaultSession()
    {
        return defaultSession;
    }
    public static String getStudentId()
    {
        return StudentId;
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
        {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if(requestCode == 203 || requestCode == RESULT_OK)
            {
                Uri resultUri = result.getUri();
                imageContainer.setImageURI(resultUri);
                Bitmap bitmap = ((BitmapDrawable)imageContainer.getDrawable()).getBitmap();
                imgStr = imageConvert(bitmap);
                upload.setVisibility(View.VISIBLE);
            }
            else if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE)
            {

                Exception error = result.getError();
                Toast.makeText(getApplicationContext(),""+error,Toast.LENGTH_SHORT).show();
            }
        }

    }

    public static Drawable changeBackArrowColor(Context context, int color) {
        String resName;
        int res;

        resName = Build.VERSION.SDK_INT >= 23 ? "abc_ic_ab_back_material" : "abc_ic_ab_back_mtrl_am_alpha";
        res = context.getResources().getIdentifier(resName, "drawable", context.getPackageName());

        final Drawable upArrow = context.getResources().getDrawable(res);
        upArrow.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

        return upArrow;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.mymenu,menu);

        MenuItem menuItem1 = menu.findItem(R.id.sessionCurrent);
        MenuItem menuItem2 = menu.findItem(R.id.sessionNext);

        if(!menuItem1.isChecked() && !menuItem2.isChecked())
        {
            menuItem1.setChecked(true);
            defaultSession = menuItem1.getTitle().toString();
        }


        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch(item.getItemId())
        {
            case R.id.sessionCurrent:
                item.setChecked(true);
                defaultSession = item.getTitle().toString();
                Toast.makeText(getApplicationContext(),"Session changed to "+item.getTitle().toString(),Toast.LENGTH_SHORT).show();
                break;
            case R.id.sessionNext:
                item.setChecked(true);
                defaultSession = item.getTitle().toString();
                Toast.makeText(getApplicationContext(),"Session changed to "+item.getTitle().toString(),Toast.LENGTH_SHORT).show();
                break;
        }

        return true;
    }

    private String imageConvert(Bitmap bitmap)
    {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,90,byteArrayOutputStream);
        byte[] imgBytes = byteArrayOutputStream.toByteArray();


        return Base64.encodeToString(imgBytes,Base64.DEFAULT);
    }

    public void fillPic(String url)
    {

        View parentLayout = findViewById(android.R.id.content);
        Snackbar.make(parentLayout,"Please Wait, Still Loading....... ",Snackbar.LENGTH_LONG)
                .setAction("CLOSE", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                    }
                }).show();

        Picasso.with(getApplicationContext())
                .load(url)
                .error(R.drawable.question)
                .fit()
                .into(imageContainer, new Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError() {

                        View parentLayout = findViewById(android.R.id.content);
                        Snackbar.make(parentLayout,"Image not available. ",Snackbar.LENGTH_LONG)
                                .setAction("CLOSE", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {

                                    }
                                }).show();
                    }
                });

    }

}

class UploadFileToServer extends AsyncTask<String, String, String> {
    CaptureImage captureImage = new CaptureImage();
    DonutProgress donutProgress;
    ImageButton upload;
    public Activity activity;
    String image,code,session,StudentId;
    public UploadFileToServer(Activity _activity,String image,String code,String session,String StudentId)
    {

        this.activity = _activity;
        this.image = image;
        this.code = code;
        this.session = session;
        this.StudentId = StudentId;
        donutProgress = this.activity.findViewById(R.id.donut_progress1);
        upload = this.activity.findViewById(R.id.upload);
    }
    @Override
    protected void onPreExecute() {
        // setting progress bar to zero

        image = CaptureImage.getImgStr();
        code = CaptureImage.getsCode();
        session = CaptureImage.getDefaultSession();
        StudentId = CaptureImage.getStudentId();
        upload.setVisibility(View.GONE);
        donutProgress.setVisibility(View.VISIBLE);
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(String... progress) {
        //Log.d("PROG", progress[0]);
        //donut_progress.setProgress(Integer.parseInt(progress[0])); //Updating progress
        donutProgress.setProgress(Float.valueOf(progress[0]));
    }

    @Override
    protected String doInBackground(String... args) {
            RequestQueue queue = Volley.newRequestQueue(activity);
            StringRequest sr = new StringRequest(Request.Method.POST,"https://www.mymss.com/Android/photo.php", new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    if (response.compareToIgnoreCase("success")==0) {
                        activity.runOnUiThread(
                                new Runnable() {
                                    @Override
                                    public void run() {

                                        //Toast.makeText(activity,"Code = "+code+" , Img = "+image+", Session = "+session,Toast.LENGTH_LONG).show();
                                        Toast.makeText(activity, "Success", Toast.LENGTH_SHORT).show();
                                    }
                                }
                        );

                    }
                        else {
                        activity.runOnUiThread(
                                new Runnable() {
                                    @Override
                                    public void run() {

                                        //Toast.makeText(activity,"Code = "+code+" , Img = "+image+", Session = "+session,Toast.LENGTH_LONG).show();
                                        Toast.makeText(activity, "Failed", Toast.LENGTH_SHORT).show();
                                    }
                                }
                        );

                    }
                    donutProgress.setVisibility(View.GONE);
                    upload.setVisibility(View.VISIBLE);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {


                    new AlertDialog.Builder(activity)
                            .setTitle("Error")
                            .setMessage("Invalid Response From Server.[Code = "+error.toString()+"]")
                            .setCancelable(false)
                            .setIcon(R.drawable.ic_logo)
                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.cancel();
                                    //finishAffinity();
                                    //System.exit(0);
                                }
                            }).show();
                    donutProgress.setVisibility(View.GONE);
                }
            }){
                @Override
                protected Map<String,String> getParams(){
                    Map<String,String> params = new HashMap<String, String>();
                    params.put("image",image);
                    params.put("code",code);
                    params.put("session",session);
                    params.put("addphoto", StudentId);

                    return params;
                }

                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    Map<String,String> params = new HashMap<String, String>();
                    params.put("Content-Type","application/x-www-form-urlencoded");
                    return params;
                }
            };
            queue.add(sr);



        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        //Log.e("Response", "Response from server: " + result);
        super.onPostExecute(result);
    }

}

这是php代码

<?php
file_put_contents('test.txt', $_POST);
if(isset($_POST['addphoto']))
{
$dir = $_POST['code'];
$session = $_POST['session'];
}
else{
$user = $_GET['user'];
$dir = $_GET['code'];
$session = $_GET['session'];
}

    $upOne = realpath(__DIR__ . '/..');

    $conn1=odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)};Dbq=$dbName","user","pass");        


if(isset($_POST['addphoto'])){
    $_POST['addphoto']=intval($_POST['addphoto']);
    if($_POST['addphoto']){
    $img = $_POST['image'];
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$time=time();
$filename=$time.'_'.$_POST['addphoto'].'.jpg';
$file = 'uploads/studentphoto/'.$filename;
$success = file_put_contents($file, $data);
$sql="select StudentId,img from StudentMain where StudentId=".$_POST['addphoto'];
$rs=odbc_exec($conn1,$sql)or die (print odbc_errormsg());
$row=odbc_fetch_array($rs);
if(file_exists("uploads/studentphoto/".$row['img']) && $row['img'])
unlink("uploads/studentphoto/".$row['img']);
$sql = "update StudentMain set img='".$filename."' where StudentId=".$row['StudentId'];
$rs = odbc_exec($conn1,$sql)or die (print odbc_errormsg());
echo 'success';




    }
}
?>

这是屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:1)

在“ UploadFileToServer”中定义:

CaptureImage captureImage = new CaptureImage();

然后使用:

image = CaptureImage.getImgStr();

protected void onPreExecute() {

在没有向图像字符串赋新值的情况下,我认为这在当时仍然为null。相反,似乎您想将 this 传递给构造函数。

答案 1 :(得分:0)

从Volly中删除getHeaders()方法后,它终于可以工作了。不知道为什么,但是现在工作正常。

相关问题