rafinos Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Γεια σας φτιάχνω ένα κουίζ για android με webview (δηλαδή html, javascript) και θα ήθελα να μάθω πως μπορώ να αποθηκεύω μια μεταβλητή javascript σε ένα αρχείο, μια βάση δεδομένων ή οτιδήποτε άλλο ώστε να μπορεί ο χρήστης να βλέπει πάντα το high score του. Δηλαδή αν ο χρήστης κλείσει την εφαρμογή και μετά ξαναμπει σε αυτή να υπάρχει το high score.
Moderators Kercyn Δημοσ. 6 Μαΐου 2014 Moderators Δημοσ. 6 Μαΐου 2014 http://www.vogella.com/tutorials/AndroidSQLite/article.html greeklish
acid18 Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Αν αποθηκευεις μόνο έναν αριθμό μπορείς να χρησημοποιήσεις shared preferences. Με αυτό το τρόπο μπορείς να υποστηρίξεις και πολλούς χρήστες (με βάση το όνομα) Είναι dictionary(string key, object value) όπου key θα βάλεις το όνομα του χρήστη. 1
rafinos Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Το δεύτερο μου ακούγεται καλό μιας που δεν χρειάζομαι ολόκληρη βάση δεδομένων για έναν αριθμό. Το θέμα είναι... τα shared preferences μπορούν να πάρουν τιμή μέσα από το webview και το αντίστροφο;
acid18 Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Μπορείς να πάρεις τα δεδομένα από την webview στην java και μετά να τα αποθηκευσεις. Δες εδώ http://stackoverflow.com/questions/16109817/android-requesting-data-in-webview-via-javascript Γενικά στο goolge υπάρχει άπειρο υλικό ειδικά για android. Αμα ξέρεις αγγλικά μπορείς να βρεις ότι θέλεις βλέπε stackoverflow.
rafinos Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Αγγλικά δεν ξέρω αλλά δόξα τον Θεό καταλαβαίνω μια χαρά τέτοια θέματα. Εκεί ψάχνω κατά κύριο λόγο απλώς καμιά φορά η απάντηση είναι κομπλέ σε κάποιον ενώ σε άλλον δε δουλέυει
rafinos Δημοσ. 7 Μαΐου 2014 Μέλος Δημοσ. 7 Μαΐου 2014 Αυτό που κάνω εδώ γίνεται ή .... package com.example.moviequiz; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.os.Build; public class MainActivity extends ActionBarActivity { SharedPreferences highScore = this.getSharedPreferences("highscore", Context.MODE_PRIVATE); SharedPreferences.Editor score_edit = highScore.edit(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); WebView myWebView = (WebView) this.findViewById(R.id.webView1); myWebView.loadUrl("file:///android_asset/www/index.html"); WebSettings settings = myWebView.getSettings(); settings.setJavaScriptEnabled(true); myWebView.addJavascriptInterface(new PlayerScore(), "EditScore"); } @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; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } } public class PlayerScore{ @JavascriptInterface public void setScore(String x){ score_edit.putString("score",x); score_edit.commit(); } @JavascriptInterface public void getScore(String x){ x = highScore.getString("highscore", ""); } } } Αυτά με ενδιαφέρουν βασικά... SharedPreferences highScore = this.getSharedPreferences("highscore", Context.MODE_PRIVATE); SharedPreferences.Editor score_edit = highScore.edit(); myWebView.addJavascriptInterface(new PlayerScore(), "EditScore"); public class PlayerScore{ @JavascriptInterface public void setScore(String x){ score_edit.putString("score",x); score_edit.commit(); } @JavascriptInterface public void getScore(String x){ x = highScore.getString("highscore", ""); } } Από τη στιγμή που πρόσθεσα αυτά εδώ στον κώδικα η εφαρμογή δεν τρέχει
rafinos Δημοσ. 8 Μαΐου 2014 Μέλος Δημοσ. 8 Μαΐου 2014 Έχω τρελαθεί πραγματικά... ψάχνω ώρες!!!!! Δεν έχω βρει τίποτα... νομίζω ότι βρήκα μόνο ότι μπορεί να γίνει με ένα plugin του phonegap, αλλά τα παραδείγματα πιο πολύ με μπέρδεψαν παρά με βοήθησαν....
rafinos Δημοσ. 9 Μαΐου 2014 Μέλος Δημοσ. 9 Μαΐου 2014 (επεξεργασμένο) Με τα sharedpreferences δεν είδα χαΐρι αποφάσισα να κάνω αυτό που θέλω με sqlite.... βλέπει κανείς κάποιο λάθος στον παρακάτω javascript κώδικα; (γιατί ο δικός μου εγκέφαλος μάλλον έχει λιώσει...) var db = null; function openDB(){ db = openDatabase("Highscore.db","1.0", "Highscore DB", 2 * 1024 * 1024); db.transaction(function(tx){ tx.executeSql('CREATE TABLE IF NOT EXISTS highscore (id unique, score)'); tx.executeSql('SELECT * FROM highscore',[],function(tx,rs){ if(rs.rows.length < 1){ tx.executeSql('INSERT INTO highscore(id,score) VALUES (1,"0")'); } }); }); } function checkScore(){ var stored_score =""; db.transaction(function(tx){ tx.executeSql('SELECT * FROM hishscore', [], function(tx, rs){ var len = rs.rows.length; if(len != 0){ stored_score = rs.rows.item(0).score; } }); }); return stored_score; } function updateScore(x){ db.transaction(function(tx){ tx.executeSql('UPDATE highscore SET score =' + x + ' WHERE id = ' + 1,[]); }); } Επεξ/σία 9 Μαΐου 2014 από rafinos
rafinos Δημοσ. 9 Μαΐου 2014 Μέλος Δημοσ. 9 Μαΐου 2014 Τώρα κάποιο συντακτικό λάθος μου μιλάς (γιατί δεν νομίζω να μου λες για drop table) αλλά δεν μπορώ να καταλάβω για ποιο πράγμα μιλάς
Moderators Kercyn Δημοσ. 9 Μαΐου 2014 Moderators Δημοσ. 9 Μαΐου 2014 Αυτό που σου λέει είναι να προσέχεις τα SQL injections και να προσέχεις τι τρέχεις στη βάση...
rafinos Δημοσ. 9 Μαΐου 2014 Μέλος Δημοσ. 9 Μαΐου 2014 (επεξεργασμένο) Οκ παιδιά το έκανα... var db = null; function openDB(){ db = openDatabase("Highscore.db","1.0", "Highscore DB", 2 * 1024 * 1024); db.transaction(function(tx){ tx.executeSql('CREATE TABLE IF NOT EXISTS highscore (id unique, score)'); tx.executeSql('SELECT * FROM highscore',[],function(tx,rs){ if(rs.rows.length < 1){ tx.executeSql('INSERT INTO highscore(id,score) VALUES (1,"0")'); } }); }); } function checkScore(callback){ db.transaction(function(tx){ tx.executeSql('SELECT * FROM highscore WHERE id = ' + 1,[],function(tx,rs){ var row; if(rs.rows.length > 0){ row = rs.rows.item(0); callback(row.score); } }); }); } function updateScore(x){ db.transaction(function(tx){ tx.executeSql('UPDATE highscore SET score =' + x + ' WHERE id = ' + 1,[]); }); } function returnScore(x){ $('input[name="high_score_hidden"]').val(x); } Καλώ την checkScore(returnScore);και εν συνεχεία παίρνω σε μια μεταβλητή αυτό $('#high_score_hidden').val();Δεν ξέρω αν είναι ότι πιο σωστό αλλά δουλεύει Επεξ/σία 10 Μαΐου 2014 από rafinos
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα