簡體   English   中英

從android連接到MySQL數據庫。 沒有跡象表明它正在工作/不工作...?

[英]Connect to a MySQL database from android. No indication it's working/not working…?

我已經完成了兩個教程來獲取我這個項目的代碼。

連接到MySQL數據庫

通過PHP和JSON將Android連接到遠程mysql

因為我還是一個初學者,所以我已經學習了一定程度的代碼,並且同時使用了很多代碼。 這是我目前所擁有的:

package com.android.history;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class CurrentSeasonDrivers extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.currentseason_drivers);
    }

    //PARSE JSON ETC

    public void parseJSON() {

        String result = "";
        String drivername = "";
        String drivesfor = "";
        InputStream is=null;


    //HTTP POST REQUEST
        try{
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://192.168.0.13/testdatabase.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                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());
                Toast.makeText(getBaseContext(), "Could not connect", Toast.LENGTH_LONG).show();

        }

        //CONVERT DATA TO STRING
        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();

                result=sb.toString();

        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
                Toast.makeText(getBaseContext(), "Could not convert result", Toast.LENGTH_LONG).show();
        }

        //PARSE JSON DATA
        try{

                JSONArray jArray = new JSONArray(result);
                JSONObject json_data=null;

                for(int i=0;i<jArray.length();i++){
                    json_data = jArray.getJSONObject(i);

                    drivername=json_data.getString("Driver_full_name");
                    drivesfor=json_data.getString("Drives_for");

                }
        }catch(JSONException e){  
                Log.e("log_tag", "Error parsing data "+e.toString());
                Toast.makeText(getBaseContext(), "Could not parse data", Toast.LENGTH_LONG).show();
        }  


    }
}

現在,我沒有任何錯誤,該應用程序運行正常。 當我到達頁面時,這一切都是為了使我一無所獲。 空白頁。 從我的代碼可以看到,我已經添加了Toasts異常,但是它們都沒有出現。 即使我有意關閉我的服務器也很奇怪。 還有什么我應該做的。 就像標題所說的那樣,因為吐司無法正常工作,所以我沒有任何指示代碼是否真正在做任何事情。 我只有一個空白頁。

我已將Internet添加到清單中,以允許應用訪問該列表。 如果我通過瀏覽器訪問代碼( 192.168.0.13/testdatabase.php )中的URL,則數據庫中的數據顯示就很好。

編輯:我最終要從中得到的總體結果是從數據庫中顯示一些數據,供用戶查看。 不必將其作為靜態文本放入,而必須更新整個應用程序以僅更新一些數據。

您需要在API級別11或更高版本的單獨線程上實現網絡連接。 看一下以下鏈接: HTTP Client API level 11或更高版本(在Android中)

同樣對於POST請求,我認為您可以使用以下代碼:

public String post(String str) {
        String result = "";
        try {
            HttpParams httpParameters = new BasicHttpParams();
            int timeoutConnection = 3000;
            HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
            int timeoutSocket = 5000;
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
            DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
            HttpPost postRequest = new HttpPost(SERVER_ADDRESS);
            StringEntity input = new StringEntity(str);
            input.setContentType("application/json");
            postRequest.setEntity(input);
            HttpResponse response = httpClient.execute(postRequest);
            result = getResult(response).toString();
            httpClient.getConnectionManager().shutdown();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return result;
}

private StringBuilder getResult(HttpResponse response) throws IllegalStateException, IOException {
            StringBuilder result = new StringBuilder();
            BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())), 1024);
            String output;
            while ((output = br.readLine()) != null) 
                result.append(output);

            return result;      
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM