2011-11-11 78 views
0

我想通過PHP將數據從MySQL保存到我的Android SQLite數據庫。我正在使用其他教程的代碼。將數據從PHP保存到Android數據庫

我使用了數據庫適配器和數據庫幫助器。

我試圖做這個工作,但不知道下一步該怎麼做,我也需要關閉數據庫以防止內存泄漏。

任何人都可以告訴我,如果這種方法是正確的,並且要在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); 
    } 
} 

回答

0

基本上看起來不錯。你可以在你的activity的onDestroy()中關閉你的db。

至於執行dbAdapter之後......懷疑這裏的人會爲你編寫它...但對於簡單的dbAdapter示例來說,一個很好的資源是Reto Meir的Android 2應用程序開發書。

您可以通過以下鏈接獲取示例代碼。你想看看第7章的代碼清單。它會幫助你很多。

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

+0

我拿到了這本書和APRESS Poro Android,但我仍然不確定。我繼續編寫我認爲應該是的代碼,但它不起作用:我更改了代碼:
PhPAdapter.java
public void insert(String qureylog){ // TODO自動生成方法存根 } – Jamerfjr

+0

與: public long insert(String name,String sex,String birthyear)ContentValues initialValues = createContentValues(sex,name,birthyear); return database.insert(DATABASE_TABLE,null,initialValues); \t} \t私人ContentValues createContentValues(字符串性別,字符串名稱, \t字符串birthyear){ \t ContentValues值=新ContentValues(); \t \t \t \t values.put(KEY_NAME,name); \t \t values.put(KEY_SEX,sex); \t \t values.put(KEY_BIRTHYEAR,birthyear); \t \t \t \t \t \t返回值; \t但它不工作。 – Jamerfjr

+0

在這種情況下,這本書是**不使用**。它向我展示了我已經在上面的代碼中得到了什麼。浪費錢。 – Jamerfjr