简体   繁体   English

在android应用程序中从php文件中读取JSON数据

[英]reading JSON data from php file in android application

i am just a beginner in developing android applications, i wanted to connect my application to a server so i could get data from MySQL. 我只是开发Android应用程序的初学者,我想将我的应用程序连接到服务器,以便我可以从MySQL获取数据。 so i tried to make login part first but i have some problems. 所以我试图让登录部分先行,但我有一些问题。 my code doesn't work for reading JSON. 我的代码不适用于阅读JSON。 my codes are as below: LoginActivity(MainActivity) : 我的代码如下:LoginActivity(MainActivity):

package ir.naserpour.sportclub;

import android.content.Context;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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

import java.io.UnsupportedEncodingException;

import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;

public class LoginActivity extends AppCompatActivity {

    String link;
    String response;
        //get values
        String username,password;
        @Override
        protected void attachBaseContext (Context newBase){
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }
        @Override
        protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
            //define things
            TextView menu = (TextView) findViewById(R.id.menu);
            final EditText login_username = (EditText) findViewById(R.id.login_username);
            final EditText login_password = (EditText) findViewById(R.id.login_password);
            Button login_login = (Button) findViewById(R.id.login_login);
            Button login_register = (Button)findViewById(R.id.login_register);
            CheckBox rememberme = (CheckBox)findViewById(R.id.login_remeberme);


        //set icon type face
        Typeface fonticon = Typeface.createFromAsset(getAssets(), "fonts/icon.ttf");
        menu.setTypeface(fonticon);

        login_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                username = login_username.getText().toString();
                password = login_password.getText().toString();
                //check values
                if (username.length() <1 || password.length() < 1) {
                    Toast.makeText(getApplicationContext(), "fields cannot be empty", Toast.LENGTH_SHORT).show();
                } else {
                    //generate link
                    link = "http://localhost:8080/login.php?username="+username+"&password="+password;
                    login();
                    if(response=="true"){
                        Toast.makeText(getApplicationContext(), "true", Toast.LENGTH_SHORT).show();
                    }else if(response=="false"){
                        Toast.makeText(getApplicationContext(), "false", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(getApplicationContext(), "response", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });


    }

        @Override
        protected void onPause () {
        super.onPause();
        finish();
    }

    public String login() {

        new JSONParse().execute();
        return response;
    }

    public class JSONParse extends AsyncTask<String, String, JSONObject> {


        @Override
        public void onPreExecute() {
            super.onPreExecute();
            Toast.makeText(getApplicationContext(),"getting data ...",Toast.LENGTH_SHORT).show();
        }

        @Override
        public JSONObject doInBackground(String... args) {
            JSONParser jParser = new JSONParser();
            // Getting JSON from URL
            JSONObject json = jParser.getJSONFromUrl(link);
            return json;
        }

        @Override
        public void onPostExecute(JSONObject json) {
            try {
                JSONArray result = json.getJSONArray("result");
                JSONObject c = result.getJSONObject(0);
                try {
                    String res = new String(c.getString("response").getBytes("ISO-8859-1"), "UTF-8");
                    response = res;
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }
}

JSONParser.java: JSONParser.java:

package ir.naserpour.sportclub;

import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

/**
 * Created by Mohammad Naserpour on 9/22/2016.
 */
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    // constructor
    public JSONParser() {
    }
    public JSONObject getJSONFromUrl(String url) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);
            HttpResponse httpResponse = httpClient.execute(httppost);
            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 {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
        // return JSON String
        return jObj;
    }
}

and also my login.php script: 还有我的login.php脚本:

<?php
define("HOST","localhost");
define("USERNAME","root");
define("PASSWORD","");
define("NAME","users");

$con = mysqli_connect(HOST,USERNAME,PASSWORD,NAME);

$username = $_GET["username"];
$password = $_GET["password"];

$sql = "SELECT * FROM userinfo WHERE username ='$username' AND password='$password'";

$check = mysqli_fetch_array(mysqli_query($con,$sql));


if(isset($check)){
echo '{"result":[{"response":"true"}]}';
}else{
echo '{"result":[{"response":"false"}]}';
}

mysqli_close($con);

?>

i would be so happy if i find out the problem. 如果我发现问题,我会很高兴的。 thank you. 谢谢。

教程:它是一个关于使用google volley登录过程的完整教程

First : On device side, Use volley, its simple and easy to use 第一:在设备方面,使用凌空,它简单易用

Second : On server, what is {"result":[{"response":"true"}]} 第二:在服务器上,什么是{"result":[{"response":"true"}]}

any problem with {"result":true} ?? 问题{"result":true}

Last but not the least : Did you use JSON before or this code is trial and error copy paste from some tutorials? 最后但并非最不重要:您之前是否使用过JSON,或者此代码是试用版和一些教程的错误复制粘贴?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM