从 Android 向 Laravel 发送 JSON

Posted

技术标签:

【中文标题】从 Android 向 Laravel 发送 JSON【英文标题】:Send JSON from Android to Laravel 【发布时间】:2018-06-30 05:01:29 【问题描述】:

我正在尝试将 JSON 对象从 android 发送到 Laravel,但我得到了响应代码 405 请检查下面的代码。

发出请求的活动:

public class ConActivity extends AppCompatActivity

        protected void onCreate(Bundle savedInstanceState) 
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                new ConnectionTask().execute("http://192.168.100.25:8000/check");
        

        public class ConnectionTask extends AsyncTask<String, String, String> 

        @Override
        protected String doInBackground(String... strings) 
          JSONObject deviceInfo = getDeviceInfo();
          HttpURLConnection connection = null;
          BufferedReader reader = null;
          try 
              URL url = new URL(strings[0]);
              connection = (HttpURLConnection) url.openConnection();
              connection.setReadTimeout(15000);
              connection.setConnectTimeout(15000);
              connection.setRequestMethod("GET");
              connection.setDoInput(true);
              connection.setDoOutput(true);

              int responseCode=connection.getResponseCode();
              if (responseCode == HttpsURLConnection.HTTP_OK) 

                  BufferedReader in=new BufferedReader(new
                          InputStreamReader(
                          connection.getInputStream()));

                  StringBuffer sb = new StringBuffer("");
                  String line="";
                  while((line = in.readLine()) != null) 
                      sb.append(line);
                  
                  in.close();
                  return sb.toString();

              
              else 
                  return new String("false : " + responseCode);
              

           catch (MalformedURLException e) 
              e.printStackTrace();
           catch (IOException e) 
              e.printStackTrace();
           catch (Exception e) 
              e.printStackTrace();
           finally 
              if(connection != null)
                  connection.disconnect();
              
              if(reader != null)
                  try 
                      reader.close();
                   catch (IOException e) 
                      e.printStackTrace();
                  
              
          
          return null;
      

      @Override
      protected void onPostExecute(String s) 
          super.onPostExecute(s);
          tvOut.setText(s);
      

      private JSONObject getDeviceInfo()
          JSONObject json = new JSONObject();
          try 
              json.put("first_name", "John");
              json.put("last_name", "Doe");
           catch (JSONException e) 
              e.printStackTrace();
          

          return json;
      
      private String getPostDataString(JSONObject params) throws Exception 

          StringBuilder result = new StringBuilder();
          boolean first = true;

          Iterator<String> itr = params.keys();

          while(itr.hasNext())

              String key= itr.next();
              Object value = params.get(key);

              if (first)
                  first = false;
              else
                  result.append("&");

              result.append(URLEncoder.encode(key, "UTF-8"));
              result.append("=");
              result.append(URLEncoder.encode(value.toString(), "UTF-8"));

          
          return result.toString();
      
  

这是web.php中的路线:

Route::get('/check', [
        'uses' => 'DashboardController@check',
        'as'   => 'check'
    ]);

以及 DashboardController 的代码

class DashboardController extends Controller

    public function check()
    
        die(request());
    


请告诉我我在这里做错了什么。我的问题是在 Android 和 Laravel 之间交换 JSON 数组/对象。请指导我正确的方向。

【问题讨论】:

【参考方案1】:

405 表示您在请求中使用了错误的 http 动词。您的路线是一个 GET 请求,您可能是从 android 发布到它。

如果您在此路线之前定义了其他路线,那么您可能没有到达您认为由于路线匹配而导致的路线。

【讨论】:

路由和请求都使用了“GET”动词,但通过将两者都替换为“POST”解决了问题

以上是关于从 Android 向 Laravel 发送 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Websocket 向特定的 Android 设备发送消息

在 Vue.js 中使用 axios 向 Laravel API 发送获取请求

使用 laravel-push-notification 向 Android 发送推送通知

Laravel API - 使用 Firebase FCM 向 android 和 iOS 客户端应用程序发送通知

从外部站点向 Laravel 发送 POST 请求

如何从 laravel 向 expo 应用程序发送推送通知