Android JSON Call через HTTPPOST с заголовками - PullRequest
0 голосов
/ 07 октября 2011

Я нашел пример того, как вызвать JSON из HTTPPOST в Android. Теперь я могу позвонить в сервис на моем локальном хосте по ссылке: (http://10.0.2.2/testingjson/testing.json)

Это дает вывод в listView, и это здорово!

Теперь мне нужно или требуется, чтобы я вставил в ссылку дополнительную информацию, например,

http://10.0.2.2/testingjson/testing.json?regid=1234&pass="abcd"

Существует два java-файла: Main и JSONfunction.

Вот весь код:

Main.java:

    package com.android.jsontut;

    import java.util.ArrayList;
    import java.util.HashMap;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;



    import android.app.ListActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;

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

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


        JSONObject json = JSONfunctions.getJSONfromURL("http://10.0.2.2/testingjson/testing.json");

        try{

            JSONArray  earthquakes = json.getJSONArray("earthquakes");

            for(int i=0;i<earthquakes.length();i++){                        
                HashMap<String, String> map = new HashMap<String, String>();    
                JSONObject e = earthquakes.getJSONObject(i);

                map.put("id",  String.valueOf(i));
                map.put("name", "Earthquake name:" + e.getString("eqid"));
                map.put("magnitude", "Magnitude: " +  e.getString("magnitude"));
                mylist.add(map);            
            }       
        }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
        }

        ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
                        new String[] { "name", "magnitude" }, 
                        new int[] { R.id.item_title, R.id.item_subtitle });

        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                @SuppressWarnings("unchecked")
                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
                Toast.makeText(Main.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

            }
        });
    }
}

Теперь второй файл:

JSONFUNCTIONS.java

package com.android.jsontut;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONfunctions {

    public static JSONObject getJSONfromURL(String url){
        InputStream is = null;
        String result = "";
        JSONObject jArray = null;

        //http post
        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();

        }catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
        }

      //convert response to string
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }

        try{

            jArray = new JSONObject(result);            
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }

        return jArray;
    }
}

Есть ли полный пример, из которого я могу узнать, как добавить заголовок в этом примере? или любой гений может мне помочь? :)

Я готов решить эту проблему, поэтому буду рад подробно рассказать о ее решении! :)

Пожалуйста, дайте мне знать, если вам нужно больше информации ..

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Я не уверен, хотите ли вы поместить это в строку запроса или в заголовок.Переменная строки запроса будет идти в конце URL (например, http://10.0.2.2/testingjson/testing.json?regid=1234&pass="abcd")

. Что касается заголовков, то класс HttpPost имеет унаследованный addHeader () Метод.

Таким образом, это будет что-то вроде:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httpPost.addHeader(new BasicHeader("regid", "1234"));
1 голос
/ 07 октября 2011

Если вы действительно хотите использовать POST, вам нужно создать объект NameValuePair и заполнить его вашими параметрами.

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("regid", "123"));
    nameValuePairs.add(new BasicNameValuePair("pass", "abcd"));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

Но я подозреваю, что, поскольку вы только получаете объект JSON, на самом деле вы этого не делаетехотите использовать объекты HttpPost для выполнения вашего запроса.Вместо этого посмотрите на HttpGet, который позволит вам использовать URL, который вы опубликовали (http://10.0.0.2/some/url?param=123&otherparam=456). Вы все равно можете прочитать ответ таким же образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...