尝试将Android Volley Post请求发送给Laravel [英] Trying to send android volley post request to Laravel

查看:54
本文介绍了尝试将Android Volley Post请求发送给Laravel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用laravel 5.1进行数据库连接,并将android的发帖请求发送到laravel. 但异常显示服务器错误"

I am using laravel 5.1 for the database connectivity and sending the post request form android to laravel.. but the exception is showing "server error"

它是我的Android代码:-

Its my Android Code:-

package com.example.ankit.postrequest;

import android.app.DownloadManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class DataSent extends AppCompatActivity {

    private static final String KEY_USERNAME ="rohit" ;
    private static final String KEY_PASSWORD ="1234" ;
    private static final String KEY_EMAIL ="a@gmail.com" ;
    private static final String KEY_token ="xyz" ;
    EditText Etname,Etpass,Etmail,Et_token;
    RequestQueue insert;
    String insertUrl ="http://memorableshaadi.com/j";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Etmail = (EditText)findViewById(R.id.activity_booking_form_email);
        Etname = (EditText)findViewById(R.id.activity_booking_form_name);
        Etpass = (EditText)findViewById(R.id.activity_booking_form_dow);
        Et_token = (EditText)findViewById(R.id.activity_booking_form_token);
    }

    public void call(View v) {
          registerUser();
    }

    private void registerUser(){
        final String username = Etname.getText().toString().trim();
        final String password = Etpass.getText().toString().trim();
        final String email = Etmail.getText().toString().trim();
        final String token = Ettoken.getText().toString().trim();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, insertUrl,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Toast.makeText(DataSent.this, response, Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(DataSent.this,error.toString(),Toast.LENGTH_LONG).show();
                    }
                }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>();
                params.put(KEY_USERNAME,username);
                params.put(KEY_PASSWORD,password);
                params.put(KEY_EMAIL, email);
                params.put(KEY_token, token);
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

}

Laravel route.php

Laravel routes.php

<?php

Route::post('users','JsonController@data');

laravel JsonController.php

laravel JsonController.php

   <?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use File;
use Storage;
use response;
use Illuminate\Contracts\Routing\ResponseFactory;
class JsonController extends Controller{
public function data(Request $dat){
            $user = $dat->username;
            $pass = $dat->password;
            $email = $dat->email;
            DB::table('user')->insert([
                    'user_name' => $user,
                    'user_email' => $pass, 
                    'user_password' => $email
            ]);
            echo($user.$pass.$email);
        }
}

推荐答案

您应该注意两件事: 首先:您面临的错误是: VerifyCsrfToken.php中的TokenMismatchException,其原因是因为要构建身份验证,任何请求都应通过中间件传递,并且必须通过Laravel令牌传递,因此由于您使用的是post方法,因此未传递它,因此它丢失了您的请求,所以这是最简单的方法修复将异常添加到您的App \ Http \ Middleware \ VerifyCsrfToken.php

There are two things you should take care of : First : The error you're facing is : TokenMismatchException in VerifyCsrfToken.php and the reason is because to build an authentication any request should passthrough your middleware and in Laravel Token must be passed so since you are using the post method you didn't pass it and it's missing your request so the easiest way to fix that is to add exceptions to your App\Http\Middleware\VerifyCsrfToken.php

class VerifyCsrfToken extends BaseVerifier
{
/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
protected $except = [
   /* Add here your URLs */ 
];
}

您的请求将正常工作,并且您也可以使用此库来处理令牌身份验证 jwt-auth . 但是,关于您的代码,我应该提到一些事情: 在您的android代码中:

And your request will work just fine, and also you can use this library for handling Token Authentication jwt-auth. However there is something I should mention about your code: In your android code :

private static final String KEY_USERNAME ="rohit" ;
private static final String KEY_PASSWORD ="1234" ;
private static final String KEY_EMAIL ="a@gmail.com" ;
private static final String KEY_token ="xyz" ;

这些键将用于将请求的值与检查函数的值进行匹配,因此您应首先将它们重命名为与API源一样,否则检查函数将无法从任何请求中获取值 所以他们应该像这样:

These keys will be used to match the request's values with the check function's values so you should first rename them to be just like the API source otherwise the check function won't get the values from any request so they should be like so :

private static final String KEY_USERNAME ="username" ;
private static final String KEY_PASSWORD ="password" ;
private static final String KEY_EMAIL ="email" ;

希望这对您有帮助)

这篇关于尝试将Android Volley Post请求发送给Laravel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆