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)