Android 连接到棒棒糖中的 Mysql

Android connect to Mysql in lollipop

嗨,我是 android 的新手。我正在尝试 android 连接 mysql。 我已经写了 php 文件。它运作良好。 但我不知道如何连接到 mysql。

我做了 readDB.php 和 writeDB.php。 android的SendPostclass使用writeDB.php和php下class使用readDB.php

当我 运行 此屏幕出现的时间很短并且 'Unfortunatly test has stopped' 出现了消息。

下面是 logcat 的错误信息。

02-05 16:03:16.233: E/AndroidRuntime(3188): FATAL EXCEPTION: main
02-05 16:03:16.233: E/AndroidRuntime(3188): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
02-05 16:03:16.233: E/AndroidRuntime(3188):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at java.util.ArrayList.get(ArrayList.java:304)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at com.example.test.MainActivity$phpDown.onPostExecute(MainActivity.java:146)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at com.example.test.MainActivity$phpDown.onPostExecute(MainActivity.java:1)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at android.os.AsyncTask.finish(AsyncTask.java:602)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at android.os.AsyncTask.access0(AsyncTask.java:156)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at android.os.Looper.loop(Looper.java:137)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at android.app.ActivityThread.main(ActivityThread.java:4512)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at java.lang.reflect.Method.invokeNative(Native Method)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at java.lang.reflect.Method.invoke(Method.java:511)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
02-05 16:03:16.233: E/AndroidRuntime(3188):     at dalvik.system.NativeStart.main(Native Method)

这是源代码。

package com.example.test;

    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.*;

    import android.app.*;
    import android.os.*;
    import android.widget.*;
    import android.view.*;

    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.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    public class MainActivity extends Activity {
        TextView txtView;
        phpDown task;
        ArrayList<ListItem> listItem= new ArrayList<ListItem>();
        String number = null;
        String passwords = null;
        Button button;

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

            task = new phpDown();
            txtView = (TextView) findViewById(R.id.txtView);
            button = (Button)findViewById(R.id.submitBtn);

            task.execute("http://203.255.70.229/readDB.php");

            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    String number_edit = ((EditText)findViewById(R.id.number)).getText().toString();
                    String passwords_edit = ((EditText)findViewById(R.id.passwords)).getText().toString();

                    number = number_edit;
                    passwords = passwords_edit;

                    new SendPost().execute();
                }
            });
        }

        private class SendPost extends AsyncTask<Void, Void, String> { 
            protected String doInBackground(Void... unused) {
                String content = executeClient();
                return content;
            }

            public String executeClient() { 
                ArrayList<NameValuePair> post = new ArrayList<NameValuePair>(); 
                post.add(new BasicNameValuePair("number", number));
                post.add(new BasicNameValuePair("passwords", passwords));

                HttpClient client = new DefaultHttpClient(); 

                HttpParams params = client.getParams(); 
                HttpConnectionParams.setConnectionTimeout(params, 5000);
                HttpConnectionParams.setSoTimeout(params, 5000); //setSoTimeout?
                // Post객체 생성
                HttpPost httpPost = new HttpPost("http://203.255.70.229/writeDB.php");

                try {
                    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(post,"UTF-8");
                    httpPost.setEntity(entity);
                    client.execute(httpPost);
                    return EntityUtils.getContentCharSet(entity);
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }

        private class phpDown extends AsyncTask<String, Integer, String> {
            @Override
            protected String doInBackground(String... urls) {
                StringBuilder jsonHtml = new StringBuilder(); //StringBuilder?
                try {
                    URL url = new URL(urls[0]);

                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

                    if (conn != null) {
                        conn.setConnectTimeout(10000);
                        conn.setUseCaches(false); //setUseCaches?

                        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); //InputStreamReader?
                            for (;;) {
                                String line = br.readLine();
                                if (line == null)
                                    break;

                                jsonHtml.append(line + "\n"); 
                            }
                            br.close();
                        }
                        conn.disconnect();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return jsonHtml.toString();
            }


            protected void onPostExecute(String str) { 
                String number;
                String passwords;

                try {
                    JSONObject root = new JSONObject(str);
                    JSONArray ja = root.getJSONArray("results"); 

                    for (int i = 0; i < ja.length(); i++) {
                        JSONObject jo = ja.getJSONObject(i);
                        number = jo.getString("number");
                        passwords = jo.getString("passwords");

                        listItem.add(new ListItem(number, passwords));;
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                txtView.setText("number:" + listItem.get(0).getData(0) + "\npasswords:"
                        + listItem.get(0).getData(1));
            }
        }
    }

任何评论谢谢

要知道 phpDown 是否可以连接到 writeDB.php,请在 doInBackground() 中打印出 jsonHtml。如果它有来自您的writeDB.php的内容,则表示它连接成功。

但是从你的错误日志来看,问题出现在onPostExecute()。检查以下内容:

  1. 字符串 jsonHtml 是有效的 json 格式吗?
  2. jsonHtml 是否包含元素 results 数组?你的 jsonHtml.
  3. 中应该有这样的东西 {results: [...]}