Airbon Kalz
Airbon Kalz

Reputation: 1

Someone can help me with Android JSON Retrieving Data from URL Web Server

I followed this tutorial.

This is my final code from MainActivity.java:

@SuppressLint({ "NewApi", "NewApi" })
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Permission StrictMode
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    // listView1
    final ListView lisView1 = (ListView)findViewById(R.id.listView1);   

    /** JSON return
     *  [{"MemberID":"1","Name":"Weerachai","Tel":"0819876107"},
     * {"MemberID":"2","Name":"Win","Tel":"021978032"},
     * {"MemberID":"3","Name":"Eak","Tel":"0876543210"}]
     */

    String url = "http://10.0.2.2/Json/getJSON2.php";

    try {

        JSONArray data = new JSONArray(getJSONUrl(url));

        final ArrayList<HashMap<String, String>> MyArrList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map;

        for(int i = 0; i < data.length(); i++){
            JSONObject c = data.getJSONObject(i);

            map = new HashMap<String, String>();
            map.put("MemberID", c.getString("MemberID"));
            map.put("Name", c.getString("Name"));
            map.put("Tel", c.getString("Tel"));
            MyArrList.add(map);

        }


        SimpleAdapter sAdap;
        sAdap = new SimpleAdapter(MainActivity.this, MyArrList, R.layout.activity_column,
                new String[] {"MemberID", "Name", "Tel"}, new int[] {R.id.ColMemberID, R.id.ColName, R.id.ColTel});      
        lisView1.setAdapter(sAdap);

        final AlertDialog.Builder viewDetail = new AlertDialog.Builder(this);
        // OnClick Item
        lisView1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> myAdapter, View myView,
                    int position, long mylng) {

                String sMemberID = MyArrList.get(position).get("MemberID")
                        .toString();
                String sName = MyArrList.get(position).get("Name")
                        .toString();
                String sTel = MyArrList.get(position).get("Tel")
                        .toString();

                //String sMemberID = ((TextView) myView.findViewById(R.id.ColMemberID)).getText().toString();
                // String sName = ((TextView) myView.findViewById(R.id.ColName)).getText().toString();
                // String sTel = ((TextView) myView.findViewById(R.id.ColTel)).getText().toString();

                viewDetail.setIcon(android.R.drawable.btn_star_big_on);
                viewDetail.setTitle("Member Detail");
                viewDetail.setMessage("MemberID : " + sMemberID + "\n"
                        + "Name : " + sName + "\n" + "Tel : " + sTel);
                viewDetail.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub
                                dialog.dismiss();
                            }
                        });
                viewDetail.show();

            }
        });


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

}


public String getJSONUrl(String url) {
    StringBuilder str = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    try {
        HttpResponse response = client.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if (statusCode == 200) { // Download OK
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
                str.append(line);
            }
        } else {
            Log.e("Log", "Failed to download result..");
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return str.toString();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}

And then while I run program to test, my logcat found this warning:

and the result on simulator is a blank screen of listview.

I still don't know how to fix it, does anyone have an idea?

Upvotes: 0

Views: 256

Answers (2)

Yajneshwar Mandal
Yajneshwar Mandal

Reputation: 943

I think response JSON with wrong format. That's why you get the Exception. Please check the response string before convert it into JSON.

Upvotes: 2

Martin
Martin

Reputation: 4816

You could run this in the debugger and check the value of data, but likely that's where the error is occuring, so perhaps at this line: return str.toString(); in the method getJSONUrl you could check the value of str.

Any errors your webserver finds will be included as error messages and maybe that's what your code is choking on.

Upvotes: 0

Related Questions