1

それで、ログインアクティビティを作成しようとしています。mySql のデータベースを使用するので、php webservice 1login.php を作成しました。次に、メソッド makeHttpRequest(url,method,params) と LoginActivity クラスを持つ JSONParser クラスがあります。しかし問題がある。パラメータをWebサービスに送信できませんが、GETメソッドを試してみるとうまくいきました(文字「@」に問題があります)。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) クラスをよりよく整理します。(私が投稿したチュートリアルのように) Web 呼び出しと作成した JSON クラスへの呼び出しを処理する useractions クラスを作成する必要があります。

これら 3 つのことを使用して、コードをデバッグし、コミュニティが支援できる可能性が最も高い、より具体的な問題を報告できます。

于 2013-02-28T00:26:53.910 に答える