【问题标题】:Connecting MYSQl database from android. i know there are many questions on this topic but i am not able to acheive connectivity从 android 连接 MYSQl 数据库。我知道关于这个主题有很多问题,但我无法实现连接
【发布时间】:2015-09-07 05:26:04
【问题描述】:

这是一个简单的 android 应用程序,它通过 php 连接到数据库并检索登录信息。 这是 Main_activity.Xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/user_name"
        android:id="@+id/username"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="230dp"
        android:layout_marginLeft="30dp"/>
    <EditText
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:id="@+id/UsernameField"
        android:layout_above="@+id/PasswordField"
        android:layout_alignLeft="@+id/PasswordField"
        android:layout_alignStart="@+id/PasswordField" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Password"
        android:id="@+id/textView2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="280dp"
        android:layout_marginLeft="30dp"/>

    <EditText
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/PasswordField"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignLeft="@+id/button"
        android:layout_alignStart="@+id/button"
        android:layout_marginLeft="27dp"
        android:layout_marginStart="27dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Log_in"
        android:id="@+id/button"
        android:layout_below="@+id/UsernameField"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="74dp"
        android:onClick="LoginNow"/>
</RelativeLayout>

这是main.java

    package edu.labmanagmentsystem.teacherapplication;

    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.StrictMode;
    import android.support.annotation.NonNull;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.StatusLine;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.BasicHttpParams;
    import org.json.JSONException;

    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;  
    import java.net.URLConnection;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;
    import java.util.ListIterator;


    public class MainActivity extends ActionBarActivity {


    public static String url_login = "http://192.168.1.70/android_test/get_password_from_username.php?username=admin&password=admin";

    public String username;
    public String password;
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_MESSAGE = "message";
    private ProgressDialog pDialog;
    JSONParser jsonParser = new JSONParser();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        return true;
    }

    //Todo: add weights here so that the user interface becomes universal
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void LoginNow(View view) {
        EditText passwordfield = (EditText) findViewById(R.id.PasswordField);
        EditText usernamefield = (EditText) findViewById(R.id.UsernameField);

        username = usernamefield.getText().toString();
        password = passwordfield.getText().toString();
        new AttemptLogin().execute();
    }


    class AttemptLogin extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Attempting Login...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... args) {
            int success;
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("username", username));
            params.add(new BasicNameValuePair("password", password));
            try{
            Log.d("request!", "starting");
            JSONObject json = jsonParser.makeHttpRequest(url_login,"POST",params);
            Log.d("Login attempt", json.toString());

                success = json.getInt(TAG_SUCCESS);

            if (success==1)
            {
                Log.d("Login Successful!",json.toString());
                Intent i = new Intent(MainActivity.this,AfterLoginTemp.class);
                finish();
                startActivity(i);

                    return json.getString(TAG_MESSAGE);

            }
            else
            {

                    Log.d("Login Failure",json.getString(TAG_MESSAGE));

                Toast tst = new Toast(getApplicationContext());
                tst.setText("Invalid credentials..");
                tst.setDuration(Toast.LENGTH_SHORT);
                tst.show();
            }
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
        }
    }
}

这是mainactivity.java。这是一个简单的登录屏幕,包含用户名和密码字段。服务器端phpscript正在运行,我已经验证过了。 这是网址http://localhost/android_test/get_password_from_username.php?username=admin&password=admin

这显示了一个有效的响应

{"success":1,"message":"找到密码匹配"}

我的 JsonParser 函数是。

    package edu.labmanagmentsystem.teacherapplication;

    import java.io.*;
    import java.util.List;

    import org.apache.http.*;
    import org.json.JSONException;
    import org.json.JSONObject;

    import android.util.Log;

    public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

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

    public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {
            try {
                // check for request method

                if(method == "POST"){

                    // request method is POST
                    // defaultHttpClient
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(url);
                    httpPost.setEntity(new UrlEncodedFormEntity(params));
                    HttpResponse httpResponse = httpClient.execute(httpPost);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();
                }else if(method == "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 {
                jObj = new JSONObject(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }
            // return JSON String
            return jObj;

    }
}

我调试了应用程序并注意到在 JSonParser HttpResponse httpResponse = httpClient.execute(httpGet); 的行中抛出了错误 我试图从手机的浏览器打开 php 链接,它显示了有效的响应。

【问题讨论】:

  • adminadmin{"success":1,"message":"Password Match Found"} 不是有效的JSON(例如here自己看)
  • 前面的adminadmin是php脚本中的echo命令..我把它去掉,然后尝试运行程序..
  • 这是它抛出的错误。 org.apache.http.conn.HttpHostConnectException: Connection to 192.168.1.70 denied.. 为此,我在手机浏览器中输入了 url,它正在工作。

标签: java android mysql json


【解决方案1】:

太多的大脑并不总是解决方案存在清单文件的问题。显然thgere没有适当的互联网权限...... 从多个条目到单个条目的简单更改

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

完成这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多