java - 从android应用程序中的php文件读取JSON数据

标签 java php android mysql json

我只是开发 android 应用程序的初学者,我想将我的应用程序连接到服务器,以便我可以从 MySQL 获取数据。所以我试着先做登录部分,但我遇到了一些问题。我的代码不适用于读取 JSON。 我的代码如下: 登录 Activity (主 Activity ):

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:

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

还有我的 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);

?>

如果我发现了问题,我会很高兴。谢谢。

最佳答案

参见 this教程 : 这是关于使用 google volley 登录过程的完整教程

关于java - 从android应用程序中的php文件读取JSON数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39676809/

相关文章:

java - 由 : java. lang.ClassNotFoundException : net. sourceforge.cobertura.coveragedata.HasBeenInstrumented 引起

php - 通过正则表达式查找字符串中的十进制数

php - 有没有办法让 PHP(或 jQuery)检查字符串是否可读?

android - 不知道为什么在android中执行的for语句中有条件

android - 我的应用程序扩展是否会在我的 android 服务之前创建?

java - 启用和禁用 Eclipse 中许多 Activity 调试配置之一的所有断点

java - SessionFactory 类型的 getCurrentSession() 方法未定义

java - 无法打印 GC 详细信息

javascript - json_encoding 一个数组,但输出为字符串

android - ViewFlipper 中的 AndEngine View