Не удается подключить свежий эмулятор Android SDK через простое приложение

Неделю назад (февраль 2014 г.) я скачал последнюю версию Android SDK с Eclipse. Я новичок в этом, но не тупой в программировании на Java, но эта проблема просто убивает меня.

Я пытался сделать простое руководство по загрузке файла из Интернета. После провала нескольких уроков я наконец-то дошел до этого. Но в эмуляторе это приложение не может подключиться к Интернету. Я добавил простой TextView флаги, чтобы выследить проблему, и это всегда httpConn.connect();,

Вот кикер - когда это приложение установлено на мой Samsung Galaxy Y (GT-S5360), оно работает нормально.

В SDK Manager установлен Google Web Driver - браузер эмулятора подключается к интернету. Но независимо от того, что я делаю, эмулятор просто не позволяет моему приложению подключаться.

Да, uses-permission android:name="android.permission.INTERNET" /> существует.

Да, 3G бары присутствуют.

Да, ссылка на файл написана правильно.

Нет, ручная установка приложения каждый раз на реальное устройство не является хорошим решением для работы, которую я делаю.

ПК использует кабельное интернет-соединение. Пробовал эмулятор на 64-битной Windows7 (с правами администратора и без), а 32-битный эмулятор Android SDK на 32-битной WindowsXP. Перезапущенное затмение. Загрузил SDK снова. Перезагрузил компьютер. Перепробовал много предложений, в том числе "-dns-server 8.8.8.8,8.8.4.4". Все не удается подключиться в httpConn.connect();,

Код это хорошо и просто. Чего не хватает только что загруженному эмулятору Android SDK?!

Шаги для тиражирования:

1) Загрузите последнюю версию Android SDK с официального сайта.

2) Запустите менеджер SDK и установите предложения по умолчанию + Google Web Driver

3) Создайте приложение из этого учебника: http://www.edumobile.org/android/android-beginner-tutorials/downloading-an-image-from-the-server-and-displaying-it-on-screen/

4) Запустите приложение как Android-приложение - получите белый экран, потому что httpConn.connect(); не удалось.

Вот обновленный отчет об ошибках LogCat:

D/dalvikvm(933): Not late-enabling CheckJNI (already on)
W/System.err(933): java.io.IOException: Error connecting
W/System.err(933):  at    com.example.testfiledownlaod3.downloadImage.OpenHttpConnection(downloadImage.java:70)
W/System.err(933):  at    com.example.testfiledownlaod3.downloadImage.DownloadImage(downloadImage.java:83)
W/System.err(933):  at com.example.testfiledownlaod3.downloadImage.onCreate(downloadImage.java:24)
W/System.err(933):  at android.app.Activity.performCreate(Activity.java:5231)
W/System.err(933):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
W/System.err(933):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
W/System.err(933):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
W/System.err(933):  at android.app.ActivityThread.access$800(ActivityThread.java:135)
W/System.err(933):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
W/System.err(933):  at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(933):  at android.os.Looper.loop(Looper.java:136)
W/System.err(933):  at android.app.ActivityThread.main(ActivityThread.java:5017)
W/System.err(933):  at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(933):  at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err(933):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
W/System.err(933):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
W/System.err(933):  at dalvik.system.NativeStart.main(Native Method)
W/System.err(933): Caused by: android.os.NetworkOnMainThreadException
W/System.err(933):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
W/System.err(933):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
W/System.err(933):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
W/System.err(933):  at java.net.InetAddress.getAllByName(InetAddress.java:214)
W/System.err(933):  at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
W/System.err(933):  at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
W/System.err(933):  at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
W/System.err(933):  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
W/System.err(933):  at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
W/System.err(933):  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
W/System.err(933):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
W/System.err(933):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
W/System.err(933):  at com.example.testfiledownlaod3.downloadImage.OpenHttpConnection(downloadImage.java:54)
W/System.err(933):  ... 16 more
D/gralloc_goldfish(933): Emulator without GPU emulation detected.

1 ответ

Решение

Спасибо, что дали мне соломинки, чтобы понять. После получения Caused by: android.os.NetworkOnMainThreadException Я отследил проблему до реализации AsyncTask. Оказывается, эмулятору не нравится, когда вы используете все свои интернет-процессы в одном классе. Поэтому после просмотра других примеров я в итоге разбил учебник на два класса.

package com.example.testfiledownlaod3;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class downloadImage extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView img = (ImageView) findViewById(R.id.imageView1);
        String URL = "http://www.allindiaflorist.com/imgs/arrangemen4.jpg";
        img.setTag(URL);
        new DownloadImageTask().execute(img);
    }
}

а также

package com.example.testfiledownlaod3;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;

public class DownloadImageTask extends AsyncTask<ImageView, Void, Bitmap>
{
    ImageView imageView = null;

    @Override
    protected Bitmap doInBackground(ImageView... imageViews)
    {
        this.imageView = imageViews[0];
        return download_Image((String)imageView.getTag());
    }

    private Bitmap download_Image(String url)
    {
        Bitmap bmp=null;
        try
        {
            URL ulrn = new URL(url);
            HttpURLConnection con = (HttpURLConnection)ulrn.openConnection();
            InputStream instr = con.getInputStream();
            bmp = BitmapFactory.decodeStream(instr);
            instr.close();
        }
        catch (Exception ex){}
        return bmp;
    }

    @Override
    protected void onPostExecute(Bitmap result)
    {
        imageView.setImageBitmap(result);
    }
}

Работает на эмуляторе и на моем Samsung Galaxy Y (GT-S5360)

Другие вопросы по тегам