繁体   English   中英

试图将Android排球发送请求发送到Laravel

[英]Trying to send android volley post request to Laravel

我使用laravel 5.1进行数据库连接并将post请求表单发送到laravel ..但异常显示“服务器错误”

它是我的Android代码: -

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 routes.php

<?php

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

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 Token中必须传递,所以你自己正在使用你没有传递它的post方法并且它缺少你的请求所以解决这个问题的最简单方法是向你的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代码中:

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源,否则检查函数将不会从任何请求中获取值,因此它们应如下所示:

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

我希望这能帮到您 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM