从android到Nodejs的POST请求

时间:2017-11-27 13:54:21

标签: android json node.js android-asynctask httpurlconnection

我正在开发这个程序,我有一个使用Nodejs服务器的Android应用程序。主机是 - https://rocky-thicket-82184.herokuapp.com。 现在,我试图发送和接收邮件请求。但似乎没有  工作。 在服务器端我得到一个错误:不能GET /。 在客户端我得到:错误exeption https://rocky-thicket-82184.herokuapp.com

我找不到问题,我觉得我错过了什么......

这是我的Android mainActivity.java:

package com.example.shanijoffe.hungry_monkey;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.JsonReader;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.os.AsyncTask;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.stormpath.sdk.Stormpath;
import com.stormpath.sdk.StormpathConfiguration;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.net.ssl.HttpsURLConnection;

import cz.msebera.android.httpclient.Header;
import cz.msebera.android.httpclient.HttpResponse;
import cz.msebera.android.httpclient.NameValuePair;
import cz.msebera.android.httpclient.client.ClientProtocolException;
import cz.msebera.android.httpclient.client.HttpClient;
import cz.msebera.android.httpclient.client.entity.UrlEncodedFormEntity;
import cz.msebera.android.httpclient.client.methods.HttpPost;
import cz.msebera.android.httpclient.impl.client.DefaultHttpClient;
import cz.msebera.android.httpclient.message.BasicNameValuePair;

import static com.loopj.android.http.AsyncHttpClient.log;

public class MainActivity extends AppCompatActivity
{

    EditText user_name_edit;
    EditText password_edit;
    Button loginButton;
    String user;
    String user_pass;
    private static final String TAG = "MyActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        user_name_edit=(EditText)findViewById(R.id.txt_usrname);
        password_edit=(EditText)findViewById(R.id.txt_password);
        loginButton=(Button)findViewById(R.id.btn_login);

        Log.i(TAG,"before connection");

    }




    public void OnClick(final View view) {
        view.setEnabled(false);
        user=user_name_edit.getText().toString();
        user_pass=password_edit.getText().toString();
        new SendPostRequest().execute();
//
//


    }




    public class SendPostRequest extends AsyncTask<String, Void, String>
    {

        String user_name=user_name_edit.getText().toString();
        String user_pass=password_edit.getText().toString();
        protected void onPreExecute(){}

        protected String doInBackground(String... arg0) {

            try {
                Log.e("MainActivity", "in SendPostRequest  ");
                URL url = new URL("https://rocky-thicket-82184.herokuapp.com");

                InputStream inp = (InputStream) url.getContent();
                Log.e("stream",inp.toString());
                JSONObject postDataParams = new JSONObject();
                postDataParams.put("username", user);
                postDataParams.put("password", user_pass);
                Log.e("params", postDataParams.toString());
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(15000 /* milliseconds */);
                conn.setConnectTimeout(15000 /* milliseconds */);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                OutputStream os = conn.getOutputStream();
                int responseCode;
                try (BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"))) {
                    String encoded_string = getPostDataString(postDataParams);
                    Log.e("encoded", encoded_string);
                    //writer.write(getPostDataString(postDataParams));
                    writer.write(postDataParams.toString());
                    writer.flush();
                    writer.close();
                }
                os.close();

                responseCode = conn.getResponseCode();

                if (responseCode == HttpsURLConnection.HTTP_OK) {

                    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    StringBuffer sb = new StringBuffer("");
                    String line = "";

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

                        sb.append(line);
                        break;
                    }

                    in.close();
                    Log.i("MainActivty",sb.toString());
                    return sb.toString();

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

        }
            catch (Exception e)
            {
                return new String("Exception: " + e.getMessage());
            }


        }

        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(getApplicationContext(), result,
                    Toast.LENGTH_LONG).show();

        }
        public 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();
        }
    }
}

这里是nodejs代码:

var express=require('express');
var bodyParser=require('body-parser');
var app=express();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.get('/',function(req,res){
    res.sendFile(__dirname + '/index.html');
});
app.post('/',function(req,res){
    console.log(req.body);
    if (!req.body) 
        return res.sendStatus(400)
    res.send('welcome, ' + req.body.user)
});

app.listen(process.env.PORT || 3000)

任何人都可以看看,看看他们是否可以提供帮助? 非常感谢:)

0 个答案:

没有答案