【发布时间】:2015-07-08 22:31:29
【问题描述】:
我是 android 开发的新手,我正在寻找一种将图片和文本从互联网下载到我的应用程序的方法。我找到了一些教程并将代码包含在我的项目中。当我在模拟器上运行应用程序时,一切正常。如果我在我的设备(三星 Galaxy S4)上运行该应用程序,我会收到“连接错误”(在 HttpDownload.java 中),我不知道为什么,因为在其他应用程序中互联网正在运行。
感谢您的帮助。
代码如下:
HttpDownload.java:
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class HttpDownload extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private InputStream OpenHttpConnection(String urlString)
throws IOException
{
InputStream in = null;
int response = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
try{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
}
catch (Exception ex)
{
throw new IOException("Error connecting");
}
return in;
}
public Bitmap DownloadImage(String URL)
{
Bitmap bitmap = null;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in);
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return bitmap;
}
public String DownloadText(String URL)
{
int BUFFER_SIZE = 2000;
InputStream in = null;
try {
in = OpenHttpConnection(URL);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return "";
}
InputStreamReader isr = new InputStreamReader(in);
int charRead;
String str = "";
char[] inputBuffer = new char[BUFFER_SIZE];
try {
while ((charRead = isr.read(inputBuffer))>0)
{
//---convert the chars to a String---
String readString =
String.copyValueOf(inputBuffer, 0, charRead);
str += readString;
inputBuffer = new char[BUFFER_SIZE];
}
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
return str;
}
}
main_activity:
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
TextView meinText;
ImageView meinBild;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
meinBild = (ImageView)findViewById(R.id.meinBild);
meinText = (TextView)findViewById(R.id.meinText);
}
public void laden (View view) {
HttpDownload download = new HttpDownload();
meinBild.setImageBitmap(download.DownloadImage("http://www.queness.com/resources/images/png/apple_ex.png"));
}
}
Logcat:
Local Branch:
Remote Branch:
Local Patches:
Reconstruct Branch:
04-29 16:36:28.757 32038-32038/com.example.itsme.internetdaten D/OpenGLRenderer﹕ Enabling debug mode 0
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ java.io.IOException: Error connecting
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at com.example.itsme.internetdaten.HttpDownload.OpenHttpConnection(HttpDownload.java:50)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at com.example.itsme.internetdaten.HttpDownload.DownloadImage(HttpDownload.java:60)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at com.example.itsme.internetdaten.MainActivity.laden(MainActivity.java:29)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at android.view.View$1.onClick(View.java:3964)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at android.view.View.performClick(View.java:4633)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at android.view.View$PerformClick.run(View.java:19330)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at android.os.Looper.loop(Looper.java:157)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5356)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
04-29 16:36:53.862 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
04-29 16:36:53.882 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
04-29 16:36:53.882 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
04-29 16:36:53.882 32038-32038/com.example.itsme.internetdaten W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
04-29 16:36:53.882 32038-32038/com.example.itsme.internetdaten I/Choreographer﹕ Skipped 61 frames! The application may be doing too much work on its main thread.
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.itsme.internetdaten" >
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<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>
</application>
</manifest>
【问题讨论】:
标签: android httpurlconnection androidhttpclient