【问题标题】:reading JSON data from php file in android application从 android 应用程序中的 php 文件中读取 JSON 数据
【发布时间】:2017-02-02 06:15:34
【问题描述】:

我只是开发 android 应用程序的初学者,我想将我的应用程序连接到服务器,以便从 MySQL 获取数据。所以我试着先做登录部分,但我有一些问题。我的代码不适用于读取 JSON。 我的代码如下: 登录活动(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:

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

?>

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

【问题讨论】:

  • 在您的解决方案中究竟有什么问题?您是否尝试过调试您的代码?
  • @Egor 你知道的,正如我所说的,我只是一个基础。老实说不,我没有,但我会在下次问之前做。

标签: java php android mysql json


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    第一:设备端,使用volley,简单好用

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

    {"result":true} 有什么问题吗??

    最后但并非最不重要的一点:您之前是否使用过 JSON,或者此代码是一些教程中的反复试验复制粘贴?

    【讨论】:

    • 我尝试了第二个 on(result : true) 但我没有得到答案,我用 json 数组尝试了那个。最后一个:不需要json编码,我自己写。我做错了什么?
    • 首先,您不使用 jsonarray 进行单一响应。那么您的回复将决定您如何在设备上接收它。如果您将 json 作为字符串传递,那么您必须在设备上解析字符串。如果您将对象作为 json 发送,那么您可以直接在设备上接收它。不过建议使用后者。
    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2015-01-29
    相关资源
    最近更新 更多