2016-02-28 22 views
1

我要编写一个允许学习语言编程的android应用程序。一个例子,这是PHP: 我的申请将有两个功能:什么样的方法来存储Android上的数据学习应用程序

随着函数A,我为每篇文章创建html页面,在项目中存储html页面,然后通过webview显示它,如下所示:

webView.loadUrl("file:///android_asset/" + value); 

注意:value是存储在资产文件夹中的html文件。

随着功能B,有这么多的问题和答案。创建html文件太长了。我曾想过XML或JSON格式。这样做适合吗?你有更好的解决方案吗?

p/s:抱歉关于标签,我无法完全标记我的声誉。

+0

为什么创建HTML文件太长? HTML文件是否有限制? – user3793589

+0

@ user3793589:如果我有100个问题和答案,是否需要很长时间才能创建html文件?而且我会得到一些未知的记忆问题。 – kidsoul

+0

所以基本上你正在创建一个网站,并在应用程序中显示。这可能看起来不太好,或者看起来像一个Android应用程序!我的建议是忘掉HTML,考虑真正的课程设计指南(章节,标题,标题......),然后创建你自己的格式来存储这个结构化的内容(我会去与SQLite或Json,压缩)。如果你做对了,外观和感觉会更好! – personne3000

回答

2

基于:
Home » Android JSON Parsing – Retrieve From MySQL Database Android JSON Parsing
从2015年4月20日,由贝拉尔汗

您可以将您的数据在一个MySQL数据库和PHP使用JSON加载它。
例如,编码JSON的PHP文件是:

<?php 
define('HOST','localhost'); 
define('USER','user'); 
define('PASS','pass'); 
define('DB','dbname'); 
$con = mysqli_connect(HOST,USER,PASS,DB); 
$sql = "select * from questions"; 
$res = mysqli_query($con,$sql); 
$result = array(); 
while($row = mysqli_fetch_array($res)){ 
    array_push($result, 
     array('id'=>$row[0], 
       'question'=>$row[1], 
       'answer'=>$row[2] 
    )); 
} 
echo json_encode(array("result"=>$result)); 
mysqli_close($con); 
?> 

和Java代码:

public class MainActivity extends ActionBarActivity { 

String myJSON; 

private static final String TAG_RESULTS="result"; 
private static final String TAG_ID = "id"; 
private static final String TAG_QUESTION = "question"; 
private static final String TAG_ANSWER ="answer"; 

JSONArray peoples = null; 

ArrayList<HashMap<String, String>> QuestionList; 

ListView list; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    list = (ListView) findViewById(R.id.listView); 
    QuestionList = new ArrayList<HashMap<String,String>>(); 
    getData(); 
} 


protected void showList(){ 
    try { 
     JSONObject jsonObj = new JSONObject(myJSON); 
     results = jsonObj.getJSONArray(TAG_RESULTS); 

     for(int i=0;i<results.length();i++){ 
      JSONObject c = peoples.getJSONObject(i); 
      String id = c.getString(TAG_ID); 
      String question = c.getString(TAG_QUESTION); 
      String answer = c.getString(TAG_ANSWER); 

      HashMap<String,String> questions = new HashMap<String,String>(); 

      questions.put(TAG_ID,id); 
      questions.put(TAG_QUESTION,question); 
      questions.put(TAG_ANSWER,answer); 

      QuestionList.add(questions); 
     } 

     ListAdapter adapter = new SimpleAdapter(
       MainActivity.this, personList, R.layout.list_item, 
       new String[]{TAG_ID,TAG_QUESTION,TAG_ANSWER}, 
       new int[]{R.id.id, R.id.question, R.id.answer} 
     ); 

     list.setAdapter(adapter); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 

public void getData(){ 
    class GetDataJSON extends AsyncTask<String, Void, String>{ 

     @Override 
     protected String doInBackground(String... params) { 
      DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
      HttpPost httppost = new HttpPost("http://10.0.2.2/get-data.php"); 

      // Depends on your web service 
      httppost.setHeader("Content-type", "application/json"); 

      InputStream inputStream = null; 
      String result = null; 
      try { 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 

       inputStream = entity.getContent(); 
       // json is UTF-8 by default 
       BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
       StringBuilder sb = new StringBuilder(); 

       String line = null; 
       while ((line = reader.readLine()) != null) 
       { 
        sb.append(line + "\n"); 
       } 
       result = sb.toString(); 
      } catch (Exception e) { 
       // Oops 
      } 
      finally { 
       try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
      } 
      return result; 
     } 

     @Override 
     protected void onPostExecute(String result){ 
      myJSON=result; 
      showList(); 
     } 
    } 
    GetDataJSON g = new GetDataJSON(); 
    g.execute(); 
} 

你必须在你的布局 添加列表视图,不要忘了在清单中添加Internet权限。

+0

您应该[阅读此](http://meta.stackexchange.com/a/8259)。祝你有个愉快的日子 –

+0

好的答案已编辑 –

+0

@ king-il:谢谢你详细的回答。但是我只想做一个本地应用程序,先生。我看到您的参考教程网站。它只是使用JSON格式从服务器加载数据到客户端,不是吗?如果我制作JSON文件,然后加载到应用程序,这是否好? – kidsoul

1

如果您正在制作可访问互联网的Android应用程序,则可以创建一个存储所有问题和答案的数据库。因此,每当用户查看问题时,它都会通过从数据库发送数据向您的Web服务器和Web服务器响应发送请求。

如果您只想使用本地数据库创建应用程序,则可以实现Android SQLite数据库。以下是SQLite数据库上的Android文档:http://developer.android.com/training/basics/data-storage/databases.html

但是,关于您创建html文件或数据库需要多长时间的问题,除非您已经将所有数据都放到数据库中,否则您总是需要一段时间具有可以转换的某种格式的所有数据。

希望这会有所帮助!

+0

,JSON更好吗? – kidsoul

+0

SQLite数据库通常用于本地存储静态数据。 JSON是一种格式,不是一种数据库,通常用于在Web服务器和客户端之间传输数据。您可以使用内部存储将所有内容存储到JSON格式的文件或文件中。但是,SQLite是做本地存储时的常用选择 – Shuyang

相关问题