如何使用Laravel API创建和连接Android应用

多年来,Android应用程序市场已发生身临其境的变化。 它已成为个人和许多公司的主要信息和沟通来源。

这些应用程序需要强大的后端基础架构,才能将其数据同步到并执行功能。 这就是为什么许多专家级应用程序开发人员推荐混合使用Laravel Android来构建功能齐全但有用的应用程序的原因。

为您的android应用开发强大的后端的最佳方法之一是在执行大部分后端处理的云上使用Laravel API。

Laravel具有可靠的代码库,并为所有轻量级和企业级应用程序提供了优化的性能。

在本文中,我将首先向您展示如何使用Laravel创建REST API。 然后,我将解释如何创建一个可与Laravel REST API交互的android应用。

先决条件

就本博客而言,我假设您在Web服务器上安装了Laravel应用程序。 我的设置是。

对于Android

  • Android Studio
  • Android SDK

对于Laravel API

  • 实时网络服务器
  • Laravel /流明5.6
  • PHP 7.1
  • 的MySQL
  • Web服务器(用于测试的Apache,NGINX或集成PHP Web服务器)

在.env中设置数据库凭据

首先,将这些数据库凭据添加到应用程序公共根文件夹中的.env文件。

DB_CONNECTION =mysql
DB_HOST = 127.0 . 0.1
DB_PORT = 3306
DB_DATABASE = your.database.name 
DB_USERNAME = your.database.username 
DB_PASSWORD = your.database.password

创建迁移

现在,在成功连接到数据库之后,您必须为产品表开发迁移操作员。 一旦启动,请使用以下命令转到应用程序的根目录。

cd applications
cd <yourapplicationname>/public_html

进入应用程序文件夹后,键入以下命令以开发产品的迁移操作员

php artisan make:migration create_products_table

这将在database / migrations /文件夹内创建一个<date> _create_table_cars.php文件。 现在是时候编辑该文件并粘贴以下代码。

<?php

use Illuminate \ Support \ Facades \ Schema ;

use Illuminate \ Database \ Schema \ Blueprint ;

use Illuminate \ Database \ Migrations \ Migration ;



class CreateTableProducts extends Migration

 {

   /**

    * Run the migrations.

    *

    * @return void

    */

   public function up ()

    {

         Schema::create( 'products' , function (Blueprint $table)  {

           $table->increments( 'pid' );

           $table->string( 'name' );

           $table->decimal( 'price' );

           $table->text( 'description' );

           $table->timestamps();

       });

   }



   /**

    * Reverse the migrations.

    *

    * @return void

    */

   public function down ()

    {

       //

   }

}

既然迁移已经准备就绪,请运行以下命令来执行迁移。

php artisan migrate

下一步是将表架构迁移到数据库中。 通过单击启动数据库管理器转到数据库,并在表中填充虚拟数据。

创建模型

下一步是创建模型。 在终端中编写以下命令:

php artisan make:model Product

现在转到app / Product.php文件并添加以下代码:

<?php namespace App ;



use Illuminate \ Database \ Eloquent \ Model ;

class Product extends Model

 {

protected $guarded = [];

}


?>

创建控制器

现在数据库表已准备就绪,是时候开发控制器了。 在终端中键入以下命令。

php artisan make:controller ProductController

现在转到app / Http / controller / ProductController.php并粘贴以下代码

<?php

namespace App \ Http \ Controllers ;

use App \ Product ;

use App \ Http \ Controllers \ Controller ;

use Illuminate \ Http \ Request ;

use DB ;

class ProductController extends Controller {



public function createProduct (Request $request) {

    $product = Product::create($request->all());

    return response()->json($product);

}

public function updateProduct (Request $request, $id) {



    $product  = DB::table( 'products' )->where( 'pid' ,$request->input( 'pid' ))->get();

       $product->name = $request->input( 'name' );

       $product->price = $request->input( 'price' );

       $product->description = $request->input( 'description' );

       $product->save();

       $response[ "products" ] = $product;

       $response[ "success" ] = 1 ;

    return response()->json($response);

}  



public function deleteProduct ($id) {

    $product  = DB::table( 'products' )->where( 'pid' ,$request->input( 'pid' ))->get();

    $product->delete();

    return response()->json( 'Removed successfully.' );

}



public function index () {

    $products  = Product::all();

       $response[ "products" ] = $products;

       $response[ "success" ] = 1 ;

    return response()->json($response);

}

}

?>

现在是时候开发路线了。 让我们为创建,更新,删除和查看产品写路线。

打开routes / web.php并添加以下路由。

$router->post( 'product' , 'ProductController@createProduct' );   //for creating product

$router->get( 'product/{id}' , 'ProductController@updateProduct' ); //for updating product

$router->post( 'product/{id}' , 'ProductController@deleteProduct' );  // for deleting product

$router->get( 'product' , 'ProductController@index' ); // for retrieving product

现在,尝试通过登台URL访问所有产品。 为此,您必须转到应用程序并使用暂存URL启动应用程序。

您将看到JSON格式的数据

而已。 后端Laravel API已准备好在您的应用程序中部署。

现在,让我们继续开发一个Android应用程序,并使用API​​将其连接到我们的Laravel Server应用程序中。

创建Android应用程序

  • 下载并安装Android Studio和Android SDK。
  • 打开Android Studio并创建一个新项目。
  • 将活动类命名为MainScreenActivity。

编辑AndroidManifest.xml

打开您的AndroidManifest.xml文件,并将以下代码添加到清单标记中。 添加所有类和Internet连接权限。

< application

  android:allowBackup = "true"

  android:icon = "@mipmap/ic_launcher"

  android:label = "@string/app_name"

  android:roundIcon = "@mipmap/ic_launcher_round"

  android:supportsRtl = "true"

  android:theme = "@style/AppTheme" >

  < activity

      android:name = ".MainScreenActivity"

      android:label = "@string/app_name"

      android:theme = "@style/AppTheme.NoActionBar" >

      < intent-filter >

          < action android:name = "android.intent.action.MAIN" />



          < category android:name = "android.intent.category.LAUNCHER" />

      </ intent-filter >

  </ activity >



  <!-- All Product Activity -->

  < activity

      android:name = ".AllProductsActivity"

      android:label = "All Products" >

  </ activity >



  <!-- Add Product Activity -->

  < activity

      android:name = ".NewProductActivity"

      android:label = "Add New Product" >

  </ activity >



  <!-- Edit Product Activity -->

  < activity

      android:name = ".EditProductActivity"

      android:label = "Edit Product" >

  </ activity >

</ application >



<!--  Internet Permissions -->

< uses-permission android:name = "android.permission.INTERNET" />

< uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />

创建一个JSON解析器类

创建一个新的Java类并将其命名为JSONParser.java此类支持两个http请求方法GET和POST以从URL获取JSON。 将以下代码粘贴到此类中。

package com.example.arslan.restapi;



/**

* Created by Arslan.

*/



      import java.io.BufferedReader;

      import java.io.IOException;

      import java.io.InputStream;

      import java.io.InputStreamReader;

      import java.io.UnsupportedEncodingException;

      import java.util.List;



      import org.apache.http.HttpEntity;

      import org.apache.http.HttpResponse;

      import org.apache.http.NameValuePair;

      import org.apache.http.client.ClientProtocolException;

      import org.apache.http.client.entity.UrlEncodedFormEntity;

      import org.apache.http.client.methods.HttpGet;

      import org.apache.http.client.methods.HttpPost;

      import org.apache.http.client.utils.URLEncodedUtils;

      import org.apache.http.impl.client.DefaultHttpClient;

      import org.json.JSONException;

      import org.json.JSONObject;



      import android.util.Log;



public class JSONParser  {



  static InputStream is = null ;

  static JSONObject jObj = null ;

  static String json = "" ;



  // constructor

  public JSONParser ()  {



  }



  // function get json from url

  // by making HTTP POST or GET mehtod

  public JSONObject   makeHttpRequest (String url, String method,

                                    List<NameValuePair> params)  {



      // Making HTTP request

      try {



          // check for request method

          if (method == "POST" ){

              // request method is POST

              // defaultHttpClient

              DefaultHttpClient httpClient = new DefaultHttpClient();

              HttpPost httpPost = new HttpPost(url);

              httpPost.setEntity( new UrlEncodedFormEntity(params));



              HttpResponse httpResponse = httpClient.execute(httpPost);

              HttpEntity httpEntity = httpResponse.getEntity();

              is = httpEntity.getContent();



          } else if (method == "GET" ){

              // request method is GET

              DefaultHttpClient httpClient = new DefaultHttpClient();

              String paramString = URLEncodedUtils.format(params, "utf-8" );

              url += "?" + paramString;

              HttpGet httpGet = new HttpGet(url);



              HttpResponse httpResponse = httpClient.execute(httpGet);

              HttpEntity httpEntity = httpResponse.getEntity();

              is = httpEntity.getContent();

          }



      } catch (UnsupportedEncodingException e) {

          e.printStackTrace();

      } catch (ClientProtocolException e) {

          e.printStackTrace();

      } catch (IOException e) {

          e.printStackTrace();

      }



      try {

          BufferedReader reader = new BufferedReader( new InputStreamReader(

                  is, "iso-8859-1" ), 8 );

          StringBuilder sb = new StringBuilder();

          String line = null ;

          while ((line = reader.readLine()) != null ) {

              sb.append(line + "\n" );

          }

          is.close();

          json = sb.toString();

      } catch (Exception e) {

          Log.e( "Buffer Error" , "Error converting result " + e.toString());

      }



      // try parse the string to a JSON object

      try {

          jObj = new JSONObject(json);

      } catch (JSONException e) {

          Log.e( "JSON Parser" , "Error parsing data " + e.toString());

      }



      // return JSON String

      return jObj;



  }

}

创建主屏幕布局

现在,您必须在res / layout /中开发一个新的布局文件,并将其命名为main_screen.xml。该布局文件包含两个简单的按钮,用于查看所有产品并添加新产品

<?xml version="1.0" encoding="utf-8"?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

  android:layout_width = "fill_parent"

  android:layout_height = "fill_parent"

  android:orientation = "vertical"

  android:gravity = "center_horizontal" >



  <!--  Sample Dashboard screen with Two buttons -->

  <!--  Button to view all products screen -->

  < Button android:id = "@+id/btnViewProducts"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:text = "View Products"

      android:layout_marginTop = "25dip" />



  <!--  Button to create a new product screen -->

  < Button android:id = "@+id/btnCreateProduct"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:text = "Add New Products"

      android:layout_marginTop = "25dip" />



</ LinearLayout >

编辑主屏幕活动

打开您的主要活动类,即MainScreenActivity.java,并为main_screen.xml布局中提到的两个按钮编写单击事件。

package com.example.arslan.restapi;



import android.os.Bundle;

import android.view.View;

import android.view.Menu;

import android.view.MenuItem;

import android.app.Activity;

import android.content.Intent;

import android.widget.Button;



public class MainScreenActivity extends Activity  {



  Button btnViewProducts;

  Button btnNewProduct;



  @Override

  public void onCreate (Bundle savedInstanceState)  {

      super .onCreate(savedInstanceState);

      setContentView(R.layout.main_screen);

      // Buttons

      btnViewProducts = (Button) findViewById(R.id.btnViewProducts);

      btnNewProduct = (Button) findViewById(R.id.btnCreateProduct);

      // view products click event

      btnViewProducts.setOnClickListener( new View.OnClickListener() {

          @Override

          public void onClick (View view)  {

              // Launching All products Activity

              Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);

              startActivity(i);



          }

      });

      // view products click event

      btnNewProduct.setOnClickListener( new View.OnClickListener() {



          @Override

          public void onClick (View view)  {

              // Launching create new product activity

              Intent i = new Intent(getApplicationContext(), NewProductActivity.class);

              startActivity(i);



          }

      });

  }



  @Override

  public boolean onCreateOptionsMenu (Menu menu)  {

      // Inflate the menu; this adds items to the action bar if it is present.

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

      return true ;

  }



  @Override

  public boolean onOptionsItemSelected (MenuItem item)  {

      // Handle action bar item clicks here. The action bar will

      // automatically handle clicks on the Home/Up button, so long

      // as you specify a parent activity in AndroidManifest.xml.

      int id = item.getItemId();



      //noinspection SimplifiableIfStatement

      if (id == R.id.action_settings) {

          return true ;

      }



      return super .onOptionsItemSelected(item);

  }

}

在ListView中显示所有产品

现在,您必须在res / layout文件夹下开发两个xml文件,并将它们分别命名为all_products.xmllist_item.xml。

all_products.xml

<?xml version="1.0" encoding="utf-8"?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

  android:layout_width = "fill_parent"

  android:layout_height = "fill_parent"

  android:orientation = "vertical" >

  <!-- Main ListView

       Always give id value as list(@android:id/list)

  -->

  < ListView

      android:id = "@android:id/list"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content" />



</ LinearLayout >



List_item.xml



<?xml version="1.0" encoding="utf-8"?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

  android:layout_width = "fill_parent"

  android:layout_height = "wrap_content"

  android:orientation = "vertical" >



  <!-- Product id (pid) - will be HIDDEN - used to pass to other activity -->

  < TextView

      android:id = "@+id/pid"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:visibility = "gone" />



  <!-- Name Label -->

  < TextView

      android:id = "@+id/name"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:paddingTop = "6dip"

      android:paddingLeft = "6dip"

      android:textSize = "17dip"

      android:textStyle = "bold" />



</ LinearLayout >

创建所有产品活动

然后,您必须在Laravel android应用程序中开发一个新的类文件,并将其命名为AllProductsActivity.java 。 在下面的代码中,首先使用后台异步任务线程将请求发送到get_all_products.php文件。

从get_all_products.php获取JSON后,将对其进行解析并显示在列表视图中。 如果没有找到产品,则它将启动AddNewProductAcivity

package com.example.arslan.restapi;
/**

* Created by arslan.

*/



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import org.apache.http.NameValuePair;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;



import android.app.ListActivity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;



public class AllProductsActivity extends ListActivity  {



  // Progress Dialog

  private ProgressDialog pDialog;



  // Creating JSON Parser object

  JSONParser jParser = new JSONParser();



  ArrayList<HashMap<String, String>> productsList;



  // url to get all products list

  private static String url_all_products = "http://phplaravel-159494-460027.cloudwaysapps.com/product" ;



  // JSON Node names

  private static final String TAG_SUCCESS = "success" ;

  private static final String TAG_PRODUCTS = "products" ;

  private static final String TAG_PID = "pid" ;

  private static final String TAG_NAME = "name" ;



  // products JSONArray

  JSONArray products = null ;



  @Override

  public void onCreate (Bundle savedInstanceState)  {

      super .onCreate(savedInstanceState);

      setContentView(R.layout.all_products);



      // Hashmap for ListView

      productsList = new ArrayList<HashMap<String, String>>();



      // Loading products in Background Thread

      new LoadAllProducts().execute();



      // Get listview

      ListView lv = getListView();



      // on seleting single product

      // launching Edit Product Screen

      lv.setOnItemClickListener( new OnItemClickListener() {



          @Override

          public void onItemClick (AdapterView<?> parent, View view,

                                  int position, long id)  {

              // getting values from selected ListItem

              String pid = ((TextView) view.findViewById(R.id.pid)).getText()

                      .toString();



              // Starting new intent

              Intent in = new Intent(getApplicationContext(),

                      EditProductActivity.class);

              // sending pid to next activity

              in.putExtra(TAG_PID, pid);



              // starting new activity and expecting some response back

              startActivityForResult(in, 100 );

          }

      });



  }



  // Response from Edit Product Activity

  @Override

  protected void onActivityResult ( int requestCode, int resultCode, Intent data)  {

      super .onActivityResult(requestCode, resultCode, data);

      // if result code 100

      if (resultCode == 100 ) {

          // if result code 100 is received

          // means user edited/deleted product

          // reload this screen again

          Intent intent = getIntent();

          finish();

          startActivity(intent);

      }



  }



  /**

   * Background Async Task to Load all product by making HTTP Request

   * */

  class LoadAllProducts extends AsyncTask < String , String , String >  {



      /**

       * Before starting background thread Show Progress Dialog

       * */

      @Override

      protected void onPreExecute ()  {

          super .onPreExecute();

          pDialog = new ProgressDialog(AllProductsActivity. this );

          pDialog.setMessage( "Loading products. Please wait..." );

          pDialog.setIndeterminate( false );

          pDialog.setCancelable( false );

          pDialog.show();

      }



      /**

       * getting All products from url

       * */

      protected String doInBackground (String... args)  {

          // Building Parameters

          List<NameValuePair> params = new ArrayList<NameValuePair>();

          // getting JSON string from URL

          JSONObject json = jParser.makeHttpRequest(url_all_products, "GET" , params);



          // Check your log cat for JSON reponse

          Log.d( "All Products: " , json.toString());



          try {

              // Checking for SUCCESS TAG

              int success = 1 ;



              if (success == 1 ) {

                  // products found

                  // Getting Array of Products

                  products = json.getJSONArray(TAG_PRODUCTS);



                  // looping through All Products

                  for ( int i = 0 ; i < products.length(); i++) {

                      JSONObject c = products.getJSONObject(i);



                      // Storing each json item in variable

                      String id = c.getString(TAG_PID);

                      String name = c.getString(TAG_NAME);



                      // creating new HashMap

                      HashMap<String, String> map = new HashMap<String, String>();



                      // adding each child node to HashMap key => value

                      map.put(TAG_PID, id);

                      map.put(TAG_NAME, name);



                      // adding HashList to ArrayList

                      productsList.add(map);

                  }

              } else {

                  // no products found

                  // Launch Add New product Activity

                  Intent i = new Intent(getApplicationContext(),

                          NewProductActivity.class);

                  // Closing all previous activities

                  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                  startActivity(i);

              }

          } catch (JSONException e) {

              e.printStackTrace();

          }



          return null ;

      }



      /**

       * After completing background task Dismiss the progress dialog

       * **/

      protected void onPostExecute (String file_url)  {

          // dismiss the dialog after getting all products

          pDialog.dismiss();

          // updating UI from Background Thread

          runOnUiThread( new Runnable() {

              public void run ()  {

                  /**

                   * Updating parsed JSON data into ListView

                   * */

                  ListAdapter adapter = new SimpleAdapter(

                          AllProductsActivity. this , productsList,

                          R.layout.list_item, new String[] { TAG_PID,

                          TAG_NAME},

                          new int [] { R.id.pid, R.id.name });

                  // updating listview

                  setListAdapter(adapter);

              }

          });



      }



  }

}

添加新产品(写)

您还必须开发一个新活动,以将新产品添加到MySQL数据库。 为此,您需要开发一个简单的表单,其中包含用于产品名称,价格和描述字段的EditText。

然后,创建一个新的xml文件并将其命名为add_product.xml,并粘贴以下代码以创建一个简单的表单。

<?xml version="1.0" encoding="utf-8"?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

  android:layout_width = "match_parent"

  android:layout_height = "match_parent"

  android:orientation = "vertical" >



  <!-- Name Label -->

  < TextView android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:text = "Product Name"

      android:paddingLeft = "10dip"

      android:paddingRight = "10dip"

      android:paddingTop = "10dip"

      android:textSize = "17dip" />



  <!-- Input Name -->

  < EditText android:id = "@+id/inputName"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:layout_margin = "5dip"

      android:layout_marginBottom = "15dip"

      android:singleLine = "true" />



  <!-- Price Label -->

  < TextView android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:text = "Price"

      android:paddingLeft = "10dip"

      android:paddingRight = "10dip"

      android:paddingTop = "10dip"

      android:textSize = "17dip" />



  <!-- Input Price -->

  < EditText android:id = "@+id/inputPrice"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:layout_margin = "5dip"

      android:layout_marginBottom = "15dip"

      android:singleLine = "true"

      android:inputType = "numberDecimal" />



  <!-- Description Label -->

  < TextView android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:text = "Description"

      android:paddingLeft = "10dip"

      android:paddingRight = "10dip"

      android:paddingTop = "10dip"

      android:textSize = "17dip" />



  <!-- Input description -->

  < EditText android:id = "@+id/inputDesc"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:layout_margin = "5dip"

      android:layout_marginBottom = "15dip"

      android:lines = "4"

      android:gravity = "top" />



  <!-- Button Create Product -->

  < Button android:id = "@+id/btnCreateProduct"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content"

      android:text = "Create Product" />



</ LinearLayout >

创建新产品活动

现在为New Activity类编写代码,以将新产品插入MySQL数据库。 为此,您必须创建一个类文件并将其命名为NewProductActivity.java,然后键入以下代码。 在下面的代码中,首先从EditText表单中读取新产品数据,并将其格式化为基本参数。 您必须发送请求到create_product.php以通过HTTP发布创建新产品。

从create_product.php获得JSON响应后,如果成功位结果为1,则它将使用新添加的产品刷新列表视图。

package com.example.arslan.restapi;



/**

* Created by Arslan.

*/



import java.util.ArrayList;

import java.util.List;



import org.apache.http.NameValuePair;

import org.apache.http.message.BasicNameValuePair;

import org.json.JSONException;

import org.json.JSONObject;



import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;



public class NewProductActivity extends Activity  {



  // Progress Dialog

  private ProgressDialog pDialog;



  JSONParser jsonParser = new JSONParser();

  EditText inputName;

  EditText inputPrice;

  EditText inputDesc;



  // url to create new product

  private static String url_create_product = "http://phplaravel-159494-460027.cloudwaysapps.com/product" ;



  // JSON Node names

  private static final String TAG_SUCCESS = "success" ;



  @Override

  public void onCreate (Bundle savedInstanceState)  {

      super .onCreate(savedInstanceState);

      setContentView(R.layout.add_product);



      // Edit Text

      inputName = (EditText) findViewById(R.id.inputName);

      inputPrice = (EditText) findViewById(R.id.inputPrice);

      inputDesc = (EditText) findViewById(R.id.inputDesc);



      // Create button

      Button btnCreateProduct = (Button) findViewById(R.id.btnCreateProduct);



      // button click event

      btnCreateProduct.setOnClickListener( new View.OnClickListener() {



          @Override

          public void onClick (View view)  {

              // creating new product in background thread

              new CreateNewProduct().execute();

          }

      });

  }



  /**

   * Background Async Task to Create new product

   * */

  class CreateNewProduct extends AsyncTask < String , String , String >  {



      /**

       * Before starting background thread Show Progress Dialog

       * */

      @Override

      protected void onPreExecute ()  {

          super .onPreExecute();

          pDialog = new ProgressDialog(NewProductActivity. this );

          pDialog.setMessage( "Creating Product.." );

          pDialog.setIndeterminate( false );

          pDialog.setCancelable( true );

          pDialog.show();

      }



      /**

       * Creating product

       * */

      protected String doInBackground (String... args)  {

          String name = inputName.getText().toString();

          String price = inputPrice.getText().toString();

          String description = inputDesc.getText().toString();



          // Building Parameters

          List<NameValuePair> params = new ArrayList<NameValuePair>();

          params.add( new BasicNameValuePair( "name" , name));

          params.add( new BasicNameValuePair( "price" , price));

          params.add( new BasicNameValuePair( "description" , description));



          // getting JSON Object

          // Note that create product url accepts POST method

          JSONObject json = jsonParser.makeHttpRequest(url_create_product,

                  "POST" , params);



          // check log cat fro response

          Log.d( "Create Response" , json.toString());



          // check for success tag

          try {

              int success = json.getInt(TAG_SUCCESS);



              if (success == 1 ) {

                  // successfully created product

                  Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);

                  startActivity(i);



                  // closing this screen

                  finish();

              } else {

                  // failed to create product

              }

          } catch (JSONException e) {

              e.printStackTrace();

          }



          return null ;

      }



      /**

       * After completing background task Dismiss the progress dialog

       * **/

      protected void onPostExecute (String file_url)  {

          // dismiss the dialog once done

          pDialog.dismiss();

    

  }

}

创建编辑产品布局

导航到文件AllProductsActivity.java ad,您将看到在其列表视图中,一旦选择了单个项目,我们将启动EditProductAcivity.java。 因此,创建一个名为edit_product.xml的 xml文件,并开发一个与create_product.xml相同的表单。

<?xml version="1.0" encoding="utf-8"?>

< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"

  android:layout_width = "fill_parent"

  android:layout_height = "fill_parent"

  android:orientation = "vertical" >

  <!-- Main ListView

       Always give id value as list(@android:id/list)

  -->

  < ListView

      android:id = "@android:id/list"

      android:layout_width = "fill_parent"

      android:layout_height = "wrap_content" />



</ LinearLayout >

创建编辑产品活动

现在,您必须为edit_product.xml创建一个类文件,并将其命名为EditProductActivity.java,并在其中添加以下代码。 在此代码中,从列表视图发送的意图中读取了第一个产品ID( pid )。 向get_product_details.php发送请求,并以json格式获取产品详细信息后,我们解析json并显示在EditText中。

在表单中显示产品数据后,如果用户单击“保存更改”按钮,则对update_product.php发出另一个HTTP请求以存储更新的产品数据。

同时,如果用户选择“删除产品按钮”,则对delete_product.php发出HTTP请求,并从MySQL数据库中删除产品,然后刷新具有新产品列表的listview。

package com.example.arslan.restapi;



/**

* Created by Arslan
*/



import java.util.ArrayList;

import java.util.List;



import org.apache.http.NameValuePair;

import org.apache.http.message.BasicNameValuePair;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;



import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;



public class EditProductActivity extends Activity  {



  EditText txtName;

  EditText txtPrice;

  EditText txtDesc;

  EditText txtCreatedAt;

  Button btnSave;

  Button btnDelete;



  String pid;



  // Progress Dialog

  private ProgressDialog pDialog;



  // JSON parser class

  JSONParser jsonParser = new JSONParser();



  // single product url

  private static final String url_product_detials = "http://phplaravel-159494-460027.cloudwaysapps.com/product/1" ;



  // url to update product

  private static final String url_update_product = "http://phplaravel-159494-460027.cloudwaysapps.com/product/1" ;



  // url to delete product

  private static final String url_delete_product = "http://phplaravel-159494-460027.cloudwaysapps.com/product/1" ;



  // JSON Node names

  private static final String TAG_SUCCESS = "success" ;

  private static final String TAG_PRODUCT = "product" ;

  private static final String TAG_PID = "pid" ;

  private static final String TAG_NAME = "name" ;

  private static final String TAG_PRICE = "price" ;

  private static final String TAG_DESCRIPTION = "description" ;



  @Override

  public void onCreate (Bundle savedInstanceState)  {

      super .onCreate(savedInstanceState);

      setContentView(R.layout.edit_product);



      // save button

      btnSave = (Button) findViewById(R.id.btnSave);

      btnDelete = (Button) findViewById(R.id.btnDelete);



      // getting product details from intent

      Intent i = getIntent();



      // getting product id (pid) from intent

      pid = i.getStringExtra(TAG_PID);



      // Getting complete product details in background thread

      new GetProductDetails().execute();



      // save button click event

      btnSave.setOnClickListener( new View.OnClickListener() {



          @Override

          public void onClick (View arg0)  {

              // starting background task to update product

              new SaveProductDetails().execute();

          }

      });



      // Delete button click event

      btnDelete.setOnClickListener( new View.OnClickListener() {



          @Override

          public void onClick (View arg0)  {

              // deleting product in background thread

              new DeleteProduct().execute();

          }

      });



  }



  /**

   * Background Async Task to Get complete product details

   * */

  class GetProductDetails extends AsyncTask < String , String , String >  {



      /**

       * Before starting background thread Show Progress Dialog

       * */

      @Override

      protected void onPreExecute ()  {

          super .onPreExecute();

          pDialog = new ProgressDialog(EditProductActivity. this );

          pDialog.setMessage( "Loading product details. Please wait..." );

          pDialog.setIndeterminate( false );

          pDialog.setCancelable( true );

          pDialog.show();

      }



      /**

       * Getting product details in background thread

       * */

      protected String doInBackground (String... params)  {



          // updating UI from Background Thread

          runOnUiThread( new Runnable() {

              public void run ()  {

                  // Check for success tag

                  int success;

                  try {

                      // Building Parameters

                      List<NameValuePair> params = new ArrayList<NameValuePair>();

                      params.add( new BasicNameValuePair( "pid" ,pid));



                      // getting product details by making HTTP request

                      // Note that product details url will use GET request

                      JSONObject json = jsonParser.makeHttpRequest(

                              url_product_detials, "POST" , params);



                      // check your log for json response

                      Log.d( "Single Product Details" , json.toString());



                      // json success tag

                      success = json.getInt(TAG_SUCCESS);

                      if (success == 1 ) {

                          // successfully received product details

                          JSONArray productObj = json

                                  .getJSONArray(TAG_PRODUCT); // JSON Array



                          // get first product object from JSON Array

                          JSONObject product = productObj.getJSONObject( 0 );



                          // product with this pid found

                          // Edit Text

                          txtName = (EditText) findViewById(R.id.inputName);

                          txtPrice = (EditText) findViewById(R.id.inputPrice);

                          txtDesc = (EditText) findViewById(R.id.inputDesc);



                          // display product data in EditText

                          txtName.setText(product.getString(TAG_NAME));

                          txtPrice.setText(product.getString(TAG_PRICE));

                          txtDesc.setText(product.getString(TAG_DESCRIPTION));



                      } else {

                          // product with pid not found

                      }

                  } catch (JSONException e) {

                      e.printStackTrace();

                  }

              }

          });



          return null ;

      }



      /**

       * After completing background task Dismiss the progress dialog

       * **/

      protected void onPostExecute (String file_url)  {

          // dismiss the dialog once got all details

          pDialog.dismiss();

      }

  }



  /**

   * Background Async Task to  Save product Details

   * */

  class SaveProductDetails extends AsyncTask < String , String , String >  {



      /**

       * Before starting background thread Show Progress Dialog

       * */

      @Override

      protected void onPreExecute ()  {

          super .onPreExecute();

          pDialog = new ProgressDialog(EditProductActivity. this );

          pDialog.setMessage( "Saving product ..." );

          pDialog.setIndeterminate( false );

          pDialog.setCancelable( true );

          pDialog.show();

      }



      /**

       * Saving product

       * */

      protected String doInBackground (String... args)  {



          // getting updated data from EditTexts

          String name = txtName.getText().toString();

          String price = txtPrice.getText().toString();

          String description = txtDesc.getText().toString();



          // Building Parameters

          List<NameValuePair> params = new ArrayList<NameValuePair>();

          params.add( new BasicNameValuePair(TAG_PID, pid));

          params.add( new BasicNameValuePair(TAG_NAME, name));

          params.add( new BasicNameValuePair(TAG_PRICE, price));

          params.add( new BasicNameValuePair(TAG_DESCRIPTION, description));



          // sending modified data through http request

          // Notice that update product url accepts POST method

          JSONObject json = jsonParser.makeHttpRequest(url_update_product,

                  "POST" , params);



          // check json success tag

          try {

              int success = json.getInt(TAG_SUCCESS);



              if (success == 1 ) {

                  // successfully updated

                  Intent i = getIntent();

                  // send result code 100 to notify about product update

                  setResult( 100 , i);

                  finish();

              } else {

                  // failed to update product

              }

          } catch (JSONException e) {

              e.printStackTrace();

          }



          return null ;

      }



      /**

       * After completing background task Dismiss the progress dialog

       * **/

      protected void onPostExecute (String file_url)  {

          // dismiss the dialog once product uupdated

          pDialog.dismiss();

      }

  }



  /*****************************************************************

   * Background Async Task to Delete Product

   * */

  class DeleteProduct extends AsyncTask < String , String , String >  {



      /**

       * Before starting background thread Show Progress Dialog

       * */

      @Override

      protected void onPreExecute ()  {

          super .onPreExecute();

          pDialog = new ProgressDialog(EditProductActivity. this );

          pDialog.setMessage( "Deleting Product..." );

          pDialog.setIndeterminate( false );

          pDialog.setCancelable( true );

          pDialog.show();

      }



      /**

       * Deleting product

       * */

      protected String doInBackground (String... args)  {



          // Check for success tag

          int success;

          try {

              // Building Parameters

              List<NameValuePair> params = new ArrayList<NameValuePair>();

              params.add( new BasicNameValuePair( "pid" , pid));



              // getting product details by making HTTP request

              JSONObject json = jsonParser.makeHttpRequest(

                      url_delete_product, "POST" , params);



              // check your log for json response

              Log.d( "Delete Product" , json.toString());



              // json success tag

              success = json.getInt(TAG_SUCCESS);

              if (success == 1 ) {

                  // product successfully deleted

                  // notify previous activity by sending code 100

                  Intent i = getIntent();

                  // send result code 100 to notify about product deletion

                  setResult( 100 , i);

                  finish();

              }

          } catch (JSONException e) {

              e.printStackTrace();

          }



          return null ;

      }



      /**

       * After completing background task Dismiss the progress dialog

       * **/

      protected void onPostExecute (String file_url)  {

          // dismiss the dialog once product deleted

          pDialog.dismiss();

      }

  }

}

最后的话

在本文中,我演示了通过Laravel API进行的Android App连接。 本教程篇幅很长,在构建Laravel android应用程序时可能会出现一些错误。 因此,我建议您重新检查代码,因为它肯定会消除这些错误。

如果您在任何类型的开发项目中需要帮助,我也可以为您提供有关项目的咨询。 我是最受好评的自由职业者。 您可以直接在 Upwork 上雇用我 您也可以在 Freelancer 上雇用我

如果您有任何评论,问题或建议,请随时在下面的评论部分中发布它们!

From: https://hackernoon.com/how-to-create-and-connect-android-app-with-laravel-api-j3dl36is

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值