【问题标题】:connecting android application to database on the server?将android应用程序连接到服务器上的数据库?
【发布时间】:2012-04-03 05:01:30
【问题描述】:

我试图在 MYSQL(我使用 WAMP 服务器)和 android 应用程序上的数据库之间建立连接,但是当我运行应用程序时引发异常,我修复了日志 cat 及其指向此语句的点 jArray = new JSONArray(结果);

03-18 12:48:59.580: E/AndroidRuntime(458):  at org.json.JSONArray.<init>(JSONArray.java:87)

为什么会出现这个异常?我该如何解决?

先谢谢了..

这是我的代码: City.php:

          <?php
           mysql_connect("localhost","username","password");
           mysql_select_db("Deal");
           $sql=mysql_query("select * from City where Name like 'R%' ");
           while($row=mysql_fetch_assoc($sql))
           $output[]=$row;
           print(json_encode($output));
           mysql_close();
              ?>

java 类:

public class ConnectionActivity extends ListActivity {

int ct_id;
String[] ct_name = null;
JSONArray jArray;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String result = null;
    InputStream is = null;
    StringBuilder sb = null;

    // http post
            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://localhost/city.php");
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
            } catch (Exception e) {
                Log.e("log_tag", "Error in http connection" + e.toString());
            }

            // convert response to string
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
                sb = new StringBuilder();
                sb.append(reader.readLine() + "\n");
                String line = "0";
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();
            } catch (Exception e) {
                Log.e("log_tag", "Error converting result " + e.toString());
            }

            // paring data

            try {
                jArray = new JSONArray(result);
                JSONObject json_data = null;
                ct_name = new String[jArray.length()];
                for (int i = 0; i < jArray.length(); i++) {
                    json_data = jArray.getJSONObject(i);
                    ct_id = json_data.getInt("City_ID");
                    ct_name[i] = json_data.getString("Name");
                }
            } catch (JSONException e1) {
                Toast.makeText(getBaseContext(), "No City Found", Toast.LENGTH_LONG)
                        .show();
            } catch (ParseException e1) {
                e1.printStackTrace();
            }

            ListView lv;
            lv = getListView();
            lv.setTextFilterEnabled(true);
            ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, ct_name);
            setListAdapter(adapter);



}
public void onListItemClick(ListView parent, View v, int position, long id)
{
        Toast.makeText(this,"You have selected " + ct_name[position],Toast.LENGTH_SHORT).show();
        }
}                      

日志:

             03-18 13:28:46.923: W/ActivityThread(623): Application Com.Connection is waiting for the debugger on port 8100...
             03-18 13:28:46.973: I/System.out(623): Sending WAIT chunk
             03-18 13:28:46.983: I/dalvikvm(623): Debugger is active
             03-18 13:28:47.174: I/System.out(623): Debugger has connected
             03-18 13:28:47.183: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:47.383: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:47.583: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:47.783: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:47.993: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:48.193: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:48.403: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:48.603: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:48.803: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:49.003: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:49.203: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:49.413: I/System.out(623): waiting for debugger to settle...
             03-18 13:28:49.613: I/System.out(623): debugger has settled (1497)
             03-18 13:30:17.593: E/log_tag(623): Error in http       connectionandroid.os.NetworkOnMainThreadException
               03-18 13:30:34.315: E/log_tag(623): Error converting result java.lang.NullPointerException

【问题讨论】:

  • 你能告诉我们收到的 JSON 字符串吗?您确定您之前没有遇到异常并且结果仍然为空吗?
  • 当我运行应用程序时发生异常,模拟器关闭它“强制关闭”
  • 好的,这没什么用。请在解析之前打印“结果”,这样我们就会知道它的价值是什么。此外,完整的异常日志也会有所帮助。
  • 我将解析数据的部分作为注释我调试应用程序以了解结果的值,我发现连接中有错误,这是这样做之后的日志
  • 请编辑您的问题并在此处添加日志,它将无法作为评论阅读。

标签: java php android mysql json


【解决方案1】:

尝试在主线程上执行 HTTP 连接时出现错误:

03-18 13:30:17.593: E/log_tag(623): Error in http       connectionandroid.os.NetworkOnMainThreadException

据我所知,HTTP 代码是正确的,但您是在 UI 线程上运行它。这是不允许的。您需要在后台线程上执行如此长的操作。 Android 为您提供了一个非常易于使用的工具,可以在后台执行长时间操作并在主 (UI) 线程上发布结果。最有用的之一是AsyncTask。我建议你阅读Painless Threading,因为它会对你有很大的帮助。

【讨论】:

  • 我没有很多关于通过 Web 服务将 android 与 MYSQL 连接的信息我在网上阅读了教程,这是我第一次尝试这样做,我按照教程中的做法进行操作跨度>
  • 感谢您的帮助,我会阅读它们并希望连接成功
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多