在自学的APP开发的时候,关于网络模块可能会遇到一个问题,就是如何将自己的图片放到服务器上,并APP下载下来。这样做的目的是可以节省优化app大小和结构。
布局文件中代码如下所示:
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parent_view"
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=".MainActivity" >
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:id="@+id/textview_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
android:id="@+id/imagview_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
android:id="@+id/btn_visit_web"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="访问百度" />
android:id="@+id/btn_download_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/btn_visit_web"
android:text="下载图片"/>
Button visitWebBtn = null;
Button downImgBtn = null;
TextView showTextView = null;
ImageView showImageView = null;
String resultStr = "";
ProgressBar progressBar = null;
ViewGroup viewGroup = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
visitWebBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showImageView.setVisibility(View.GONE);
showTextView.setVisibility(View.VISIBLE);
Thread visitBaiduThread = new Thread(new VisitWebRunnable());
visitBaiduThread.start();
try {
visitBaiduThread.join();
if(!resultStr.equals("")){
showTextView.setText(resultStr);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
downImgBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showImageView.setVisibility(View.VISIBLE);
showTextView.setVisibility(View.GONE);
String imgUrl = "http://192.168.1.137:8080//Mysecond/poooo.png";
new DownImgAsyncTask().execute(imgUrl);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void initUI(){
showTextView = (TextView)findViewById(R.id.textview_show);
showImageView = (ImageView)findViewById(R.id.imagview_show);
downImgBtn = (Button)findViewById(R.id.btn_download_img);
visitWebBtn = (Button)findViewById(R.id.btn_visit_web);
}
private String getURLResponse(String urlString){
HttpURLConnection conn = null; //连接对象
InputStream is = null;
String resultData = "";
try {
URL url = new URL(urlString); //URL对象
conn = (HttpURLConnection)url.openConnection(); //使用URL打开一个链接
conn.setDoInput(true); //允许输入流,即允许下载
conn.setDoOutput(true); //允许输出流,即允许上传
conn.setUseCaches(false); //不使用缓冲
conn.setRequestMethod("GET"); //使用get请求
is = conn.getInputStream();
//获取输入流,此时才真正建立链接
InputStreamReader isr = new InputStreamReader(is);
BufferedReader bufferReader = new BufferedReader(isr);
String inputLine
= "";
while((inputLine = bufferReader.readLine()) != null){
resultData += inputLine + "\n";
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null){
conn.disconnect();
}
}
return resultData;
}
private Bitmap getImageBitmap(String url){
URL imgUrl = null;
Bitmap bitmap = null;
try {
imgUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)imgUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return bitmap;
}
class VisitWebRunnable implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
String data = getURLResponse("http://www.baidu.com/");
resultStr = data;
}
}
class DownImgAsyncTask extends AsyncTask{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
showImageView.setImageBitmap(null);
showProgressBar();//显示进度条提示框
}
@Override
protected Bitmap doInBackground(String... params) {
// TODO Auto-generated method stub
Bitmap b = getImageBitmap(params[0]);
return b;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(result!=null){
dismissProgressBar();
showImageView.setImageBitmap(result);
}
}
}
private void showProgressBar(){
progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleLarge);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT,
RelativeLayout.TRUE);
progressBar.setVisibility(View.VISIBLE);
Context context = getApplicationContext();
viewGroup = (ViewGroup)findViewById(R.id.parent_view);
//
MainActivity.this.addContentView(progressBar, params);
viewGroup.addView(progressBar, params);
}
private void dismissProgressBar(){
if(progressBar != null){
progressBar.setVisibility(View.GONE);
viewGroup.removeView(progressBar);
progressBar = null;
}
}
首先:将自己的图片放进MyEclipse自己的项目的WebRoot文件夹下:
运行,
接着在浏览器上输入http://localhost:8080//Mysecond/poooo.png
如果成功显示自己的图片就可以进行下一步
在Eclipse里新建一个APP项目
效果如图:
接下来是.java文件代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
}
应当注意:
最后加入访问网络权限的代码:
位置在:
最后运行
亲测有效!