2012-01-14 135 views
0

我正在嘗試在Platform 2.2 Froyo上構建Android應用程序。應用程序應該連接到遠程服務器,從中獲取數據並以不同語言向用戶顯示。連接到遠程服務器的Android應用程序

  • 所以我的問題 - 我需要什麼樣的技術學習,這樣我可以 建立上述應用。

注 - 我已經安裝了Android平臺,並且已經構建了像Hello,world這樣的簡單應用程序。我認識Java。另外我使用Eclipse。

謝謝你的回答。沒有粗魯的評論請...

// --------------代碼連接到使用HTTP協議的網站--------------- - //

package in.androidbook.Networking; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLConnection; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity 
{ 
    ImageView img; 
    /* This is for making asynchronous calls to ensure that connection to server will not return until data is received */ 

    private class BackgroundTask extends AsyncTask<String, Void, Bitmap> 
    { 
     protected Bitmap doInBackground(String...url) 
     { 
      Bitmap bitmap = DownloadImage(url[0]); 
      return bitmap; 
     } 

     protected void onPostExecute(Bitmap bitmap) 
     { 
      ImageView img = (ImageView) findViewById(R.id.img); 
      img.setImageBitmap(bitmap);   
     } 
    } 
    // Code for making HTTP connection 
    private InputStream OpenHttpConnection(String urlString) throws IOException 
    { 
     InputStream in = null; 
     int response = -1; 

     URL url = new URL(urlString);//We take an object of class URL 
     URLConnection conn = url.openConnection(); //Create a connection object and open the connection 

     if(!(conn instanceof HttpURLConnection)) throw new IOException("Not an Http connection"); 
     try 
     { 
      HttpURLConnection httpConn = (HttpURLConnection) conn; //httpConn object is assigned the value of conn. Typecasting is done to avoid conflict. 
      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; 
    } 
     //------------------------------------------ OpenHttpConnection method completed----------------------------------------------------------// 
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------// 
    //-------------------------------Method to download an image--------------------------------------------------------------------------------------// 
    private Bitmap DownloadImage(String URL) 
    { 
     Bitmap bitmap = null; 
     InputStream in = null; 
     try 
     { 
      in = OpenHttpConnection(URL); 
      bitmap = BitmapFactory.decodeStream(in); 
      in.close(); 
     } 
     catch(IOException e1) 
     { 
      Toast.makeText(this, e1.getLocalizedMessage(), Toast.LENGTH_LONG).show(); 
      //Toast displays a short msg to user. this refers to current object. 
      e1.printStackTrace(); 
     } 
     return bitmap; 
    } 


/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Bitmap bitmap = DownloadImage("http://i.zdnet.com/blogs/3-29-androids.jpg"); 
     img = (ImageView) findViewById(R.id.img); 
     img.setImageBitmap(bitmap); 
    } 
} 

回答

2

更新(基於評論):當我們談論客戶端時,我確認了我的答案。如果站點不是你的,那麼首先你需要做的就是檢查如何/是否允許通過API進行某種通信,以及以何種格式(最常用的XML和JSON)。有了這些信息,它應該很容易。看看使用Google Map或Twitter的Android示例,您應該找到一些。

那麼,這取決於你究竟是什麼意思:你是否要求在客戶端(應用程序)需要的技能 - 在服務器已經建立,或將由別人或技能服務器需要嗎?

在前一種情況下,我會建議與REST API和JSON進行通信。看看apache HTTPGet,HTTPClient和HTTPResponse類和org.json(都包含在Android中)。如果你想與他們一起測試,使用一些公共的API(所以你不必擔心服務器),例如谷歌地圖API(在一些限制下它是簡單和自由使用的)。在後一種情況下,我使用ColWinters:如果你知道java,那麼也可以在那裏使用它,Tomcat作爲一個服務器和一個基本的Servlet。你會在互聯網上找到大量的例子。

+0

謝謝。更具體地說....我想知道在哪裏/如何開始開發一個「連接到網站並下載和顯示數據的ANDROID APP」。「該網站是一個像天氣網站,音樂網站或谷歌地圖網站的正常網站,如你所說的,再次感謝你 – Niteesh 2012-01-18 06:53:49

+0

相應地編輯了我的答案 – Martin 2012-01-30 17:07:00

+0

Martin,謝謝你的回答,好吧,我試圖連接到這個網站:http://www.kvkkolhapur.com/這顯然不屬於我,它是一個政府網站,所以我需要聯繫網站管理員以獲取詳細信息。正如您所說,我將首先使用Google Map例如,再次感謝您的答覆,您的回答很有幫助 – Niteesh 2012-02-07 12:51:11

1

查一查這些技術,

的Apache Tomcat - Java服務器頁面(服務器處理) 的MySQL(數據存儲)

和多數民衆贊成它。另外請確保在單獨的線程中執行請求,例如來自活動的異步任務。

+0

ColWinters,謝謝你的回答。服務器是互聯網上的網站,我打算連接並下載數據。我沒有發現Apache Tomcat的角色如何發揮作用。那麼,我認爲學習你所提到的技術會讓我明白我需要在我的應用程序中構建什麼。我對嗎?再次謝謝你。 – Niteesh 2012-01-18 07:14:39

+0

Tomcat是Apache開源Web服務器的一個附件。閱讀這些主題,你會發現它。我認爲你的意思是一個基於Web的服務器。 – L7ColWinters 2012-01-18 13:47:19

1

如果你知道java,我會建議servlet作爲服務託管在服務器上,它從mysql或anydatabase讀取數據並構造爲json。在你的android應用程序中使用http將bucl httpclient用於遠程servlet並解析json響應。所以。 Servlet,Httpclient,Json覆蓋了大多數,如果你的應用程序是原生的電話應用程序。

相關問題