Post method from android doesn't work

2019-07-29 03:35发布

So, I'm trying to make a login activity. It uses database from mySql so I made a php webservice 1login.php. Then I have a JSONParser class with method makeHttpRequest(url,method,params) and a LoginActivity class. But there is a problem. I can not send the params to the webservice, but when I tried with GET method, it worked(with some problem with the char '@'). I want to find out how to use the Post method. Here are the codes:

PHP: (it works well, so I don't think the problem is here)

<?php

include "0conn.php";
$email =$_POST["email"];
$heslo =$_POST["heslo"];
$pass=sha1($heslo);
$query = mysqli_query($conn,"SELECT jmeno,email FROM users WHERE email='$email' AND heslo='$pass'");
$res=array();
$response=array();
if(mysqli_num_rows($query)==1){
$result=mysqli_fetch_array($query);
$res["vysledek"]=1;
$res["email"]=$result["email"];
$res["jmeno"]=$result["jmeno"];
}
else  $res["vysledek"]=0;
$response[]=$res;
mysqli_free_result($query);
echo json_encode($response);
?>

The JSONParser class:

package com.thevnkid93.ucebnice;


    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.HttpClient;
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.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.R.integer;
import android.os.AsyncTask;
import android.util.Log;

    public class JSONParser{

        static InputStream is = null;
        static JSONObject jObj = null;
        static JSONArray jArr=null;
        static String json = "";




        // function get json from url
        // by making HTTP POST or GET method
        public static JSONArray makeHttpRequest(String url, String method,
                List<NameValuePair> params) {

            // Making HTTP request
            try {
                // check for request method
                if(method.equals("POST")){
                    // request method is POST
                    // defaultHttpClient

                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(url);
                    httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8"));

                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();

                }else if(method.equals("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 {
                jArr = new JSONArray(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }
            // return JSON String (Array)
            return jArr;
        }


}

and the LoginActivity class:

package com.thevnkid93.ucebnice;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;

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.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity{

    EditText e1,e2;
    Button b1,b2;
    List<NameValuePair>infoPost=new ArrayList<NameValuePair>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_layout);
        e1 = (EditText)findViewById(R.id.login_e1);
        e2 = (EditText)findViewById(R.id.login_e2);
        b1 = (Button)findViewById(R.id.login_b1);
        b2 = (Button)findViewById(R.id.login_b2);

        b1.setOnClickListener(new OnClickListener(){

            public void onClick(View arg0){
                    int vys=0; 
                    String email=e1.getText().toString();
                    String heslo=e2.getText().toString();
                    LoadInfo loadi=new LoadInfo();
                    try {
                        vys=loadi.execute(email,heslo).get();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (ExecutionException e) {
                        Toast.makeText(LoginActivity.this, "xxxxxxxx", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }

                    Toast.makeText(LoginActivity.this, ""+vys, Toast.LENGTH_LONG).show();
            }
        });//TLACITKO PRIHLASENI




    }

}

class LoadInfo extends AsyncTask<String, String, Integer>{
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    @Override
    protected Integer doInBackground(String... args) {
        params.add(new BasicNameValuePair("email", args[0]));
        params.add(new BasicNameValuePair("heslo", args[1]));
        JSONArray jArray = JSONParser.makeHttpRequest(my_url, "POST", params);
        int vys=0;
        try {
            JSONObject jobject = jArray.getJSONObject(0);
            vys=jobject.getInt("vysledek");
        } catch (JSONException e) {
            vys=2;  
            e.printStackTrace();
        }
        return vys;
    }   


}

1条回答
Melony?
2楼-- · 2019-07-29 04:18

First thing first. We need a more specific information then " it just does not work"

Things you need to do.

1) Use a great tutorial. I strongly recommend this one.

2) before you check your code make sure your php works. There is a GREAT! tester called POSTman. Test your php code with it.

3) organize your classes better. you should make (like the tutorial I posted does) a useractions class that handles the web calls and calls to the JSON class you create.

with those three things you be able to debug your code and then give us a more specific problem that the community will most likely be able to assist you with.

查看更多
登录 后发表回答