一周前(2014年2月)我用Eclipse下载了最新的Android SDK。我是新手,但对Java编程并不愚蠢,但这个问题只会让我感到害怕。
我试图做一个从互联网上下载文件的简单教程。在失败几个教程后,我终于得到了 this one 。但在模拟器中,此应用程序无法连接到Internet。我添加了简单的TextView
标记来追踪问题,而且始终是httpConn.connect();
。
这是踢球者 - 当这个应用程序安装到我的三星Galaxy Y(GT-S5360)上时,它可以正常工作。
在SDK Manager中安装了Google Web Driver - Emulator浏览器连接到Internet。 但无论我做什么,模拟器都不会让我的应用程序连接。
是的,uses-permission android:name="android.permission.INTERNET" />
存在。
是的,3G条存在。
是的,该文件的链接拼写正确。
不,每次在实际设备上手动安装应用程序对我正在进行的工作来说都不是一个好的解决方案。
PC使用有线Internet连接。尝试使用Windows7 64位上的模拟器(使用和不使用admin wrights),以及WindowsXP 32位上的32位Android SDK模拟器。重启Eclipse。再次下载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.
答案 0 :(得分:0)
感谢您给我吸管。获得Caused by: android.os.NetworkOnMainThreadException
后,我将问题跟踪到AsyncTask实现。当您在一个类中使用所有Internet进程时,模拟器不喜欢它。因此,在浏览了其他示例后,我最终将教程分成了两个类。
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);
}
}
适用于模拟器和我的三星Galaxy Y(GT-S5360)