2016-12-20 157 views
0

应用程序的作品(api 23测试也kitkat测试),但没有显示,它应该显示图片(下载并放在视图中)。由于我没有得到任何错误,我迷路了。我正在从Android初学者书中寻找代码,他们建议应用程序在4.0(冰淇淋)上进行测试,但是没有推荐在该版本的android studio中构建。这是不是工作,因为Android的最新的API与HTTP和网络的工作方式发生了一些变化?Android网络简单的应用程序

public class NetworkingActivity extends Activity { 

ImageView img; 

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) 
    { 
     Log.d("Networking", ex.getLocalizedMessage()); 
     throw new IOException("Error connecting"); 
    } 
    return in; 
} 

private Bitmap DownloadImage(String URL) 
{ 
    Bitmap bitmap = null; 
    InputStream in = null; 
    try { 
     in = OpenHttpConnection(URL); 
     bitmap = BitmapFactory.decodeStream(in); 
     in.close(); 
    } catch (IOException e1) { 
     Log.d("NetworkingActivity", e1.getLocalizedMessage()); 
    } 
    return bitmap; 
} 

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    protected Bitmap doInBackground(String... urls) { 
     return DownloadImage(urls[0]); 
    } 

    protected void onPostExecute(Bitmap result) { 
     ImageView img = (ImageView) findViewById(R.id.img); 
     img.setImageBitmap(result); 
    } 
} 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    new DownloadImageTask().execute("http://www.mayoff.com/5-01cablecarDCP01934.jpg"); 

} 
} 

这里是logcat的:

logcat

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="metropolitan.com.desetopredavanjeprotokoli10"> 

<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

MainActivity类别:

package metropolitan.com.desetopredavanjeprotokoli10; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
} 

在这里你去:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Smor" 
    android:layout_gravity="center"/> 

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/img" 
    android:layout_gravity="center"/> 
</RelativeLayout> 
+1

R.layout.activity_main我需要这个=。= –

回答

1

既然你是beginer我建议你学习如何使用框架 有使用框架,如果不是你将需要实现一些复杂的代码,用于处理诸如缓存有很大的好处,调整大小,避免内存崩溃,处理几乎所有的API,你所面临的等

对于图像下载我建议

Picasso(这是我最建议)

Glide

对于普通的Http请求

Volley

您可以我们抽射下载映像。当你开始学习时,这很难理解,但是当你真正懂得了之后,我保证你不会使用普通的HTTPURLConnection来处理任何HTTP请求。

如果你需要上传,请告诉我,我会给你添加代码也是如此,虽然它很复杂。

编辑:

到目前为止,我已经测试出你的代码它的工作完美fine.I想添加它。

MainActivity

ImageView img; 

    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(); 
       Log.d("asd","OK"); 
      }else{ 
       Log.d("asd","error"); 
      } 
     } 
     catch (Exception ex) 
     { 
      Log.d("Networking", ex.getLocalizedMessage()); 
      throw new IOException("Error connecting"); 
     } 
     return in; 
    } 

    private Bitmap DownloadImage(String URL) 
    { 
     Bitmap bitmap = null; 
     InputStream in = null; 
     try { 
      in = OpenHttpConnection(URL); 
      Log.d("in", String.valueOf(in)); 
      bitmap = BitmapFactory.decodeStream(in); 
      in.close(); 
     } catch (IOException e1) { 
      Log.d("NetworkingActivity", e1.getLocalizedMessage()); 
     } 
     return bitmap; 
    } 

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 

     protected Bitmap doInBackground(String... urls) { 
      Log.d("aSD","ASD"); 
      return DownloadImage(urls[0]); 
     } 

     protected void onPostExecute(Bitmap result) { 
      ImageView img = (ImageView) findViewById(R.id.img); 
      img.setImageBitmap(result); 
     } 
    } 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     new DownloadImageTask().execute("http://www.mayoff.com/5-01cablecarDCP01934.jpg"); 

    } 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.myapplication.MainActivity"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/img"/> 
</RelativeLayout> 

末添加此体现

<uses-permission android:name="android.permission.INTERNET"/> 

结果 enter image description here

如果确实无法正常工作,请考虑检查您的仿真器或设备网络连接。

+0

嗯,tnx为此。我会检查那些肯定的。同样在这个日志中,你知道什么可能导致图片无法显示吗? Tnx再次为方向,我会开始学习他们一旦我完成这个错误的应用程序。这个应用程序是家庭作业,所以我需要完成它。 – Beansolder

+0

@Beansolder是否在清单中添加了许可? –

+0

是在清单文件中我添加了INTERNET权限。 – Beansolder