package com.fedorvlasov.lazylist;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
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.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

 private String jsonResult;
 private String url = "http://127.0.0.1/entertain.php";
 private String output = "";
 ListView list;
 LazyAdapter adapter;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  list = (ListView) findViewById(R.id.list);

  accessWebService();

  Button b = (Button) findViewById(R.id.button1);
  b.setOnClickListener(listener);

 }

 @Override
 public void onDestroy() {
  list.setAdapter(null);
  super.onDestroy();
 }

 public OnClickListener listener = new OnClickListener() {
  @Override
  public void onClick(View arg0) {
   adapter.imageLoader.clearCache();
   adapter.notifyDataSetChanged();
  }
 };

 private class JsonReadTask extends AsyncTask<String, Void, String> {

  @Override
  protected String doInBackground(String... params) {

   HttpClient httpclient = new DefaultHttpClient();
   HttpGet httpget = new HttpGet(params[0]);
   try {
    HttpResponse response = httpclient.execute(httpget);   

  // 이후 진행이 되지 않아 jsonResult값이 들어가질 않습니다.

 // 방화벽 문제인가 싶어 방화벽 해제 후 진행 해 보았지만 해결되지 않았습니다.

 

    jsonResult = inputStreamToString(
      response.getEntity().getContent()).toString();
    
    Log.v("jsonResult 111 : " + jsonResult , "@@@");
    
   } catch (ClientProtocolException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return null;
  }

  private StringBuilder inputStreamToString(InputStream is) {
   String rLine = "";
   StringBuilder answer = new StringBuilder();
   BufferedReader rd = new BufferedReader(new InputStreamReader(is));
   try {
    while ((rLine = rd.readLine()) != null) {
     answer.append(rLine);
    }
   } catch (IOException e) {
    Toast.makeText(getApplicationContext(),
      "Error..." + e.toString(), Toast.LENGTH_LONG).show();
   }
   return answer;
  }

  protected void onPostExecute(String result) {

   ListDrwaer();
  }
 }

 public void accessWebService() {
  JsonReadTask task = new JsonReadTask();

  task.execute(new String[] { url });
 }

 public void ListDrwaer() {
  List<Map<String, String>> entertainList = new ArrayList<Map<String, String>>();

  try {  
   JSONObject jsonResponse = new JSONObject(jsonResult);
   JSONArray jsonMainNode = jsonResponse.optJSONArray("myentertain");
   for (int i = 0; i < jsonMainNode.length(); i++) {
    JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
    String name = jsonChildNode.optString("Name");
    String birth = jsonChildNode.optString("Birth");
    // String physical = jsonChildNode.optString("Physical");
    // String agency = jsonChildNode.optString("Agency");
    output = name + " " + birth;// + " " + physical + " " +
           // agency;
    entertainList.add(createEntertain("entertain", output));
   }
  } catch (JSONException e) {
   Toast.makeText(getApplicationContext(), "Error" + e.toString(),
     Toast.LENGTH_SHORT).show();
  }

  // SimpleAdapter simpleAdapter = new SimpleAdapter(this,
  // entertainList,
  // android.R.layout.simple_list_item_1,
  // new String[] { "entertain" }, new int[] { android.R.id.text1 });
  // LazyAdapter adapter;
  // adapter = new LazyAdapter(this, mStrings, output);

  // list.setAdapter(adapter);
  adapter = new LazyAdapter(this, mStrings, output);
  list.setAdapter(adapter);
 }

 private HashMap<String, String> createEntertain(String name, String agency) {
  HashMap<String, String> Entertainlist = new HashMap<String, String>();
  Entertainlist.put(name, agency);
  return Entertainlist;
 }

 private String[] mStrings = {
   "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png",
   "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png" };
}

 

11-27 16:11:10.762: E/AndroidRuntime(1097): FATAL EXCEPTION: main
11-27 16:11:10.762: E/AndroidRuntime(1097): java.lang.NullPointerException
11-27 16:11:10.762: E/AndroidRuntime(1097):  at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at org.json.JSONTokener.nextValue(JSONTokener.java:94)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at org.json.JSONObject.<init>(JSONObject.java:154)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at org.json.JSONObject.<init>(JSONObject.java:171)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at com.fedorvlasov.lazylist.MainActivity.ListDrwaer(MainActivity.java:122)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at com.fedorvlasov.lazylist.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:108)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at com.fedorvlasov.lazylist.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:1)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at android.os.AsyncTask.finish(AsyncTask.java:631)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at android.os.Looper.loop(Looper.java:137)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at android.app.ActivityThread.main(ActivityThread.java:4745)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at java.lang.reflect.Method.invokeNative(Native Method)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at java.lang.reflect.Method.invoke(Method.java:511)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-27 16:11:10.762: E/AndroidRuntime(1097):  at dalvik.system.NativeStart.main(Native Method)