1

所以,我正在尝试进行登录活动。它使用来自 mySql 的数据库,所以我创建了一个 php webservice 1login.php。然后我有一个带有方法 makeHttpRequest(url,method,params) 和一个 LoginActivity 类的 JSONParser 类。但有一个问题。我无法将参数发送到 Web 服务,但是当我尝试使用 GET 方法时,它起作用了(char '@' 有一些问题)。我想了解如何使用 Post 方法。以下是代码:

PHP:(它运作良好,所以我认为问题不在这里)

<?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);
?>

JSONParser 类:

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;
        }


}

和 LoginActivity 类:

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;
    }   


}
4

1 回答 1

0

先说第一件事。我们需要更具体的信息然后“它只是不起作用”

你需要做的事情。

1)使用一个很棒的教程。我强烈推荐这个

2)在检查代码之前,请确保您的 php 可以正常工作。有一个伟大的!名为POSTman的测试仪。用它测试你的 php 代码。

3)更好地组织你的课程。您应该创建(就像我发布的教程一样)一个 useractions 类来处理 Web 调用和对您创建的 JSON 类的调用。

通过这三件事,您可以调试您的代码,然后给我们一个更具体的问题,社区很可能会帮助您解决。

于 2013-02-28T00:26:53.910 回答