如何使用Android REST api

问题描述:

我想创建一个使用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

你的例子显示的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代码 –