2016-04-27 81 views
0

我想創建一個使用android的移動客戶端來使用本地REST API 我已經在eclipse上創建了其他服務器並且運行沒有問題 但我試圖創建我的客戶端Android工作室,它也在運行,但是當我點擊按鈕時沒有任何事情發生。如何使用Android REST api

public class MainActivity extends AppCompatActivity { 
    private Button btnChercher; 
    private TextView tvJson; 

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

     btnChercher = (Button) findViewById(R.id.btnchercher); 
     tvJson = (TextView) findViewById(R.id.tvJson); 
     btnChercher.setOnClickListener(new View.OnClickListener() { 
              @Override 
              public void onClick(View v) { 
               new JsonTask().execute("http://localhost:8080/membres"); 
              } 


             } 
     ); 
    } 


    public class JsonTask extends AsyncTask<String,String,String>{ 

     @Override 
     protected String doInBackground(String... params) { 
      HttpURLConnection connection=null; 
      BufferedReader reader=null; 

      try { 
       URL url = new URL(params[0]); 
       connection = (HttpURLConnection) url.openConnection(); 

       connection.connect(); 

       InputStream stream = connection.getInputStream(); 

       reader = new BufferedReader(new InputStreamReader(stream)); 

       StringBuffer buffer = new StringBuffer(); 

       String line =""; 

       while ((line=reader.readLine())!=null){ 
        buffer.append(line); 
       } 

       String finalJson = buffer.toString(); 

       JSONObject parentObject = new JSONObject(); 
       JSONArray parentArray = parentObject.getJSONArray(""); 
       JSONObject finalObject = parentArray.getJSONObject(0); 

       String nomMembre = finalObject.getString("nomMembre"); 

       return nomMembre+"\n"; 





      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } finally { 
       if(connection!=null){ 
        connection.disconnect(); 
       } 

       if(reader!=null){ 
        try { 
         reader.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 


      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

      tvJson.setText(result); 
     } 
    } 
}` 
+0

研究使用[Retrofit](http://square.github.io/retrofit/)它簡化了大部分創建REST客戶端的工作。 – chRyNaN

回答

1

你的例子顯示的URL "http://localhost:8080/membres"。那是故意的嗎?您的Android應用程序是否運行您的Web服務器?大概不是。 "http://localhost:8080/membres"適用於您的計算機,因爲localhost指的是您的計算機本身。

爲了使您的Android應用程序訪問你的REST API,你應該做下列之一:

  • 替換localhost與您的服務器的IP。這將要求您的Android應用程序與您的服務器位於同一網絡中。
  • 將您的應用程序託管在其他地方,如Heroku。將localhost:8080替換爲可公開訪問的網址。

還有其他選擇,但這些是最簡單的。

+0

另一個選項(避免連接到同一個網絡)會重定向路由器中的端口,但這需要一個固定的ip來始終連接到相同的方向。 –

+0

認爲你的兄弟ggmathur爲你的解釋 –

+0

但當我更換它由我的IP地址它運行,但它不顯示任何東西時,我看在eclipse控制檯我可以看到Hibernate requetes,我犯了錯誤的JSON代碼 –