2011-10-07 5 views
0

Android에서 HTTPPOST에서 JSON을 호출하는 방법에 대한 예제를 발견했습니다. 이제 링크를 사용하여 로컬 호스트에서 A 서비스를 호출 할 수 있습니다. (0120)Android JSON 헤더로 HTTPPOST를 통해 호출

은 이제 필요하거나 무엇을 필요로

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

는 두 개의 자바 파일, 메인 및 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; 
    } 
} 

어떤 완전한 예에서 거기에 여기

모든 코드 이 예제에서 헤더를 추가하는 방법을 배울 수 있습니까? 또는 어떤 천재라도 도와 줄 수 있습니까? :)

이 문제를 해결하기 위해 기꺼이이 문제를 해결하기 위해 기꺼이 이야기 할 것입니다. :)

사전에 .. 자세한 정보가 필요하면 알려

감사하겠습니다!

답변

1

정말로 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). 같은 방식으로 응답을 읽을 수 있습니다.

+0

감사 :

그래서 뭔가를 갈 것입니다! 보안 성 때문에 HTTPOST를 사용하고 싶습니다. 이것은 간단한 예이지만 HTTPPOST를 사용하고 헤더를 사용하는 것입니다. 위의 코드를 예제에 추가 할 수있는 곳을 말씀해 주시겠습니까? :) – user712051

1

쿼리 문자열이나 헤더에 넣을 것인지 혼란 스럽습니다. 쿼리 문자열 변수는 바로 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")); 
+0

고마워! 헤더를 보내고 응답을 받아서 내 프로그램을 테스트 할 수있는 서비스가 있습니까? HTTPPost를 사용하고 싶습니다. 작업은 다음과 같습니다. 사용자는 등록 ID와 암호를 작성하라는 메시지가 표시됩니다.이 등록 ID와 암호는 웹 서비스에 요청되고 서비스는 예 또는 아니요로 응답합니다. – user712051

+0

머리글 쿼리 문자열을 사용하려고합니다. – user712051

+0

요청 헤더를 표시하는 웹 서비스에 대해 잘 모릅니다. 자신 만의 작은 웹 응용 프로그램을 만들어야 할 수도 있습니다. –