2011-11-11 72 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