【问题标题】:how to connect android to restful api如何将android连接到restful api
【发布时间】:2015-09-10 11:11:43
【问题描述】:


我正在制作一个应用程序,它可以让人们登录、登录、注册、写一些东西并将其保存到数据库中。
所以我决定选择带有 Slim Framework 的 Restful Api。我将它发布在我的主机中,并通过扩展 google chrome 调用 Advanced Rest Client 进行测试。像登录,登录,注册,写东西,更新它,删除它......一切都很好。

例如: 我使用以下信息登录:
电子邮件:stark@gmail.com
密码:abc
那么结果就是这样。

{
error: false
name: "Kien"
email: "nguyenkien1402@yahoo.com"
apiKey: "fc2aee103c861026cb53fd8920b10adc"  
createdAt: "2015-06-24 00:28:01"
}


但是当我在我的 android 应用程序中使用它时。我无法通过 JSON 连接和获取信息。 请告诉我如何解决这个问题。
谢谢你。 对不起,我的英语不是母语。

【问题讨论】:

  • 发布你的安卓代码
  • 你是如何设置你的 Android http 客户端的?
  • 谢谢,但这不是我的问题。因为,我通过 Google Chrome 的扩展 Advanced Rest Client 测试登录或注册。结果是 JSON 类型。但是当我复制 url 并粘贴到 WebBrowser 中时。结果总是404 not found

标签: android restful-authentication android-json


【解决方案1】:

如果您的 url 正在生成 json 响应,那么您必须阅读它。

public static String  sendGet(String url) throws Exception {



        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        // optional default is GET
        con.setRequestMethod("GET");



        int responseCode = con.getResponseCode();
        System.out.println("\nSending 'GET' request to URL : " + url);
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();


        return response.toString(); //here is your response which is in string type, but remember that the format is json. 

    }

然后将您的响应转换为 json:

JsonObject obj = new JsonObject(response);

【讨论】:

  • 谢谢,但这不是我的问题。因为,我通过 Google Chrome 的扩展 Advanced Rest Client 测试登录或注册。结果是 JSON 类型。但是当我复制 url 并粘贴到 WebBrowser 中时。结果总是404 not found
  • 你有一个Java类android让app可以发布、获取、更新和删除,我的意思是创建、更新、删除、阅读。我有一个类 ServiceHandler,但它只能发布、获取和删除。我使用 DefaultHttpClient HttpEntity HttpResponse
【解决方案2】:

我解决了。 这取决于我的课程关于 CRUD JSON。 谢谢。

【讨论】:

    【解决方案3】:

    要连接到 RESTful API,您必须执行以下步骤

    • 提供互联网访问权限
    • 必须做http连接
    • 必须接受流输入

    提供互联网访问权限 为了让应用程序能够访问互联网,我们必须在文件“AndroidManifest.xml”中添加这段代码

    <uses-permission android:name="android.permission.INTERNET"/>
    

    要执行第二第三步骤,我们必须创建一个新的java类,因为当我们连接到restful API时,它将在后台和MainActivity中运行不允许后台任务。

    假设我们创建了一个新的 java 类“fetchData”来从 API 获取数据。 为了完成剩下的任务,我们必须使用这段代码

    URL url = new URL(API ADDRESS);
    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    InputStream inputStream = httpURLConnection.getInputStream();
    
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    

    现在您使用“Bufferedreader.readLine()”获取 JSON 文件

    那么类文件是这样的

    import android.os.AsyncTask;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    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;
    
    
    public class fetchData extends AsyncTask<Void,Void,Void> {
        String data ="";
        String dataParsed = "";
        String singleParsed ="";
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                URL url = new URL("https://api.myjson.com/bins/k3p10");
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String line = "";
                while(line != null){
                    line = bufferedReader.readLine();
                    data = data + line;
                }
    
    
                JSONArray JA = new JSONArray(data);
                for(int i =0 ;i <JA.length(); i++){
                    JSONObject JO = (JSONObject) JA.get(i);
                    singleParsed =  "Name:" + JO.get("name") + "\n"+
                            "email:" + JO.get("email") + "\n"+
                            "Error:" + JO.get("error") +  "\n";
    
                    dataParsed = dataParsed + singleParsed +"\n" ;
    
    
                }
    
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
    
        }
    }
    

    从 JSON 数组中,您可以从从 API 获得的 JSON 中提取所有内容。那么您可以根据您的要求使用这些信息。

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      相关资源
      最近更新 更多