Last updated on January 8th, 2020 at 10:15 pm
In this post we are going to create a simple Android application in which we can send data to PHP webservice and get response from that service. In my last post i explain you how to read data from webservice and display in our android application. Today most of application used internet to send information and get updates from server.
A brief introduction what we are going to create. In this app first we create a EditText field where we write some thing and one button. When user press button we send EditText field data to service where we get posted data from application and we also perform (CRUD) operation but i simply echo that data and return same data as a response.
Start your New Android Project
1. Create a new project in Eclipse from File ⇒ New ⇒ Android Application Project. I had left my main activity name as MainActivity.java .
2. As we are Send and Recieve the JSON by making HTTP calls, we need to add INTERNET permission in our AndroidManifest.xml file. Open AndroidManifest.xml and add the following permission.
<uses-permission android:name="android.permission.INTERNET"/>
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.rest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.rest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
3. Now open your activity_main.xml inside res ⇒ layout folder and create a EditText and button through which we can write and send data to webservice. And display result.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="132dp" android:ems="10" android:hint="@string/hint" android:singleLine="true" > <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText1" android:layout_centerHorizontal="true" android:layout_marginTop="70dp" android:text="@string/send" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="51dp" android:text="Send Data to Server" android:textAppearance="?android:attr/textAppearanceLarge" /> </RelativeLayout>
4. Now open your MainActivity.java inside src ⇒MainActivity.java. In this file we send data to webservice and get response note that i also use some extra jar file (httpclient-4.1-beta1.jar) to make my app work .
package com.rest; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { String name; Button button; // define url public static String URL = "<YOUR_API_LINK>"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub new AsyncTaskPayment().execute(); } }); } private class AsyncTaskPayment extends AsyncTask<String, Void, Void> { private final HttpClient Client = new DefaultHttpClient(); private String Content; private String Error = null; private final String TAG = null; private ProgressDialog Dialog = new ProgressDialog(MainActivity.this); @Override protected void onPreExecute() { Dialog.setMessage("Wait.."); Dialog.show(); Log.e(TAG, "------------------------------------- Here"); } protected Void doInBackground(String... urls) { try { HttpPost httppost = new HttpPost(URL); // Field EditText name = (EditText) findViewById(R.id.editText1); String nm = name.getText().toString(); JSONObject jObject = new JSONObject(); jObject.put("name", nm); MultipartEntity se = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); se.addPart("request", new StringBody(jObject.toString())); httppost.setEntity(se); HttpResponse resp = Client.execute(httppost); Content = EntityUtils.toString(resp.getEntity()); Log.e("Response", "--------------------------------" + Content); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub Dialog.dismiss(); // Log.e("ERROR", "--------------------------------" + Content); Toast.makeText(getBaseContext(), Content, Toast.LENGTH_LONG).show(); } } @Override protected void onStop() { super.onStop(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
In above java code i create a AsyncTask to run this process and inside i call DefaultHttpClient() and call HttpPost() to send data in post method and create json object and pass my EditText field data to webservice. And data is send to server we get some response and convert that response to string using EntityUtils and save it to string variable.
Content = EntityUtils.toString(resp.getEntity());
Import jar to your project
Right click on your project folder inside eclipse ⇒ Build Path ⇒Add External Archives ⇒Browser external jar you want to use and select them. Now again right click on your project and go to Properties ⇒ Java Build Path ⇒ Order and Export.
PHP WebService
<?php $decode = json_decode($_REQUEST['request']); $json = $decode->name; header('Content-type: application/json'); echo json_encode($json); ?>
This is simple php code to return the get data.
Now your application is ready to test.