Форум программистов, компьютерный форум CyberForum.ru

Android Studio, Web browser - Android

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
01.06.2015, 14:47     Android Studio, Web browser #1
Здравствуйте.
Я пишу программу под ОС Android на android studio.
Программа должна зайти на сайт считать от туда информацию и обработать её. Для начала я решил создать свой Web браузер.
Я нашел замечательную статью: http://developer.alexanderklimov.ru/.../mybrowser.php
Создав по ней приложение оно даже не загрузившись сразу закрывается выдавая ошибку "В приложении MyBrowser произошла ошибка". В режиме дебагинга поставил точку прерывания в onCreate. На доже не дойдя до точки прерывания приложение вылетело с ошибкой. Может в примере есть какая-то ошибка?
Или может я вообще не тем путем иду, и можно считать данные с сайта иным путем?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KaHucTpa_Yoda
1 / 1 / 0
Регистрация: 14.03.2015
Сообщений: 9
02.06.2015, 06:20     Android Studio, Web browser #2
Код в студию.
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
02.06.2015, 12:31  [ТС]     Android Studio, Web browser #3
Код точь в точь как в примере, но все-же выложу:
avctivity_main.xml
Java
1
2
3
4
5
6
<?xml version = "1.0" encoding="utf-8"?>
 <WebView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 />
AndroidManifest.xml
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shmyrov.mybrowser" >
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar">>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
и MainActivity.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.example.shmyrov.mybrowser;
 
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 
//import java.util.WeakHashMap;
 
 
public class MainActivity extends ActionBarActivity {
    private WebView mWebView;
    private class WebViewer extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading (WebView view, String url)
        {
            view.loadUrl(url);
            return true;
        }
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mWebView = (WebView) findViewById(R.id.webview);
        // включаем поддержку JavaScript
        mWebView.getSettings().setJavaScriptEnabled(true);
        // указываем страницу загрузки
        mWebView.loadUrl("http://developer.alexanderklimov.ru/android");
        mWebView.setWebViewClient(new WebViewer());
    }
 
    @Override
    public void onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();}
        else {
            super.onBackPressed();
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.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();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
}
Но я тут почитал, и подумал что создавать браузер все-же было не очень верным решением. Сейчас разбираюсь как просто создать соединение.
KaHucTpa_Yoda
1 / 1 / 0
Регистрация: 14.03.2015
Сообщений: 9
03.06.2015, 05:55     Android Studio, Web browser #4
Попробуйте не удалять заголовок.
А вообще я посоветовал бы http://startandroid.ru/

Добавлено через 7 минут
Возможно это то, что Вам нужно.
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,066
03.06.2015, 07:10     Android Studio, Web browser #5
Maguark, а не пробовали искать по форуму? За последний месяц штук 10 тем было.
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
03.06.2015, 13:26  [ТС]     Android Studio, Web browser #6
Спасибо большое за ссылки, но меня как то смущают статьи про заброшенный Эклипс, с учетом того что я использую Андроид студио. Хотя Ява она и есть Ява=)
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
03.06.2015, 13:43     Android Studio, Web browser #7
Цитата Сообщение от Maguark Посмотреть сообщение
смущают статьи про заброшенный Эклипс
такие громкие слова лишь подтверждают Вашу некомпетентность в данном вопросе
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
03.06.2015, 14:01  [ТС]     Android Studio, Web browser #8
Цитата Сообщение от androbro Посмотреть сообщение
такие громкие слова лишь подтверждают Вашу некомпетентность в данном вопросе
Так я и не претендую на звание магистра кода Явандроида=) Это моя 2-я программа и на Яве, и в Андроид Студии. Просто я читал, что Гугл забросил Эклипс и выпустил в место него АС. Кстати даже Автор проекта startandroid вроде писал, что Эклипс пройденный этап и он теперь пишет в АС, и постарается править уроки под АС.
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
03.06.2015, 14:08     Android Studio, Web browser #9
Maguark,
Цитата Сообщение от Maguark Посмотреть сообщение
даже Автор проекта startandroid вроде писал
ну если уж он написал, то все, срочно перехожу на AS))))
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 11:07  [ТС]     Android Studio, Web browser #10
По поводу вашего примера. Я что-то не очень понял как у нас будет вызываться ПП "onPostExecute"?

Собственно код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class StackParser extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    //Находим кнопку
    Button button = (Button)findViewById(R.id.parse);
    //Регистрируем onClick слушателя
    button.setOnClickListener(myListener);
  }
  
  //Диалог ожидания
  private ProgressDialog pd;
  //Слушатель OnClickListener для нашей кнопки
  private OnClickListener myListener = new OnClickListener() {
    public void onClick(View v) {
      //Показываем диалог ожидания
      pd = ProgressDialog.show(StackParser.this, "Working...", "request to server", true, false);
      //Запускаем парсинг
      new ParseSite().execute("http://www.stackoverflow.com");
    }
  };
  
  private class ParseSite extends AsyncTask<String, Void, List<String>> {
    //Фоновая операция
    protected List<String> doInBackground(String... arg) {
      List<String> output = new ArrayList<String>();
      try
      {
        HtmlHelper hh = new HtmlHelper(new URL(arg[0]));
        List<TagNode> links = hh.getLinksByClass("question-hyperlink");
 
        for (Iterator<TagNode> iterator = links.iterator(); iterator.hasNext();)
        {
          TagNode divElement = (TagNode) iterator.next();
          output.add(divElement.getText().toString());
        }
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
      return output;
    }
 
    //Событие по окончанию парсинга
    protected void onPostExecute(List<String> output) {
      //Убираем диалог загрузки
      pd.dismiss();
      //Находим ListView
      ListView listview = (ListView) findViewById(R.id.listViewData);
      //Загружаем в него результат работы doInBackground
      listview.setAdapter(new ArrayAdapter<String>(StackParser.this,
          android.R.layout.simple_list_item_1 , output));
    }
  }
}
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
04.06.2015, 11:40     Android Studio, Web browser #11
Цитата Сообщение от Maguark Посмотреть сообщение
Я что-то не очень понял как у нас будет вызываться ПП "onPostExecute"?
onPostExecute() вызывается автоматически после завершения работы doInBackground()
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 13:31  [ТС]     Android Studio, Web browser #12
Попробовал посмотреть в режиме отладки, программа не уходит в onPostExecute...

Добавлено через 12 минут
Попробовал вставить код из onPostExecute в конец doInBackground(). Получилось вот-так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    private class ParseSite extends AsyncTask<String, Void, List<String>> {
        //Фоновая операция
        protected List<String> doInBackground(String... arg) {
            List<String> output = new ArrayList();
            try {
                HtmlHelper hh = new HtmlHelper(new URL(arg[0]));
                List<TagNode> links = hh.getLinksByClass("question-hyperlink");
 
                for (Iterator<TagNode> iterator = links.iterator(); iterator.hasNext(); ) {
                    TagNode divElement = iterator.next();
                    output.add(divElement.getText().toString());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            pd.dismiss();
            //Находим ListView
            ListView listview = (ListView) findViewById(R.id.listViewData);
            //Загружаем в него результат работы doInBackground
            listview.setAdapter(new ArrayAdapter(MainActivity.this,
                    android.R.layout.simple_list_item_1 , output));
            return output;
        }
    }
Но приложение теперь закрывается с ошибкой.
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
04.06.2015, 13:38     Android Studio, Web browser #13
Цитата Сообщение от Maguark Посмотреть сообщение
Но приложение теперь закрывается с ошибкой.
потому что обращаетесь к UI не из UI-потока.
все что происходит в doInBackground() - выполняется в отдельном потоке.
а вот onPreExecute() и onPostExecute() выполняются в UI-потоке
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 13:57  [ТС]     Android Studio, Web browser #14
И еще один попутный глупый вопрос, ни как не могу найти как от этого избавиться. В графическом редакторе activity_main Ориентация объектов не независимая. Если я вставляю объект и не привяжу его ширину или высоту к другому объекту то он растягивается на весь экран. В итоге они вместе группируются, и я не могу отдельно их перемещать по рабочей поверхности.

Добавлено через 5 минут
Цитата Сообщение от androbro Посмотреть сообщение
потому что обращаетесь к UI не из UI-потока.
все что происходит в doInBackground() - выполняется в отдельном потоке.
а вот onPreExecute() и onPostExecute() выполняются в UI-потоке
Спасибо. В принципе я понял. А почему она может не уходить в "onPostExecute"?
Кстати даже AS пишет мне что "onPostExecute" ни где не используется.
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
04.06.2015, 14:19     Android Studio, Web browser #15
Цитата Сообщение от Maguark Посмотреть сообщение
Кстати даже AS пишет мне что "onPostExecute" ни где не используется.
меня смущает отсутствие аннотации @Override
а вообще я бы посоветовал пересоздать AT, что бы уже наверняка
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 14:35  [ТС]     Android Studio, Web browser #16
При вставке @Override, AS сообщает мне что он тут не нужен "Method does not override method from its supperclss".
Боюсь удивить вас своим вопросом, но всё же, что означает аббревиатура AT?
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
04.06.2015, 14:36     Android Studio, Web browser #17
Цитата Сообщение от Maguark Посмотреть сообщение
Боюсь удивить вас своим вопросом, но всё же, что означает аббревиатура AT?
не поверите AsyncTask

Добавлено через 33 секунды
Цитата Сообщение от Maguark Посмотреть сообщение
При вставке @Override, AS сообщает мне что он тут не нужен "Method does not override method from its supperclss".
да бывает такая фигня, пересоздайте да и все
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 14:42  [ТС]     Android Studio, Web browser #18
Как я понимаю создаем мы его тут:
Java
1
private class ParseSite extends AsyncTask<String, Void, List<String>> {
А вот что значит его пересоздать пока для меня не очень понятно.
androbro
312 / 272 / 51
Регистрация: 17.10.2014
Сообщений: 819
04.06.2015, 14:49     Android Studio, Web browser #19
Цитата Сообщение от Maguark Посмотреть сообщение
А вот что значит его пересоздать пока для меня не очень понятно
ну значит я не правильно выразился...-"перепиши"
в общем создайте к примеру:
Java
1
private class ParseSite2 extends AsyncTask<String, Void, List<String>> {
и предоставьте IDE сгенерить методы, а вы потом туда скопипастите код из старого AT
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2015, 15:27     Android Studio, Web browser
Еще ссылки по теме:

Web view Android studio Android
Android Подключение Android Annotations к Android Studio
Android Android studio, как запускать программу сразу на android смартфоне подключенному к usb?
Android Studio Android
Запуск игры mr.Nom через Android Studio (по книге марио цехнер программирование игр под android) Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Maguark
1 / 1 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 15:27  [ТС]     Android Studio, Web browser #20
Цитата Сообщение от androbro Посмотреть сообщение
ну значит я не правильно выразился...-"перепиши"
в общем создайте к примеру:
Java
1
private class ParseSite2 extends AsyncTask<String, Void, List<String>> {
и предоставьте IDE сгенерить методы, а вы потом туда скопипастите код из старого AT
Да. Спасибо большое за разъяснения, теперь я стал немного больше понимать что тут происходит. Теперь программа уходит в ветвь onPostExecute(кстати что с @Override что без, работает одинаково и ошибок не выдает, но на всякий случай оставил ) Хотя, с сайта никакой информации в listview не отображается=)

Добавлено через 11 минут
В "try" пытаясь выполнить "HtmlHelper hh = new HtmlHelper(new URL(arg[0]));" он улетает в catch. arg[0] = http://www.stackoverflow.com. Как и положено.
Yandex
Объявления
04.06.2015, 15:27     Android Studio, Web browser
Ответ Создать тему
Опции темы

Текущее время: 03:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru