1

このプロジェクトのコードを取得するために、2 つのチュートリアルを実行しました。

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


    }
}

これでエラーはなくなり、アプリケーションは正常に動作します。これがすべてのために作られているというページにたどり着いたとき、何も得られません。空白のページ。私のコードからわかるように、トーストの例外を追加しましたが、どれも表示されません。意図的にサーバーを閉じたとしても、これは奇妙です。他にすべきことはありますか。タイトルが示すように、トーストが機能していないため、コードが実際に何かを行っているかどうかはわかりません。空白のページしかありません。

マニフェストに Internet を追加して、アプリがそれにアクセスできるようにしました。コード内の URL ( 192.168.0.13/testdatabase.php) にブラウザでアクセスすると、データベースのデータが正常に表示されます。

編集:私が最終的に望む全体的な結果は、データベースからのデータをユーザーに表示することです。静的テキストとして入力し、一部のデータを更新するためだけにアプリ全体を更新する必要はありません。

4

1 に答える 1

1

API レベル 11 以降では、別のスレッドでネットワーク接続を実装する必要があります。このリンクを見てください: HTTP Client API level 11 or greater in 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;      
}
于 2012-08-20T17:58:22.400 に答える