无法从部署的bluemix node.js中检索响应。我的android xml,java代码和node.js代码如下。任何人都可以帮我解决这个问题
我的android xml代码:
<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>
我的java代码:
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();
}
}
}
});
}
}
我的node.js代码是:
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);
有谁可以帮我解决这个问题?
答案 0 :(得分:0)
在Node.js代码中,您应该使用request.query
。这将返回查询字符串的对象作为键值对。
答案 1 :(得分:-1)
作为替代方案,您可以使用Mobile Cloud SDK向Bluemix上的节点服务器发送REST请求。
Android SDK的设计使每个API都返回一个Bolts任务。这将帮助您更轻松地理解您的节点响应。