2012-07-03 2 views
2

안드로이드,JSON 내가 넷빈즈에서이 웹 서비스를 구축 ListView에

package in.figures.on.mobile; 

import db.koneksi.dbKoneksi; 
import java.sql.Statement; 
import java.sql.ResultSet; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Properties; 
import javax.jws.WebMethod; 
import javax.jws.WebParam; 
import javax.jws.WebService; 
import org.json.simple.JSONValue; 

/** 
* 
* @author Setyadi 
*/ 
@WebService() 
public class AksesData { 

    /** 
    * Web service operation 
    */ 
    @WebMethod(operationName = "Kategori") 
    public String Kategori() { 
     //TODO write your implementation code here: 

     dbKoneksi con = new dbKoneksi(); 
     Statement statement; 
     Properties properties; 
     List list = new ArrayList(); 
     String sql = "SELECT idPrimary_key, kategori FROM kategori "; 
     ResultSet hasil; 
     String kategori = null; 

     try{ 
      statement = con.getConnection().createStatement(); 
      hasil = statement.executeQuery(sql); 
      while (hasil.next()) { 
       properties = new Properties(); 
       properties.put("idPrimary_key", hasil.getString(1)); 
       properties.put("kategori", hasil.getString(2)); 
       list.add(properties); 
      } 
      kategori = JSONValue.toJSONString(list); 
     } 
     catch(Exception e){ 
     } 

     return kategori; 
    } 


} 

그리고이

[{"idPrimary_key":"21ye21","kategori":"FirstCategory"}, 
{"idPrimary_key":"89oy89","kategori":"SecondCategory"}, 
{"idPrimary_key":"34ew34","kategori":"ThirdCategory"}] 

같은 JSON을 반환 그리고이 같은 안드로이드의 ListView에 소비하려고 노력하지만, 여전히

오류가있어
 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.setOutputSoapObject(request); 

     HttpTransportSE transportSE = new HttpTransportSE(URL); 

     try { 
      transportSE.call(SOAP_ACTION, envelope); 
      SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
      result = response.toString(); 

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

     } 

     String jsonAN = "{\"kat\":"+result+"}"; //try to build to be like this {"kat":[{blablablaJSON}]} 
     String kategoriJSONList[][] = new String[99][2]; 
     String katList[] = new String[99]; //tobe shown on listview, derived from two dimensional array above. 
     try { 
      jsonObject = new JSONObject(jsonAN); 
      jsonArray = jsonObject.getJSONArray("kat"); 

      for(int i=0; i < jsonArray.length() ; i++){ 
       kategoriJSONList[i][0] = jsonArray.getJSONObject(i).getString("idPrimary_key").toString(); 
       kategoriJSONList[i][1] = jsonArray.getJSONObject(i).getString("kategori").toString(); 
      } 

      for(int i=0; i < jsonArray.length(); i++){ 
       katList[i] = kategoriJSONList[i][1]; 
      } 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     ListView list = (ListView) findViewById(R.id.listKategori); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       WebServiceActivity.this, android.R.layout.simple_list_item_1,katList 
       ); 

     list.setAdapter(adapter); 

     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
        long arg3) { 
       final String kategori = (String) ((TextView)arg1).getText(); 
       Toast.makeText(WebServiceActivity.this, kategori, 
         Toast.LENGTH_LONG).show(); 
      } 
     }); 

위와 같이 반환 된 JSONValue를 ListView로 표시하는 방법을 알려주십시오. 요즘 스트레스를받습니다. 미리 감사드립니다.

+0

어떤 종류의 오류가 발생하는지 알 수 있습니까? JSON에 대해 알고있는 한 JSONObject는 항상 쌍 값이고 [{ "var1", "var2", "var3", ..., "...}"의 구문은 코드에 기반하여 추측 할 수 있습니다. varn "}]은 나에게 다소 이상하며 [{label1 : value1, label2 : value2, label3 : value3, ..., labeln : valuen}]과 같아야합니다. 그것을 확인하시기 바랍니다! ;-) – mthama

+0

죄송합니다. 허위, 오타입니다. \t [{ "idPrimary_key": "21ye21", "kategori": "에서 FirstCategory"} \t { "idPrimary_key": "89oy89", "kategori": "SecondCategory"} \t { "idPrimary_key": " 34ew34 ","kategori ":"ThirdCategory "}] 편집했습니다. – AdityaSetyadi

+0

흠 ... 좋아요, 그래서 당신의 실수는 json 문제에서 오는 것이 아닙니다. 오류 (유형, 로그캣, 예외 등)에 대한 자세한 정보를 제공 할 수 있습니까? 목록 어댑터 코드를 게시 할 수 있습니까? :) – mthama

답변

10

확인. 이 벨로우즈 코드를 사용해보십시오. 그것은 나에게 완전한 기능입니다. 주석 처리 된 행에 HttpRequest를 구현해야합니다. JSON 배열은 하드 코딩되어 있습니다.

// the Adapter 
public class ListViewAdapter extends BaseAdapter { 

    private Context context = null; 
    private List<String> fields = null; 

    public ListViewAdapter(Context context, JSONArray arr) { 
     this.context = context; 
     this.fields = new ArrayList<String>(); 
     for (int i=0; i<arr.length(); ++i) { 
      try { 
       fields.add(arr.getJSONObject(i).toString()); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    @Override 
    public int getCount() { 
     return fields.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return fields.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup viewGroup) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.itemlist, null); 
     TextView txt = (TextView) convertView.findViewById(R.id.ItemList_txt); 
     txt.setText(fields.get(position)); 
     return convertView; 
    } 

} 

// the activity 
public class ListViewActivity extends Activity { 

    public final String result = "[{\"idPrimary_key\":\"21ye21\",\"kategori\":\"FirstCategory\"},{\"idPrimary_key\":\"89oy89\",\"kategori\":\"SecondCategory\"},{\"idPrimary_key\":\"34ew34\",\"kategori\":\"ThirdCategory\"}]"; 
    public final String obj = "{\"kat\":"+result+"}"; 

    private ListViewAdapter adapter = null; 
    private ListView myList = null; 
    private JSONArray items = new JSONArray(); 

    final Handler handler = new Handler() { 
     @Override 
     public void handleMessage(android.os.Message msg) { 
      if (msg.what == 0) { // server returned null, try again 
       loadFields(); 
      } else if(msg.what == 1) { // error in json 
       // do something to treat it 
      } else if (msg.what == 2) { // ready to roll the list 
       adapter = new ListViewAdapter(ListViewActivity.this, items); 
       myList.setAdapter(adapter); 
       adapter.notifyDataSetChanged(); 
      } 
     } 
    }; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    myList = (ListView) findViewById(R.id.Lists_notificationsListview); 
    loadFields(); 
} 

private void loadFields() { 
    new Thread() { 
     @Override 
     public void run() { 
      Looper.prepare(); 
      StringBuilder builder = new StringBuilder(obj); 
      if (builder != null) { 
       try { 
        // HERE, you should implement the HTTP request... 
        items = new JSONObject(obj).getJSONArray("kat"); 
        handler.sendEmptyMessage(2); 
       } catch (JSONException e) { 
        handler.sendEmptyMessage(1); 
       } 
      } else { 
       handler.sendEmptyMessage(0); 
      } 
      Looper.loop(); 
     } 
    }.start(); 
} 

하고 XML 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:isScrollContainer="true"> 
     <ListView 
      android:id="@+id/Lists_notificationsListview" 
      android:layout_width="fill_parent" android:layout_height="match_parent"> 
     </ListView> 
    </RelativeLayout> 
</LinearLayout> 

단지를 분석, 당신은 당신이 원하는 목록을 만들 사용자 정의 할 수 있습니다, 물론

enter image description here

:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <TextView 
     android:id="@+id/ItemList_txt" 
     android:layout_width="fill_parent" android:layout_height="wrap_content"/> 
</LinearLayout> 
결과

는, 다음 뷰를 생성 제슨! 어떤 점에서 도움이 되었기를 희망합니다 ...

+0

감사합니다 mthana, 나는 이것을 시도하고, 잘 작동합니다. 하지만 "kategori"만 사용하려면 어떻게해야합니까? – AdityaSetyadi

+0

나는 이미 내 문제를 고맙게 생각했다. ArrayList 으로 어댑터를 변경 한 다음 jsonarray를 반복하고 활동에서 추가하려고했다. – AdityaSetyadi

+0

루프가 어떻게 멈추는 지 설명 할 수 있습니까? – Austin

관련 문제