Προς το περιεχόμενο

Android WebView


Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

Χαιρετω και παλι!! οπως ειπα και σε ενα αλλο μου ποστ φτιαχνω μια εφαρμογη για το μπλογκ ενος φιλου για να παερασει η ωρα και να θυμηθω τα παλια! αυτο που θελω να κανω τωρα εχει να κανει με την εμφανιση των δεδομενων. Τραβαω τα δεδομενα απο το μπλογκ μεσω του API της γοογλε. Στα δεδομενα που τραβαω ειναι και μια ετικετα που περιεχει το κειμενο-φωτογραφιες κτλ απο το ποστ το οποιο ειναι οπως αυτο

 

 

 

"content": "\u003cdiv dir=\"ltr\" style=\"text-align: left;\" trbidi=\"on\"\u003e\n\u003cspan style=\"background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;\"\u003e\u003ciframe allowfullscreen=\"\" frameborder=\"0\" height=\"315\" src=\"//www.youtube.com/embed/7to2Pf0Nhyw?list=UUzkr9ekmEePpuCmiuWqwdpw\" width=\"560\"\u003e\u003c/iframe\u003e\u003cbr /\u003e\u003c/span\u003e\u003cspan style=\"background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;\"\u003eOur forest-walk turned out to be just a little more adventurous than planed. Kiprianades waterfalls in Northern Cor\u003c/span\u003e\u003cspan style=\"background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;\"\u003efu work as a pretty cool spa in winter.\u003c/span\u003e\u003cbr /\u003e\n\u003cspan style=\"background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;\"\u003eSB, Johny,Priftis,Orestis,Thomas\u003c/span\u003e\u003cbr /\u003e\n\u003cspan style=\"background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;\"\u003e\u003cbr /\u003e\u003c/span\u003e\u003c/div\u003e\n",

 

 

 

αυτο που θελω εινια να εμφανισω με καποιο τροπο το περιεχομενο μεσα στην εφαρμογη. Εχει κανεις ιδεα πως θα το κανω αυτο?

Για την ωρα το εχω να ανοιγει το url του ποστ σε ενα WebView αλλα δεν ειναι αυτο που θελω.

Δημοσ.

Καντο επικόλληση στο

http://www.freeformatter.com/javascript-escape.html

και πατα unescape

<div dir="ltr" style="text-align: left;" trbidi="on">
	<span style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;">
		<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/7to2Pf0Nhyw?list=UUzkr9ekmEePpuCmiuWqwdpw" width="560"></iframe>
		<br />
	</span>
	<span style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;">Our forest-walk turned out to be just a little more adventurous than planed. Kiprianades waterfalls in Northern Cor</span>
	<span style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;">fu work as a pretty cool spa in winter.</span>
	<br />
	<span style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;">SB, Johny,Priftis,Orestis,Thomas</span>
	<br />
	<span style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;">
		<br />
	</span>
</div>
  • Moderators
Δημοσ. (επεξεργασμένο)

Ευχαριστω για την απαντηση! θα δω πως θα το κανω αυτο μεσα στην εφαρμογη κατι αλλο ομως! 

 

μεσα στα δεδομενα αυτα υπαρχουν φωτογραφιες βιντεο κτλ. πως εγω θα μπορω να τα εμφανιζω στην εφαρμογη οπως φαινονται και στο μπλογκ? Δηλαδη κειμενο-φωτογραφια-κειμενο φωτογαφια-κειμενο-βιντεο

 

ΥΓ: για το πρωτο το εκανα με το StringUnescapeUtils

 

τωρα κοιταω πως θα μεφανιζονται οι φωτογραφιες και τα βιντεο κανονικα

Επεξ/σία από Spect~
  • Moderators
Δημοσ.

με το loadDataWithBaseUrl και ενα imageGetter καταφερα να εμφανιζω και τις φωτογραφιες το θεμα ειναι οτι τις εμφανιζει ολες μαζι στο τελος οχι εκειπου βρισκονται μεσα στο html!

 

καμια ιδεα>

Δημοσ.

με το loadDataWithBaseUrl και ενα imageGetter καταφερα να εμφανιζω και τις φωτογραφιες το θεμα ειναι οτι τις εμφανιζει ολες μαζι στο τελος οχι εκειπου βρισκονται μεσα στο html!

 

Δοκίμασε το Jsoup. Είναι ένας HTML parser με τη βοήθεια του οποίου μπορείς να απομονωσεις κάθε Element και είτε να τα προβαλεις σε webview είτε να τα εμφανιζεις σε κάποιο layout (τύπου λίστας?).

  • Moderators
Δημοσ.

Θα το κοιταξω καποια απο αυτες τις μερες! Το προβλημα που εχω για την ωρα -περα του οτι τελικα δεν μπορω να αποφασισω πως θα το κανω- ειναι το εξης:
 

εχω μια λιστα με τιτλους απο τα ποστ και οταν πατας σε καποιο ανοιγει μεσα στην εφαρμογη ενα web view που εμφανιζει την αντιστοιχη σελιδα. Το προβλημα ειναι οτι μετα απο 3-4 προβολες κρασαρι η εφαρμογη + οτι πολλες φορες ασχετα με το πιο λινκ πατας ανοιγει το πρωτο ποστ! Το λινκ στο οποιο δινετε η εντολη να ανοιξει ειναι σωστο αλλο τι ανοιγει

Δημοσ.

Θα το κοιταξω καποια απο αυτες τις μερες! Το προβλημα που εχω για την ωρα -περα του οτι τελικα δεν μπορω να αποφασισω πως θα το κανω- ειναι το εξης:

 

εχω μια λιστα με τιτλους απο τα ποστ και οταν πατας σε καποιο ανοιγει μεσα στην εφαρμογη ενα web view που εμφανιζει την αντιστοιχη σελιδα. Το προβλημα ειναι οτι μετα απο 3-4 προβολες κρασαρι η εφαρμογη + οτι πολλες φορες ασχετα με το πιο λινκ πατας ανοιγει το πρωτο ποστ! Το λινκ στο οποιο δινετε η εντολη να ανοιξει ειναι σωστο αλλο τι ανοιγει

 

Αν δεν παραθέσεις κώδικα δε μπορούμε να βοηθήσουμε και πολύ...αλλιώς google.

  • Moderators
Δημοσ.

 

 

η κλασση που εμφανιζει τη λιστα με τα ονοματα λινκς κτλ

 

public class FragmentHome extends ListFragment {
    private List<ListViewItem> pItems;
    private static final String TAG_ITEMS = "items";
    private static final String TAG_ID = "id";
    private static final String TAG_PUBLISHED = "published";
    private static final String TAG_TITLE = "title";
    private static final String TAG_URL = "url";
    private static final String TAG_POST_FILE = "jsonPostFile";
    private static String aPostData = null;
    private static String jsonStr = null;
    private MainActivity mPostData;
    JSONArray posts = null;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //mReadJsonData(TAG_POST_FILE);
        mPostData = (MainActivity) getActivity();
        jsonStr = mPostData.getStringS();
        pItems = new ArrayList<ListViewItem>();
        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);
                // Getting JSON Array node
                posts = jsonObj.getJSONArray(TAG_ITEMS);
                // looping through All posts
                for (int i = 0; i < posts.length(); i++) {
                    JSONObject jsonPost = posts.getJSONObject(i);
                    String id = jsonPost.getString(TAG_ID);
                    String published = jsonPost.getString(TAG_PUBLISHED).substring(0, 10) + " " + jsonPost.getString(TAG_PUBLISHED).substring(11, 16);
                    String title = jsonPost.getString(TAG_TITLE);
                    String url = jsonPost.getString(TAG_URL);
                    if (title.isEmpty()) {
                        title = "No Title";
                    }
                    pItems.add(new ListViewItem(title, published, url, id));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }
        setListAdapter(new CustomArrayAdapter(getActivity(), pItems));
    }
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // remove the dividers from the ListView of the ListFragment
        // getListView().setDivider(null);
    }
    public void onListItemClick(ListView l, View v, int position, long id) {
        // retrieve theListView item
        ListViewItem item = pItems.get(position);
        Intent s = new Intent(getActivity(), WebV.class);
        // Intent s = new Intent(getActivity(), PostView.class);
        s.putExtra(TAG_URL, item.getUrl());
        startActivity(s);
    }
}

 

και εδω η κλασση που καλειται για να εμφανισει το λινκ που καλειτε απο την απο πανω κλαση!

 

public class WebV extends Activity {
    private WebView myWebView;
    private static final String TAG_URL = "url";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent in = getIntent();
        String url = in.getStringExtra(TAG_URL);
        myWebView = new WebView(this);
        myWebView.getSettings();
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.loadUrl(url);
        myWebView.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(getApplicationContext(), description, Toast.LENGTH_SHORT).show();
            }
        });
        setContentView(myWebView);
    }
    public void onBackPressed() {
        super.onBackPressed();
        myWebView.destroy();
    }
}

 

 

 

Δημοσ.
public class WebV extends Activity {
    private WebView myWebView;
    private static final String TAG_URL = "url";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent in = getIntent();
        String url = in.getStringExtra(TAG_URL);
        myWebView = new WebView(this);
        myWebView.getSettings();
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.loadUrl(url);
        myWebView.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(getApplicationContext(), description, Toast.LENGTH_SHORT).show();
            }
        });
        setContentView(myWebView);
    }
    public void onBackPressed() {
        super.onBackPressed();
        myWebView.destroy();
    }
}

Ο κώδικας της WebV λειτουργεί μεν, αλλά γιατί να μη χρησιμοποιήσεις ένα layout για την WebV Activity και να το περάσεις μετά στη setContentView(); Να βάλεις δηλαδή το webView μέσα στο layout και να το βρεις με την κλασική findViewById().

 

edit: Τι exception παίρνεις όταν κρασάρει;

  • Moderators
Δημοσ.

2-22 17:50:16.044  10245-10245/com.manicside.stefanos.manicside W/UnimplementedWebViewApi? Unimplemented WebView method onKeyDown called from: android.webkit.WebView.onKeyDown(WebView.java:2169)

 

02-22 17:50:16.254  10245-10245/com.manicside.stefanos.manicside A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x00000038 (code=1), thread 10245 (fanos.manicside)

 

αυτα ειναι τα μονα που βρηκα. 

 

τι layout να χρησιμποιησω δηλαδη?

Δημοσ.

Ριξε μια ματιά εδώ και έχε κατα νού τα εξής: 

 

- Πρώτα καλείς το myWebView.setWebViewClient και μετά το myWebView.loadUrl(url).

- Φτιάξε ένα layout για την WebV activity και πέρνα το στην setContentView(). Αλλά τη setContentView να την καλέσεις αμέσως μετά την   super.onCreate(savedInstanceState); Δές το παράδειγμα στο link και τις απαντήσεις στο SO. 

 

Υπάρχουν πολλά tutorials οnline για τα webviews νομίζω πρέπει να τους ρίξεις μια ματιά.

 

 

2-22 17:50:16.044  10245-10245/com.manicside.stefanos.manicside W/UnimplementedWebViewApi? Unimplemented WebView method onKeyDown called from: android.webkit.WebView.onKeyDown(WebView.java:2169)

 

02-22 17:50:16.254  10245-10245/com.manicside.stefanos.manicside A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x00000038 (code=1), thread 10245 (fanos.manicside)

 

αυτα ειναι τα μονα που βρηκα. 

 

Νομίζω αυτά είναι warnings.Δοκίμασε να κάνες override την onKeyDown. Δές εδώ γιατί. Τώρα βλέπω ότι δεν έχεις πουθενά και annotations @Override..

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...