Am not able to retrieve response from the bluemix deployed node.js. My android xml, java code and node.js code is given below.Can anyone help me in solving this
My android xml code:
<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="#ffffff"
tools:context="com.example.rest.MainActivity" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:orientation="vertical" >
<TextView
android:id="@+id/textreg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:paddingLeft="20dp"
android:text="Register here"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#0b84aa"
android:textSize="25sp"
android:typeface="serif" />
<EditText
android:id="@+id/editTextreg5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Full Name"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="20dp"
android:textColor="#000000"
android:textSize="20dp"
android:inputType="textPersonName" />
<EditText
android:id="@+id/editTextreg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Short Id @ibm.com"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="20dp"
android:textColor="#000000"
android:textSize="20dp"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/editTextreg2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Password"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
android:textColor="#000000"
android:textSize="20dp"
android:inputType="textPassword" />
<Button
android:id="@+id/buttonreg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
android:textColor="#0b84aa"
android:textStyle="bold"
android:text="Register" />
</LinearLayout>
And My java code:
package com.example.rest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONObject;
import org.json.JSONException;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.apache.http.Header;
import android.support.v7.app.ActionBarActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
String url = "http://mobilefeedbackform.mybluemix.net/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button breg1 = (Button) findViewById(R.id.buttonreg);
breg1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final EditText Name =(EditText) findViewById(R.id.editTextreg5);
final EditText Email =(EditText) findViewById(R.id.editTextreg);
final EditText Passwd =(EditText) findViewById(R.id.editTextreg2);
if(Name.getText().toString().length()==0)
{
Toast.makeText(MainActivity.this,
"Please enter Name", Toast.LENGTH_LONG)
.show();
return;
}
else if(Email.getText().toString().length()==0)
{
Toast.makeText(MainActivity.this,
"Please enter EmailId", Toast.LENGTH_LONG)
.show();
return;
}
else if(Passwd.getText().toString().length()==0)
{
Toast.makeText(MainActivity.this,
"Please enter Password", Toast.LENGTH_LONG)
.show();
return;
}
else
{
String result = null;
String nametxt = Name.getText().toString();
String emailtxt = Email.getText().toString();
String passwdtxt = Passwd.getText().toString();
//this is the route of your Node.js service on Bluemix
//String yourNodeJsBluemixRoute = "mobilefeedbackform.mybluemix.net";//http://mobilefeedbackform.mybluemix.net/
String url = "http://mobilefeedbackform.mybluemix.net/";
// These are just example strings, you can use your own here
Toast.makeText(MainActivity.this,
"Before sending "+ nametxt + emailtxt + passwdtxt, Toast.LENGTH_LONG)
.show();
// Create necessary objects
HttpClient httpClient = new DefaultHttpClient();
try
{
Toast.makeText(MainActivity.this,
"Inside try ", Toast.LENGTH_LONG)
.show();
//httpResponse = http.get(RESTSERVICEURI + "/?deviceid=" + deviceId + "&latitude=" + String.valueOf(gps.getLatitude()) + "&longitude=" + String.valueOf(gps.getLongitude()));
HttpGet httpGet = new HttpGet(url+"?name=" + nametxt + "&email=" + emailtxt + "&passwd=" + passwdtxt);
Toast.makeText(MainActivity.this,
"After sending ", Toast.LENGTH_LONG)
.show();
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
Toast.makeText(MainActivity.this,
"Got response ", Toast.LENGTH_LONG)
.show();
if (httpEntity != null)
{
Toast.makeText(MainActivity.this,
"Inside If ", Toast.LENGTH_LONG)
.show();
InputStream inputstream = httpEntity.getContent();
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(inputstream));
StringBuilder stringbuilder = new StringBuilder();
String currentline = null;
while ((currentline = bufferedreader.readLine()) != null)
{
Toast.makeText(MainActivity.this,
"Inside while ", Toast.LENGTH_LONG)
.show();
stringbuilder.append(currentline + "\n");
}
result = stringbuilder.toString();
inputstream.close();
}
return;
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
});
}
}
and my node.js code is:
var express = require('express');
app = express();
var http = require('http');
var url = require('url');
var PORT = (process.env.VCAP_APP_PORT || 8000);
var HOST = (process.env.VCAP_APP_HOST || 'localhost');
var queryData = null;
http.createServer(function(request, response) {
queryData = url.parse(request.url, true).query;
console.log("Hai3");
//respond to the client
response.write("Got the GET request");
response.end();
}).listen(PORT, HOST);
Can anyone help me in this issue?
In your Node.js code you should be using
request.query
. This will return an object of your query string as a key value pair.As an alternative, you can use the Mobile Cloud SDK to send REST requests to your Node server on Bluemix.
The Android SDK was designed so that every API returns a Bolts task. This will help you understand your Node responses with much less hassle.