2014-07-02 133 views
3

我正在開發一個android應用程序,我需要通過服務器獲取存儲在mysql數據庫中的數據。從mysql獲取數據並顯示到android很容易,我沒有任何問題。但我不知道如何獲取mysql數據,然後將其存儲在sqlite數據庫中以顯示在表視圖中。這是我的代碼爲mysql到android。請幫助我如何從MySQL獲取數據並存儲在sqlite中。如何從MySQL中獲取數據並存儲在Sqlite數據庫中android

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
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.AsyncTask; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

public class MainActivity extends Activity 
{ 
    private String jsonResult; 
    private String url = "http://10.0.2.2/database/menu_details.php"; 
    private ListView listView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     listView = (ListView) findViewById(R.id.listView1); 
     accessWebService(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    // Async Task to access the web 
    private class JsonReadTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... params) { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(params[0]); 
      try { 
       HttpResponse response = httpclient.execute(httppost); 
       jsonResult = inputStreamToString(
         response.getEntity().getContent()).toString(); 
      } 

      catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     private StringBuilder inputStreamToString(InputStream is) { 
      String rLine = ""; 
      StringBuilder answer = new StringBuilder(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 

      try { 
       while ((rLine = rd.readLine()) != null) { 
        answer.append(rLine); 
       } 
      } 

      catch (IOException e) { 
       // e.printStackTrace(); 
       Toast.makeText(getApplicationContext(), 
         "Error..." + e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      return answer; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      ListDrwaer(); 
     } 
    }// end async task 

    public void accessWebService() { 
     JsonReadTask task = new JsonReadTask(); 
     // passes values for the urls string array 
     task.execute(new String[] { url }); 
    } 

    // build hash set for list view 
    public void ListDrwaer() { 
     List<Map<String, String>> menuList = new ArrayList<Map<String, String>>(); 

     try { 
      JSONObject jsonResponse = new JSONObject(jsonResult); 
      JSONArray jsonMainNode = jsonResponse.optJSONArray("menu"); 

      for (int i = 0; i < jsonMainNode.length(); i++) { 
       JSONObject jsonChildNode = jsonMainNode.getJSONObject(i); 
       String name = jsonChildNode.optString("name"); 
       String id = jsonChildNode.optString("id"); 
       String outPut = name + "-" + id; 
       menuList.add(createMenu("Menu", outPut)); 
      } 
     } 
     catch (JSONException e) 
     { 
      Toast.makeText(getApplicationContext(), "Error" + e.toString(),Toast.LENGTH_SHORT).show(); 
     } 

     SimpleAdapter simpleAdapter = new SimpleAdapter(this, menuList,android.R.layout.simple_list_item_1, 
       new String[] { "Menu" }, new int[] { android.R.id.text1 }); 
     listView.setAdapter(simpleAdapter); 
    } 

    private HashMap<String, String> createMenu(String name, String number) { 
     HashMap<String, String> menuID = new HashMap<String, String>(); 
     menuID.put(name, number); 
     return menuID; 
    } 
} 
+0

指的是sqlite和克里特島的任何內容...高保真你試圖創建它?任何問題都是如此? – KOTIOS

+0

http://www.androidhive.info/2012/01/android-login-and-registration-with-php-mysql-and-sqlite/檢查這可能它可以幫助你 – Giant

+0

@mona我見過這麼多的教程但沒有得到解決方案..我希望數據從MySQL到SQLite ... nd然後disply在Android的活動......! – user217340

回答

0
Follow the steps. 

**1. Create table in database handler** 

**2. create method in databse handler** 
For example:- 



` public void addUser(String name, String email,String userage) 
{ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, name); // Name 
     values.put(KEY_EMAIL, email); // Email 
}` 



**3. you need to create hashmap and other things in database handler** 

**4. Userfunction- create same name method in userfunction with params** 

then in main activity call the method using json. example 


    ` UserFunctions userFunction = new UserFunctions(); 
       Log.d("Button", "Login"); 
       JSONObject json = userFunction.loginUser(email, password);` 
+0

萬一你幫助用PHP做評論。 – pratz9999

0

這裏是你應該怎麼做:

活動類:

private void registerUser(final String name, final String email, final String password) { 

     StringRequest strReq = new StringRequest(Request.Method.POST, 
       AppConfig.URL_INSERT_REGISTER, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       Log.d(TAG, "Register Response: " + response.toString()); 
       hideDialog(); 

       try { 
        ServiceController iia = new ServiceController(getApplicationContext()); 

        if (iia.isInternetAvailable()) { 
         JSONObject jObj = new JSONObject(response); 
         boolean error = jObj.getBoolean("error"); 
         if (!error) { 
          String uid = jObj.getString("uid"); 
          JSONObject user = jObj.getJSONObject("user"); 
          String name = user.getString("name"); 
          String email = user.getString("email"); 

          //The line below performs the insert to the sqllite database. 
          db.addUser(name, email, uid); 
         } 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Registration Error: " + error.getMessage()); 
      } 
     }) { 

      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("name", name); 
       params.put("email", email); 
       params.put("password", password); 

       return params; 
      } 

     }; 

     AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
    } 

在您需要添加下面的方法在數據庫創建類:

public void addUser(String name, String email, String uid) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues params = new ContentValues(); 
    params.put(KEY_NAME, name); 
    params.put(KEY_EMAIL, email); 
    params.put(KEY_UID, uid); 

    long id = db.insert(TABLE_USER, null, params); 
    db.close(); 

    Log.d(TAG, "New record inserted in table user: " + id); 
} 

希望這有助於:)

相關問題