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()
。检查以下内容:
- 字符串
jsonHtml
是有效的 json
格式吗?
jsonHtml
是否包含元素 results
数组?你的 jsonHtml
. 中应该有这样的东西 {results: [...]}
嗨,我是 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()
。检查以下内容:
- 字符串
jsonHtml
是有效的json
格式吗? jsonHtml
是否包含元素results
数组?你的jsonHtml
. 中应该有这样的东西
{results: [...]}