Android 從Servlet讀取圖片,視頻等數據,交互

關於Android與服務器的數據交互,簡單累類型的簡單,本人也是初學。做小項目遇到了客戶端上傳圖片(頭像)或者視頻到服務器,讀取。

 網上也找了一些。 現在想談談自己的思路,方法:

關鍵點:AsyncTask, 利用異步處理。 重寫兩個函數, (doInBackground和OnpostExcute)

重點:兩個函數屬於不同的線程。我們都知道不可以在主線程中進行網絡數據的訪問。 然而利用AsyncTask,其中的doInBackground函數,我們可以簡單理解爲是一個子線,

     而onpostExcucte可以簡單理解爲主線程。

  doinBackground所得到的結果可以直接在onpostExcute中拿到,可以根據拿到的數據直接在onPostExcute中修改UI。

   舉個例子,我們要在客戶端顯示用戶頭像, 那麼我們的目標就是拿到圖片在服務器的地址,(轉爲bitmap.略)

   下邊我結合gSOn。我們都知道gSon可以再哭護短手機端進行數據傳遞,可以傳遞一個對象,一個集合.....,只不過他們之間傳輸的是字符串,比如我們在服務器發送一個對象信息,就需要把該對象通過GSON 發送,相應的,到了Android這邊,就需要用到json解析,

    下邊我貼出來一個實例供大家理解: (需要導入gson的jar包)

public void getVideoPath(){//得到視頻地址的方法
	final String PATH="http://10.203.1.51:8080/Test/UserLoginServlet";	//指定服務器的Servlet,注意不要用Localhost,要用IP
	 AsyncTask<Void, Void, String> at=new AsyncTask<Void, Void, String>(){
		@Override//AsyncTask 三個參數,前兩個貌似固定(新手)第三個重要:我們需要什麼就在此設定什麼,比如集合(我的是String,也可以是對象)
		protected String doInBackground(Void... params) {
			try {
				HttpClient client = new DefaultHttpClient();
				HttpGet get=new HttpGet(PATH);
				HttpResponse response = client.execute(get);
				if(response.getStatusLine().getStatusCode()==200){//響應Ok
					//接下來讀取數據`
					InputStream is=response.getEntity().getContent();
					byte da[]=take(is);//返回一個數組,即JSON字符串
					String json=new String(da);
					Gson gson=new Gson();
					//Type typeOfT=new TypeToken<Users>(){}.getType();
				    Users users=gson.fromJson(json, new TypeToken<Users>(){}.getType());
				    String uri=users.getImageURl();
				    return uri;//這邊注意,我們需要什麼。在這直接返回,在下函數可直接拿到
				}
			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		}
		@Override 
		protected void onPostExecute(String result) {//此處的result 就是上邊函數返回的uri
			super.onPostExecute(result);
			if(result!=null){//
				System.out.println(result);//
				//這就拿到了上邊的uri,即服務器發送來的;你可以把Sgtring 換成對象,,集合。
				//可在此函數直接修改ui
			}
		}
	};
	   at.execute();//這句別忘了
	}
我再貼出服務器端的

@WebServlet("/UserLoginServlet")
public class UserLoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	this.doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setContentType("text/html;charset=utf-8");
       request.setCharacterEncoding("utf-8");

// 視頻地址:http://localhost:8080/Test/radio/aaa.wmv
    User user=new User();
      
  	  Gson gson=new Gson();
	String user1=gson.toJson(new Users("TRUE","http://localhost:8080/Test/radio/aaa.wmv"));//注意於User實體類字段相匹配
     response.getWriter().write(user1);//這就把一個User對象寫出去,可在Android拿到
  	 System.out.println(user);   
      }
	}

至此完成。

  

發佈了32 篇原創文章 · 獲贊 20 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章