Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Не запускаются эмуляторы

Здравствуйте, всем..

Никак не могу запустить хоть какой-либо эмулятор на Win7-x64.

В Android Studio эмулятор запускается, появляется девайс и надпись "Android" и так весит вечно... =(((

Попробовал GenyMotion, там белый экран при запуске. Поковырял VirtualBox... если для конкретной виртуальной машины отключить сеть вовсе и запустить напрямую - запускается, но работает крайне медленно. Если запускать через Genymotion, то тот изменяет настройки и опять белый экран..

Что делать? Может быть перейти на сразу на реальное устройство или это плохой вариант?

Пожалуйста, помогите...
Ответ: Как я писал, в VirtualBox эмулятор запускается, но только если отключить всю сеть...

Поковыряюсь в Биос...
Вопрос: Приложение запускается из play, но не запускается с рабочего стола

Добрый день всем!
В чем может быть проблема, если приложение отлично запускается с google play, но не запускается с рабочего стола? В чем разница в запуске между кликом по иконке приложения и при нажатии кнопки открыть в маркете?
Ответ: vxg,
Если очень кратко, то на некоторых оболочках лаанчер может добавлять какие-то данные к активити в бандл (мой случай), или мы где-то можем добавить данные и забыть.
Запуск же из плэя абсолютно чист и перезапустит приложение с нуля в другом потоке.
Решения описаны на стэк оверфлоу, можно запускать с специальным launchMode в манифесте, либо быть аккуратным с проверкой getIntent.getExtras(). У меня при старте всегда проверялось это и не пускало далее.
Вопрос: Встроенный эмулятор Android Studio не запускается

Всем приветы! Раньше встроенный эмулятор Андроид студии запускался без проблем, неделю комп в чужих руках побыл (связи с этим человеком нет) и вот сегодня нежданчик словил. Запускаю проект и эмулятор тупо не запускается, совсем не запускается! и ошибок нет. Попробовал напрямую позапускать emulator.exe, все подряд (я хз, который из них студия запускает), которые в папках студии были. Тишина. Либо командная строка мелькает, либо ошибка 0xc000007b. Снес всё и вся, заново поставил, проблема осталась. К сожалению, данного компа под рукой нет до понедельника, а мозг хочет ответов, которых в инете пока не нашел. В чем может быть беда? Genymotion попробовал в конце рабочего дня поставить, но при запуске девайса словил синий экран смерти, т.ч. хотелось бы встроенным эмулятором пользоваться.

Добавлено через 20 минут
Операционка Windows 7 pro, антивирус Microsoft Security Essentials
Ответ: В общем (после долгих танцев с бубном) забил на данную проблему и поставил BlueStacks. Студия прекрасно (пока что) работает с ним. Всем спасибо.
Вопрос: Как создать layout, который запускается один раз, при первом запуске приложения?

Как создать layout, который запускается один раз, при первом запуске приложения?
т.е. один раз запустилось и всё.
Ответ: Jungle, тут много можно написать, почитайте, например, здесь: http://developer.alexanderklimov.ru/...d/activity.php.
Основных способов два: startActivity и startActivityForResult.
Вопрос: Приложение запускается на эмуляторе, а при запуске на устройстве выдает ошибку

объясните пожалуйста,в чем проблема?
Приложение которое я создал,прекрасно запускается на эмуляторе,а при запуске на устройстве выдает ошибку
Ответ: В 36 все в порядке. В 51 ошибка же.. Как вы не увидели..
Вопрос: Android Studio не запускается AVD Manager

Помогите пожалуйста установил андроид студио но AVD Manager не запускается на доли секунды вылазит косольное окно и исчезает но AVD Manager не запускает в чём проблема?
Ответ: просто интересуюсь... может быть там будет не так удобно или сложно будет разобраться
Вопрос: Не запускается Android Studio

при запуске упорно пишет что не найдена JVM, переменную JAVA_HOME создал, прописал путь к jdk, вообще не помогло... все равно пишет и не запускается... что за фигня такая????
Ответ:
Сообщение от bastrakov
Вы тащите 2 одинаковые темы - отвечают в той.
Eclipse
я создал эту тему потому что никто не отвечал в той и потому что там тема была немного о другом, хотя мне в принципе все равно
Вопрос: FATAL EXCEPTION: main, приложение компилируется, но не запускается

Доброго времени суток, пытаюсь подключить RSS ленту используя XML parser, приложение не запускается.
Подскажите пожалуйста что не так в коде?
Код RSSFeed.java
Java(TM) 2 Platform Standard Edition 5.0
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
70
package rss.android.rssfeed;
 
import android.app.Activity;
import android.os.Bundle;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import android.widget.TextView;
import java.net.URL;
import java.io.IOException;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.Attributes;
 
public class RSSFeed extends Activity {
    /** Called when the activity is first created. */
    String rssResult = "";
    boolean item = false;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView rss = (TextView) findViewById(R.id.rss);
        try {
            URL rssUrl = new URL("http://k.img.com.ua/rss/ru/events.xml");
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();
            RSSHandler rssHandler = new RSSHandler();
            xmlReader.setContentHandler(rssHandler);
            InputSource inputSource = new InputSource(rssUrl.openStream());
            xmlReader.parse(inputSource);
            rss.setText(rssResult);
        } catch (IOException e) {rss.setText(e.getMessage());
        } catch (SAXException e) {rss.setText(e.getMessage());
        } catch (ParserConfigurationException e) {rss.setText(e.getMessage());
        }
    }
 
    private class RSSHandler extends DefaultHandler {
 
        public void startElement(String uri, String localName, String qName,
                                 Attributes attrs) throws SAXException {
            if (localName.equals("item"))
                item = true;
 
            if (!localName.equals("item") && item == true)
                rssResult = rssResult + localName + ": ";
 
        }
 
        public void endElement(String namespaceURI, String localName,
                               String qName) throws SAXException {
 
        }
 
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            String cdata = new String(ch, start, length);
            if (item == true)
                rssResult = rssResult +(cdata.trim()).replaceAll("\\s+", " ")+"\t";
 
        }
 
    }
 
}
Код main.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    <TextView android:id="@+id/rss"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
Вот что пишет в логе:
HTML5
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
12-23 13:01:14.705 5008-5008/? I/art: Not late-enabling -Xcheck:jni (already on)
12-23 13:01:15.240 5008-5008/? W/Zygote: Slow operation: 1044ms so far, now at Zygote.postForkCommon
12-23 13:01:15.241 5008-5008/? W/Zygote: Slow operation: 1095ms so far, now at zygoteConnection.runOnce: postForkAndSpecialize
12-23 13:01:16.931 5008-5015/rss.android.rssfeed W/art: Suspending all threads took: 19.671ms
12-23 13:01:17.889 5008-5008/rss.android.rssfeed D/AndroidRuntime: Shutting down VM
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime: FATAL EXCEPTION: main
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime: Process: rss.android.rssfeed, PID: 5008
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{rss.android.rssfeed/rss.android.rssfeed.RSSFeed}: android.os.NetworkOnMainThreadException
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:144)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5221)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:  Caused by: android.os.NetworkOnMainThreadException
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.net.InetAddress.getAllByName(InetAddress.java:215)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:190)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.net.URL.openStream(URL.java:470)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at rss.android.rssfeed.RSSFeed.onCreate(RSSFeed.java:34)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5937)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:144)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5221)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)*
12-23 13:01:17.898 5008-5008/rss.android.rssfeed E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)*
12-23 13:01:23.040 5008-5015/rss.android.rssfeed W/art: Suspending all threads took: 124.364ms
12-23 13:01:24.602 5008-5008/rss.android.rssfeed I/Process: Sending signal. PID: 5008 SIG: 9
Ответ:
Сообщение от Valakin
твой код заработает
Но всё равно большой шанс ANR
Вопрос: Пример AdMob компилируется, но не запускается

1. Взял пример с офиц сайта. () Запустил. На телефоне работает.
2. Решил проверить и разобраться. Создал новый пустой проект. Вставил в него строки из рабочего примера. Компилится. Но на телефоне не запускается - пишет "Приложение остановилось".

Где же здесь засада, ведь я просто перенес строки (Ctrl+C Ctrl+V) ?

MainActivity.java
Java(TM) 2 Platform Standard Edition 5.0
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.example.my.banner;
 
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
 
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
 
 
public class MainActivity extends ActionBarActivity {
    private AdView mAdView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
        // values/strings.xml.
        mAdView = (AdView) findViewById(R.id.ad_view);
 
        // Create an ad request. Check your logcat output for the hashed device ID to
        // get test ads on a physical device. e.g.
        // "Use AdRequest.Builder.addTestDevice("ABCDEF012345") to get test ads on this device."
        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .build();
 
        // Start loading the ad in the background.
        mAdView.loadAd(adRequest);
 
    }
 
    @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);
    }
 
    /**
     * Called when leaving the activity
     */
    @Override
    public void onPause() {
        if (mAdView != null) {
            mAdView.pause();
        }
        super.onPause();
    }
 
    /**
     * Called when returning to the activity
     */
    @Override
    public void onResume() {
        super.onResume();
        if (mAdView != null) {
            mAdView.resume();
        }
    }
 
    /**
     * Called before the activity is destroyed
     */
    @Override
    public void onDestroy() {
        if (mAdView != null) {
            mAdView.destroy();
        }
        super.onDestroy();
    }
 
}
activity_main.xml
Java(TM) 2 Platform Standard Edition 5.0
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
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="16dp"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:text="@string/hello_world" />
 
    <com.google.android.gms.ads.AdView
        android:id="@+id/ad_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id" />
</RelativeLayout>
strings.xml
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
<resources>
    <string name="app_name">Banner</string>
 
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <!-- This is an ad unit ID for a test ad. Replace with your own banner ad unit id. -->
    <string name="banner_ad_unit_id">ca-app-pub-9231756515545175/9464454040</string>
</resources>
AndroidManifest.xml
Java(TM) 2 Platform Standard Edition 5.0
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.my.banner">
    <!-- Include required permissions for Google Mobile Ads to run-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
 
        <!--This meta-data tag is required to use Google Play Services.-->
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--Include the AdActivity configChanges and theme. -->
        <activity
            android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent" />
    </application>
 
</manifest>
build.gradle
Java(TM) 2 Platform Standard Edition 5.0
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
apply plugin: 'com.android.application'
 
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
 
    defaultConfig {
        applicationId "com.example.my.banner"
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.google.android.gms:play-services-ads:8.1.0'
}
Ответ: Не помешал бы логкэт конечно. В настройках блока должен быть баннер, а не межстраничное объявление. Так что попробуй проверить. Если все-таки у тебя там стоит не баннер, то переделай, и вставь айди нового блока. Если не выйдет, скинь логкэт.
Вопрос: Не запускается метод onLoadFinished

Есть класс 1:
Кликните здесь для просмотра всего текста
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Environment;
import android.app.LoaderManager;
 
 
import android.content.Loader;
import android.content.CursorLoader;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
 
import java.io.File;
 
public class ListActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
 
    //private static final int CM_DELETE_ID = 1;
    ListView lvData;
    MyDB db;
    Cursor cursor;
    MySimpleCursorAdapter scAdapter;
    String db_table = "vkActual";
    int currentId = 0;
    DownloadTask downloadTask;
    android.app.LoaderManager lm;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        //lm = this.getLoaderManager();
        //getLoaderManager().initLoader(0,null,this);
        db = new MyDB(this);
        db.open();
        cursor=db.getAllData(db_table);
        String[] from = new String[] {"artist","title","status"};
        int[] to = new int[] { R.id.textView20, R.id.textView21, R.id.imageView };
 
        scAdapter = new MySimpleCursorAdapter(this, R.layout.list_item, cursor, from, to, 0, db);
        lvData = (ListView) findViewById(R.id.listView);
        lvData.setAdapter(scAdapter);
 
        lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                Log.d("log", "=======================itemClick: position = " + position + ", id = "
                        + id);
                Cursor c = db.getByID("vkActual", id);
                //Cursor cursor =
                Log.d("log", "=======================rows = " + c.getCount());
                c.moveToFirst();
                Log.d("log", "=======================cursor id = " + c.getLong(0));
                Log.d("log", "=======================cursor status = " + c.getLong(4));
                cursor.moveToPosition(position);
                if (cursor.getInt(4)==0) {//c.getInt(4) == 0) {
                    currentId = (int)((long) id);
                            File sdPath = Environment.getExternalStorageDirectory();
                    // добавляем свой каталог к пути
                    sdPath = new File(sdPath.getAbsolutePath() + "/" + "MyFiles/");
                    // создаем каталог
                    sdPath.mkdirs();
                    String filePath = sdPath.getAbsolutePath();
                    String fileName = Integer.toString(cursor.getInt(0))+"_"+
                            cursor.getString(1)+"_"+
                            cursor.getString(2)+".mp3";
                    Log.d("log", "======================= download file task");
                    downloadFile(cursor.getString(3), filePath, fileName, 256);
                    ContentValues cv = new ContentValues();
                    cv.put("status", 1);
                    cv.put("filepath", filePath);
                    cv.put("filename", fileName);
                    String[] args = {cursor.getString(0)};
                    db.mDB.update("vkActual", cv, "_id = ?", args);
                }
                if (cursor.getInt(4) == 2) {
                    Log.d("log", "======================= delete file task");
                    File f = new File(cursor.getString(5), cursor.getString(6));
                    String[] s=f.getParentFile().list();
                    Log.d("log", "======================= list of files in d:");
                    for(String i:s) {
                        Log.d("log", "=======================       filename == "+i);
                    }
                    Log.d("log", "======================= name of current file is: "+cursor.getString(6));
                    Log.d("log", "======================= path of current file is: "+cursor.getString(5));
                    if (f.exists())
                        Log.d("log", "======================= file exists before deletion");
                    if (f.exists()) {
                        f.delete();
                        if (f.exists())
                            Log.d("log", "======================= file exists after deletion");
                    }
                    ContentValues cv = new ContentValues();
                    cv.put("status", 0);
                    cv.put("filepath", "");
                    cv.put("filename", "");
                    String[] args = {cursor.getString(0)};
                    db.mDB.update("vkActual", cv, "_id = ?", args);
                }
                if (cursor.getInt(4) == 1) {
 
                }
                cursor = db.getAllData(db_table);
                scAdapter.changeCursor(cursor);
            }
        });
 
        lvData.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
 
            }
 
            public void onNothingSelected(AdapterView<?> parent) {
 
            }
        });
 
        registerForContextMenu(lvData);
 
        getLoaderManager().initLoader(0, null, this);
 
        String [] s=cursor.getColumnNames();
        Log.e("logg", "================== columns: " + s[0]+s[1]+s[2]);
 
        int i=cursor.getCount();
 
        Log.e("logg", "================== rows:    " + i);
        Log.e("logg", "================== xz:      " + cursor.getColumnName(0));
 
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // закрываем подключение при выходе
        db.close();
    }
 
    public void downloadFile(String strURL, String strPath, String strName, int buffSize) {
        downloadTask = new DownloadTask(strURL, strPath, strName, buffSize);
        downloadTask.execute();
    }
 
    public void onClickMenu(View view) {
        //Intent intent = new Intent(this, MainActivity.class);
        //startActivity(intent);
        this.finish();
    }
 
    public void onClickSearch(View view) {
        Intent intent = new Intent(this, SearchActivity.class);
        startActivity(intent);
    }
 
    public void onClickSort(View view) {
        Intent intent = new Intent(this, SortActivity.class);
        startActivity(intent);
    }
 
    @Override
    public android.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return null;
    }
 
    @Override
    public void onLoadFinished(android.content.Loader<Cursor> loader, Cursor data) {
        Log.w("logg", "================== onLoadFinished");
        ContentValues cv = new ContentValues();
        cv.put("status", 2);
        String[] args = {Integer.toString(currentId)};
        db.mDB.update("vkActual", cv, "_id = ?", args);
        cursor = db.getAllData(db_table);
        scAdapter.swapCursor(cursor);
        //scAdapter.swapCursor(cursor);
    }
 
    @Override
    public void onLoaderReset(android.content.Loader<Cursor> loader) {
        Log.w("logg", "================== onLoadFinished");
        ContentValues cv = new ContentValues();
        cv.put("status", 2);
        String[] args = {Integer.toString(currentId)};
        db.mDB.update("vkActual", cv, "_id = ?", args);
        cursor = db.getAllData(db_table);
        scAdapter.swapCursor(cursor);
    }
 
    static class MyCursorLoader extends CursorLoader {
 
        MyDB db;
        String table;
 
        public MyCursorLoader(Context context, MyDB db, String table) {
            super(context);
            this.db = db;
            this.table=table;
        }
 
        @Override
        public Cursor loadInBackground() {
            Cursor cursor = db.getAllData(table);
            return cursor;
        }
 
    }
 
}

В методе onCreate переопределяется метод onItemClick, в котором вызывается асинхронная загрузка.
И класс 2:
Кликните здесь для просмотра всего текста
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.example.vkapp1;
 
import android.os.AsyncTask;
import android.util.Log;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
 
class DownloadTask extends AsyncTask<Void, Void, Void> {
 
    String strURL;
    String strPath;
    String strName;
    int buffSize;
 
    public DownloadTask(String url, String path, String name, int buff) {
        super();
        strURL = url;
        strPath = path;
        strName = name;
        buffSize = buff;
    }
 
    @Override
    protected Void doInBackground(Void... params) {
        boolean b = false;
        try {
            File file = new File(strPath,strName);
            Log.e("log", "======================== dir " + strPath);
            Log.e("log", "======================== name "+strName);
            if (file.getParentFile() == null) {
                Log.e("log", "======================== no parent file");
                file.getParentFile().mkdirs();
            }
            try {
                if (!file.exists()) {
                    b = file.createNewFile();
                    if (b = true) Log.e("log", "======================== file created");
                    if (b = false) Log.e("log", "======================== file already exists");
                    Log.e("log", "======================== file not exist");
                }
            } catch (IOException i) {
                Log.e("log", "======================== can_t create file ==== " + i.getMessage());
            }
            if (b || file.isFile()) {
                Log.e("log", "======================== writing in file");
                URL connection = new URL(strURL);
                HttpURLConnection urlConn = null;
                try {
                    urlConn = (HttpURLConnection) connection.openConnection();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t open connection");
                }
                urlConn.setRequestMethod("GET");
                try {
                    urlConn.connect();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t connect");
                }
                InputStream in = null;
                try {
                    in = urlConn.getInputStream();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t get input stream");
                }
                OutputStream writer = new FileOutputStream(file);
                int count;
                //long total = 0;
                byte data[] = new byte[buffSize];
                try {
                    while ((count = in.read(data)) != -1) {
                        // allow canceling with back button
                        if (isCancelled()) {
                            in.close();
                            return null;
                        }
                        writer.write((data), 0, count);
                    }
                } catch (IOException i) {
                    Log.e("log", "======================== can_t create file ==== " + i.getMessage());
                }
                try {
                    writer.flush();
                    writer.close();
                    in.close();
                } catch (IOException i) {
                    Log.e("log", "======================== can_t flush/close");
                }
                Log.e("log", "======================== file downloaded");
            }
        }
        catch (MalformedURLException m) {
            Log.e("log", "======================== malformed url exception");
        }
        catch (ProtocolException m) {
            Log.e("log", "======================== protocol exception");
        }
        catch (FileNotFoundException m) {
            Log.e("log", "======================== file not found exception");
        }
        return null;
    }
}


В 1м классе не запускается метод onLoadFinished, почему?
Ответ: Всё оказалось очень просто, как обычно. Вместо AsyncTaskLoader я использовал AsyncTask...