【问题标题】:Android API integration [duplicate]Android API集成[重复]
【发布时间】:2016-12-02 16:58:47
【问题描述】:

谁能告诉我如何通过提供标头参数来使用 HttpHandler 方法从 API 获取响应?这是我的 Httphandler java 代码`

package com.example.addvehicle;
import android.util.Log;
import android.widget.ListView;
import java.io.BufferedInputStream;
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.ProtocolException;

import java.net.URL;
public class HttpHandler {
    private static final String TAG = HttpHandler.class.getSimpleName();



    public HttpHandler() {
    }

    public String makeServiceCall(String reqUrl) {
        String response = null;
        try{
            URL url = new URL("http://garage.kaptastech.mobi/api/5k/users/vehicle");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            InputStream in = new BufferedInputStream(conn.getInputStream());
            response = convertStreamToString(in);



        }
        catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException: " + e.getMessage());
        }catch (ProtocolException e) {
            Log.e(TAG, "ProtocolException: " + e.getMessage());
        } catch (IOException e) {
            Log.e(TAG, "IOException: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
        return response;

    }
    private String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line).append('\n');
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();

            } catch (IOException e) {
                e.printStackTrace();

            }
        }
        return sb.toString();``
    }
}`

我需要添加两个标题参数 1 -> 身份证 2 -> imei 如何在我上面的 httphandler java 文件中添加它?请任何人帮助我。非常感谢提前

【问题讨论】:

    标签: android


    【解决方案1】:

    最简单的方法是将参数添加到网址的末尾:

    即附加 ?param1=value1&param2=value2

    所以在你的情况下,它会是这样的:

    URL url = new URL("http://garage.kaptastech.mobi/api/5k/users/vehicle?id=[id]&imei=[imei]");
    

    ================================================ ================

    edit :如果您试图获得响应,您可以使用异步任务 看看这个使用 HttpHandler 和异步任务的教程:

    http://hmkcode.com/android-cleaner-http-asynctask/

    package com.hmkcode.http;
    
    import org.apache.http.client.methods.HttpUriRequest;
    import com.hmkcode.http.AsyncHttpTask;
    
    public abstract class HttpHandler {
    
    public abstract HttpUriRequest getHttpRequestMethod();
    
    public abstract void onResponse(String result);
    
    public void execute(){
        new AsyncHttpTask(this).execute();
    } 
    }
    

    这是异步任务

     package com.hmkcode.http;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.impl.client.DefaultHttpClient;
    import com.hmkcode.http.HttpHandler;
    import android.os.AsyncTask;
    import android.util.Log;
    
    public class AsyncHttpTask extends AsyncTask<String, Void, String>{
    
    private HttpHandler httpHandler;
    public AsyncHttpTask(HttpHandler httpHandler){
        this.httpHandler = httpHandler;
    }
    
    @Override
    protected String doInBackground(String... arg0) {
        InputStream inputStream = null;
        String result = "";
        try {
    
            // create HttpClient
            HttpClient httpclient = new DefaultHttpClient();
    
            // make the http request
            HttpResponse httpResponse = httpclient.execute(httpHandler.getHttpRequestMethod());
    
            // receive response as inputStream
            inputStream = httpResponse.getEntity().getContent();
    
            // convert inputstream to string
            if(inputStream != null)
                result = convertInputStreamToString(inputStream);
            else
                result = "Did not work!";
    
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }
    
        return result;
    }
    @Override
    protected void onPostExecute(String result) {
        httpHandler.onResponse(result);
    }
    
    //--------------------------------------------------------------------------------------------
     private static String convertInputStreamToString(InputStream inputStream) throws IOException{
            BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
            String line = "";
            String result = "";
            while((line = bufferedReader.readLine()) != null)
                result += line;
    
            inputStream.close();
            return result;   
        }
    }
    

    下面是你如何使用这两个类:

    new HttpHandler() {
            @Override
            public HttpUriRequest getHttpRequestMethod() {
    
                return new HttpGet("http://hmkcode.com/examples/index.php");
    
                // return new HttpPost(url)
            }
            @Override
            public void onResponse(String result) {
                // what to do with result 
                //e.g. display it on edit text etResponse.setText(result);
            }
    
        }.execute();
    

    祝你好运!

    【讨论】:

    • msdev,我试过了。但我仍然没有得到任何回应
    • 你使用的http url连接导致异常:android.os.NetworkOnMainThreadException,这就是你需要使用异步任务的原因
    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多