Сохранение данных из PHP в базу данных Android - PullRequest
0 голосов
/ 11 ноября 2011

Я хотел бы сохранить данные из MySQL через PHP в моей базе данных Android SQLite.Я использую код из других учебных пособий.

Я использую адаптер базы данных и помощник базы данных.

Я пытался сделать эту работу, но не уверен, что делать дальше, и мне также нужно закрыть базу данных, чтобы предотвратить утечку памяти.

Может кто-нибудь сказать мне, если этот подход правильный и что ставитьв PhpAdapter для вставки данных в базу данных.

Спасибо

PhpActivity.java

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.apache.http.message.BasicNameValuePair;
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.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;


public class PhpActivity extends Activity {
private PhpAdapter dbHelper;
/** Called when the activity is first created. */

TextView txt;
//EditText edittxt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dbHelper = new PhpAdapter(this);
dbHelper.open();
// Create a crude view - this should really be set via the layout resources 
// but since its an example saves declaring them in the XML. 
LinearLayout rootLayout = new LinearLayout(getApplicationContext()); 
txt = new TextView(getApplicationContext()); 
rootLayout.addView(txt); 
//edittxt = new EditText(this);
//rootLayout.addView(edittxt);
setContentView(rootLayout); 

 // Set the text and call the connect function. 
 txt.setText("Connecting...");
//call the method to run the data retreival
txt.setText(getServerData(KEY_121));



}
public static final String KEY_121 = "http://10.101.0.64/peopledata/getAllPeopleBornAfter.php"; //i use my real ip here



private String getServerData(String returnString) {

InputStream is = null;

String result = "";
//the year data to send
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("year", "2007"));
//nameValuePairs.add(new BasicNameValuePair("year", edittxt.getText().toString()));

//http post
try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(KEY_121);
        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());
}

//convert response 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());
}
//parse json data
try{
        JSONArray jArray = new JSONArray(result);
        for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);
                String qureylog ="insert or replace into table(name, sex, birthyear) " +
                        "values('"+json_data.getString("name")+"'," +
                                " '"+json_data.getString("sex")+"'," +
                                " '"+json_data.getString("birthyear")+"')";
                dbHelper.insert(qureylog);

                Log.i("log_tag","id: "+json_data.getInt("id")+
                        ", name: "+json_data.getString("name")+
                        ", sex: "+json_data.getString("sex")+
                        ", birthyear: "+json_data.getInt("birthyear")
                );
                //Get an output to the screen
               // returnString += "\n\t" + jArray.getJSONObject(i);
        }
}catch(JSONException e){
        Log.e("log_tag", "Error parsing data "+e.toString());
}
return returnString;
}   


}

PhpAdapter.java

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class PhpAdapter {

private static final String DATABASE_TABLE = "people";
private Context context;
private PhpAdapter dbHelper;
private SQLiteDatabase database;

public PhpAdapter(Context context) {
    this.context = context;
}

public PhpAdapter open() {
    dbHelper = new PhpAdapter(context);
    //database = dbHelper.getWritableDatabase();
    return this;
}

public void close() {
    dbHelper.close();
}

public void insert(String qureylog) {
    // TODO Auto-generated method stub

}

}

DatabaseHelper

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "phpdb";
private static final int DATABASE_VERSION = 1;


public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

private static final String DATABASE_CREATE = "create table people" +
        " (_id integer primary key autoincrement, " +
        "sex text , name text , birthyear text);";

// Method is called during creation of the database
    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);
    }

    // Method is called during an upgrade of the database, e.g. if you increase
    // the database version
    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion,
            int newVersion) {
        Log.w(DatabaseHelper.class.getName(),
                "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
        database.execSQL("DROP TABLE IF EXISTS people");
        onCreate(database);
    }
}

1 Ответ

0 голосов
/ 11 ноября 2011

В основном выглядит нормально. Вы можете закрыть свою базу данных в onDestroy () вашей деятельности.

Что касается реализации dbAdapter, которую вы после ... сомневаетесь, что люди из SO собираются написать ее для вас ... но хорошим ресурсом для простого примера dbAdapter является книга Reto Meir для Android 2. Разработка приложений.

Вы можете получить образец кода по следующей ссылке. Вы хотите посмотреть списки кодов для главы 7. Это вам очень поможет.

http://www.wrox.com/WileyCDA/WroxTitle/Professional-Android-2-Application-Development.productCd-0470565527,descCd-DOWNLOAD.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...