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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Maguark
2 / 2 / 0
Регистрация: 24.10.2013
Сообщений: 91
#1

Android Studio, Web browser - Программирование Android

01.06.2015, 14:47. Просмотров 2540. Ответов 20
Метки нет (Все метки)

Здравствуйте.
Я пишу программу под ОС Android на android studio.
Программа должна зайти на сайт считать от туда информацию и обработать её. Для начала я решил создать свой Web браузер.
Я нашел замечательную статью: http://developer.alexanderklimov.ru/.../mybrowser.php
Создав по ней приложение оно даже не загрузившись сразу закрывается выдавая ошибку "В приложении MyBrowser произошла ошибка". В режиме дебагинга поставил точку прерывания в onCreate. На доже не дойдя до точки прерывания приложение вылетело с ошибкой. Может в примере есть какая-то ошибка?
Или может я вообще не тем путем иду, и можно считать данные с сайта иным путем?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2015, 14:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Android Studio, Web browser (Программирование Android):

Web view Android studio - Программирование Android
Как загрузить html страницу в webview в android studio? Где найти эту папку android_asset? mWebView = (WebView)...

Android studio, как запускать программу сразу на android смартфоне подключенному к usb? - Программирование Android
android studio, как запускать программу сразу на android смартфоне подключенному к usb?

Android.support.v4.app.FragmentActivity не работает в Android Studio - Программирование Android
объясните пожалуйста,как в андроид студио добавить вышеуказанную библиотеку,чтобы работало у меня вот это Активити package...

Выбор мощного android смартфона до 10 рублей, для тестирования проектов Android Studio, что посоветуете? - Программирование Android
Какую фирму посоветуете?

Запуск игры mr.Nom через Android Studio (по книге марио цехнер программирование игр под android) - Программирование Android
Привет всем! Для тех кто читал книгу - в конце 6ой главы мы закончили писать код игры. В книге написано что - игра готова. Но в самих...

Подключение Android Annotations к Android Studio - Программирование Android
Каким образом это сделать? Есть два .jar файла: androidannotations-3.2.jar androidannotations-api-3.2.jar При подключении через...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
KaHucTpa_Yoda
1 / 1 / 0
Регистрация: 14.03.2015
Сообщений: 9
02.06.2015, 06:20 #2
Код в студию.
0
Maguark
2 / 2 / 0
Регистрация: 24.10.2013
Сообщений: 91
02.06.2015, 12:31  [ТС] #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);
    }
 
}
Но я тут почитал, и подумал что создавать браузер все-же было не очень верным решением. Сейчас разбираюсь как просто создать соединение.
1
KaHucTpa_Yoda
1 / 1 / 0
Регистрация: 14.03.2015
Сообщений: 9
03.06.2015, 05:55 #4
Попробуйте не удалять заголовок.
А вообще я посоветовал бы http://startandroid.ru/

Добавлено через 7 минут
Возможно это то, что Вам нужно.
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
03.06.2015, 07:10 #5
Maguark, а не пробовали искать по форуму? За последний месяц штук 10 тем было.
0
Maguark
2 / 2 / 0
Регистрация: 24.10.2013
Сообщений: 91
03.06.2015, 13:26  [ТС] #6
Спасибо большое за ссылки, но меня как то смущают статьи про заброшенный Эклипс, с учетом того что я использую Андроид студио. Хотя Ява она и есть Ява=)
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
03.06.2015, 13:43 #7
Цитата Сообщение от Maguark Посмотреть сообщение
смущают статьи про заброшенный Эклипс
такие громкие слова лишь подтверждают Вашу некомпетентность в данном вопросе
1
Maguark
2 / 2 / 0
Регистрация: 24.10.2013
Сообщений: 91
03.06.2015, 14:01  [ТС] #8
Цитата Сообщение от androbro Посмотреть сообщение
такие громкие слова лишь подтверждают Вашу некомпетентность в данном вопросе
Так я и не претендую на звание магистра кода Явандроида=) Это моя 2-я программа и на Яве, и в Андроид Студии. Просто я читал, что Гугл забросил Эклипс и выпустил в место него АС. Кстати даже Автор проекта startandroid вроде писал, что Эклипс пройденный этап и он теперь пишет в АС, и постарается править уроки под АС.
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
03.06.2015, 14:08 #9
Maguark,
Цитата Сообщение от Maguark Посмотреть сообщение
даже Автор проекта startandroid вроде писал
ну если уж он написал, то все, срочно перехожу на AS))))
1
Maguark
2 / 2 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 11:07  [ТС] #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));
    }
  }
}
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
04.06.2015, 11:40 #11
Цитата Сообщение от Maguark Посмотреть сообщение
Я что-то не очень понял как у нас будет вызываться ПП "onPostExecute"?
onPostExecute() вызывается автоматически после завершения работы doInBackground()
0
Maguark
2 / 2 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 13:31  [ТС] #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;
        }
    }
Но приложение теперь закрывается с ошибкой.
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
04.06.2015, 13:38 #13
Цитата Сообщение от Maguark Посмотреть сообщение
Но приложение теперь закрывается с ошибкой.
потому что обращаетесь к UI не из UI-потока.
все что происходит в doInBackground() - выполняется в отдельном потоке.
а вот onPreExecute() и onPostExecute() выполняются в UI-потоке
1
Maguark
2 / 2 / 0
Регистрация: 24.10.2013
Сообщений: 91
04.06.2015, 13:57  [ТС] #14
И еще один попутный глупый вопрос, ни как не могу найти как от этого избавиться. В графическом редакторе activity_main Ориентация объектов не независимая. Если я вставляю объект и не привяжу его ширину или высоту к другому объекту то он растягивается на весь экран. В итоге они вместе группируются, и я не могу отдельно их перемещать по рабочей поверхности.

Добавлено через 5 минут
Цитата Сообщение от androbro Посмотреть сообщение
потому что обращаетесь к UI не из UI-потока.
все что происходит в doInBackground() - выполняется в отдельном потоке.
а вот onPreExecute() и onPostExecute() выполняются в UI-потоке
Спасибо. В принципе я понял. А почему она может не уходить в "onPostExecute"?
Кстати даже AS пишет мне что "onPostExecute" ни где не используется.
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
04.06.2015, 14:19 #15
Цитата Сообщение от Maguark Посмотреть сообщение
Кстати даже AS пишет мне что "onPostExecute" ни где не используется.
меня смущает отсутствие аннотации @Override
а вообще я бы посоветовал пересоздать AT, что бы уже наверняка
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2015, 14:19
Привет! Вот еще темы с ответами:

Меню Android Manifest в Android Studio - Программирование Android
Всем привет. Такой вопрос. Перешел c Eclipse на Android Studio и столкнулся со следующим: когда открываешь тот же манифест в AS, то...

Android web application - Программирование Android
Помогите все прояснить, на андройде программирую год, есть опыт создания развлекательных приложений и игр. Решил познать сторону веб...

Android и Web Service - Программирование Android
Написал веб сервис который формирует массив из трех значений, нужно написать андроид приложение, чтоб выводил их . Как этого добиться,...

Android Studio - Программирование Android
Здравствуйте. Сейчас изучаю C/C++ (уровень ближе к середнячку). Начинаю изучать Java. Вопрос: можно ли изучать Java используя Android...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.06.2015, 14:19
Ответ Создать тему
Опции темы

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