Я получаю файл json с сервера, анализирующего список, и пытаюсь обновить представление списка, я вижу, что когда я пробую эту строку кода
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ReadWebpageAsyncTask.this,R.layout.medialist, mediaList);
это работает просто отлично, но когда я пытаюсь эту строку "myListView.setAdapter (adapter);" все идет не так, вы, ребята, видите, что я делаю неправильно, любая помощь будет принята с благодарностью.
package de.vogella.android.asynctask;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;
import android.app.Activity;
import android.app.ListActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ReadWebpageAsyncTask extends ListActivity {
private TextView textView;
public ListView myListView = null;
List<String> mediaList = new ArrayList();
ArrayAdapter<String> adapter;
String[] newArray;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
//String[] myMediList = mediaList.toArray(mediaList);
newArray = new String[mediaList.size()];mediaList.toArray(newArray);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, newArray);
setListAdapter(adapter);
readWebpage(myListView);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String item = (String) getListAdapter().getItem(position);
Toast.makeText(this, item + " selected", Toast.LENGTH_LONG);
}
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
String responseBuilder;
String responseString = "";
JSONArray jsonArray;
JSONObject jObject = new JSONObject();
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
try {
//JSONObject json = new JSONObject(response);
//JSONObject jObject = new JSONObject(response);
//jObject = response.t
jsonArray = new org.json.JSONArray(response);
jObject = jsonArray.toJSONObject(jsonArray);
for (int i=0;i<jObject.length();i++)
{
responseBuilder="\n";
responseBuilder+= "\n title: "+((JSONObject) jsonArray.getJSONObject(i).get("videoinfo")).get("title");
responseBuilder+= "\n subject: "+ ((JSONObject) jsonArray.getJSONObject(i).get("videoinfo")).get("subject");
responseBuilder+= "\n language: "+ ((JSONObject) jsonArray.getJSONObject(i).get("videoinfo")).get("language");
responseBuilder+= "\n date: "+ ((JSONObject) jsonArray.getJSONObject(i).get("videoinfo")).get("date");
mediaList.add(responseBuilder);
responseString += responseBuilder;
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myListView = (ListView) findViewById (R.id.lv);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ReadWebpageAsyncTask.this,
R.layout.medialist,
mediaList);
myListView.setAdapter(adapter);
adapter.notifyDataSetChanged();
return responseString;
//final ArrayAdapter <String> aa;
//aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mediaList);
// Bind the array adapter to the listview
//myListView.setAdapter(aa);
}
@Override
protected void onPostExecute(String result) {
textView.setText(result);
adapter.notifyDataSetChanged();
//textView.setText(myListView.toString());
//final ArrayAdapter <String> aa;
//aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mediaList);
//Bind the array adapter to the listview
//myListView.setAdapter(aa);
}
}
public void readWebpage(View view) {
DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[] { "http://hummedia.byu.edu/mediainfo/search/?title=Harry" });
}
}
вот мой след стека:
11-18 10:54:55.946: W/dalvikvm(790): threadid=11: thread exiting with uncaught exception (group=0x409951f8)
11-18 10:54:56.323: E/AndroidRuntime(790): FATAL EXCEPTION: AsyncTask #1
11-18 10:54:56.323: E/AndroidRuntime(790): java.lang.RuntimeException: An error occured while executing doInBackground()
11-18 10:54:56.323: E/AndroidRuntime(790): at android.os.AsyncTask$3.done(AsyncTask.java:278)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-18 10:54:56.323: E/AndroidRuntime(790): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.lang.Thread.run(Thread.java:856)
11-18 10:54:56.323: E/AndroidRuntime(790): Caused by: java.lang.NullPointerException
11-18 10:54:56.323: E/AndroidRuntime(790): at de.vogella.android.asynctask.ReadWebpageAsyncTask$DownloadWebPageTask.doInBackground(ReadWebpageAsyncTask.java:122)
11-18 10:54:56.323: E/AndroidRuntime(790): at de.vogella.android.asynctask.ReadWebpageAsyncTask$DownloadWebPageTask.doInBackground(ReadWebpageAsyncTask.java:1)
11-18 10:54:56.323: E/AndroidRuntime(790): at android.os.AsyncTask$2.call(AsyncTask.java:264)
11-18 10:54:56.323: E/AndroidRuntime(790): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-18 10:54:56.323: E/AndroidRuntime(790): ... 5 more