Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialStas Novsky
3,119 PointsApp is crushing. What I did wrong with App?
My App still showing "No items to display", after i set up Adapter btw I'm working in Android Studio not Eclipse. Now it's showing Bummer Unforttunally BlogReader has stopped
New Data from LogCat
02-07 16:34:11.384 2368-2386/com.novsky.zefir.blogreader E/MainListActivity﹕ exception caught:
org.json.JSONException: Unterminated string at character 3244 of {"status":"ok","count":10,"count_total":1949,"pages":195,"posts":[{"id":24680,"url":"http:\/\/blog.teamtreehouse.com\/create-sticky-navigation","title":"How to Create a Sticky Navigation","date":"2015-02-05 14:44:13","author":"Guil Hernandez","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/01\/sticky-150x150.jpg"},{"id":24690,"url":"http:\/\/blog.teamtreehouse.com\/hooks-wordpress-actions-filters-examples","title":"WordPress Hooks: Actions, Filters, and Examples","date":"2015-02-04 09:57:04","author":"Zac Gordon","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/01\/hooks-in-wordpress-150x150.png"},{"id":24712,"url":"http:\/\/blog.teamtreehouse.com\/font-families-hamburger-menus-flux-treehouse-show-episode-126","title":"Font Families, Hamburger Menus, Flux | The Treehouse Show | Episode 126","date":"2015-02-03 11:35:10","author":"Chris Zabriskie","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/02\/Scre���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
02-07 16:34:11.431 2368-2368/com.novsky.zefir.blogreader E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.novsky.zefir.blogreader, PID: 2368
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.novsky.zefir.blogreader.MainListActivity.updateDisplayForError(MainListActivity.java:120)
at com.novsky.zefir.blogreader.MainListActivity.handleBlogResponse(MainListActivity.java:86)
at com.novsky.zefir.blogreader.MainListActivity.access$100(MainListActivity.java:33)
at com.novsky.zefir.blogreader.MainListActivity$GetBlogPostTask.onPostExecute(MainListActivity.java:165)
at com.novsky.zefir.blogreader.MainListActivity$GetBlogPostTask.onPostExecute(MainListActivity.java:123)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
My Java file
package com.novsky.zefir.blogreader;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
public class MainListActivity extends ListActivity {
public static final int NUMBER_OF_POSTS = 20;
public static final String TAG = MainListActivity.class.getSimpleName();
protected JSONObject mBlogData;
protected ProgressBar mProgressBar;
private final String KEY_TITLE = "title";
private final String KEY_AUTHOR = "autor";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_list);
mProgressBar = (ProgressBar)findViewById(R.id.progressBar);
if (isNetworkAvaliable()) {
mProgressBar.setVisibility(View.VISIBLE);
GetBlogPostTask getBlogPostTask = new GetBlogPostTask();
getBlogPostTask.execute();
} else {
Toast.makeText(this, getString(R.string.network_unavaliable_message), Toast.LENGTH_LONG).show();
}
}
private boolean isNetworkAvaliable() {
ConnectivityManager manager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvaliable = false;
if(networkInfo !=null && networkInfo.isConnected()){
isAvaliable = true;
}
return isAvaliable;
}
private void handleBlogResponse() {
mProgressBar.setVisibility(View.INVISIBLE);
if(mBlogData == null){
updateDisplayForError();
}else {
try {
JSONArray jsonPosts = mBlogData.getJSONArray("posts");
ArrayList<HashMap<String, String>> blogPosts =
new ArrayList<HashMap<String, String>>();
for (int i = 0; i < jsonPosts.length(); i++) {
JSONObject post = jsonPosts.getJSONObject(i);
String title = post.getString(KEY_TITLE);
title = Html.fromHtml(title).toString();
String author = post.getString(KEY_AUTHOR);
author = Html.fromHtml(author).toString();
HashMap<String, String> blogPost = new HashMap<String, String>();
blogPost.put(KEY_TITLE, title);
blogPost.put(KEY_AUTHOR, author);
blogPosts.add(blogPost);
}
String[] keys = {KEY_TITLE, KEY_AUTHOR};
int[] ids = {android.R.id.text1, android.R.id.text2};
SimpleAdapter adapter = new SimpleAdapter(this, blogPosts,
android.R.layout.simple_list_item_2, keys, ids);
setListAdapter(adapter);
} catch (JSONException e) {
Log.e(TAG, "Exception caugth!", e);
}
}
}
private void updateDisplayForError() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.error_title));
builder.setMessage(getString(R.string.error_message));
builder.setPositiveButton(android.R.string.ok, null);
AlertDialog dialog = builder.create();
dialog.show();
TextView emptyTextView = (TextView) getListView().getEmptyView();
emptyTextView.setText(getString(R.string.no_items));
}
private class GetBlogPostTask extends AsyncTask<Object, Void, JSONObject>{
int responseCode = -1;
JSONObject jsonResponse = null;
@Override
protected JSONObject doInBackground(Object... params) {
try {
URL blogFeedUrl = new URL("http://blog.teamtreehouse.com/api/get_recent_summary/?count=" + NUMBER_OF_POSTS);
HttpURLConnection connection = (HttpURLConnection) blogFeedUrl.openConnection();
connection.connect();
responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK){
InputStream inputStream = connection.getInputStream();
Reader reader = new InputStreamReader(inputStream);
int contentLength = connection.getContentLength();
char[] charArray = new char[contentLength];
reader.read(charArray);
String responseData = new String(charArray);
jsonResponse = new JSONObject(responseData);
} else {
Log.i(TAG, "Unsuccessful HTTP response CODE: " + responseCode);
}
} catch (MalformedURLException e) {
Log.e(TAG, "exception caught: ", e);
} catch (IOException e) {
Log.e(TAG, "exception caught: ", e);
} catch (Exception e){
Log.e(TAG, "exception caught: ", e);
}
return jsonResponse;
}
@Override
protected void onPostExecute(JSONObject result){
mBlogData = result;
handleBlogResponse();
}
}
}
5 Answers
Eric Michaud
6,547 PointsThe issue is here...
TextView emptyTextView = (TextView) getListView().getEmptyView();
emptyTextView.setText(getString(R.string.no_items));
It is because getListView().getEmptyView() is returning null. Make sure that in your activity_main_list.xml layout you have a TextView with android:id="@android:id/empty"
Stas Novsky
3,119 PointsNow It's saying There was an Error getting data from the Blog. I think the problem is in Data from Blog. I was searching for solution and found something about problem with Blog Data and "&" symbol.
02-08 22:48:18.617 3627-3627/? E/memtrack﹕ Couldn't load memtrack module (No such file or directory)
02-08 22:48:18.618 3627-3627/? E/android.os.Debug﹕ failed to load memtrack module: -2
02-08 22:48:41.289 153-153/? E/EGL_emulation﹕ tid 153: eglCreateSyncKHR(1181): error 0x3004 (EGL_BAD_ATTRIBUTE)
02-08 22:48:52.103 3648-3648/? E/memtrack﹕ Couldn't load memtrack module (No such file or directory)
02-08 22:48:52.103 3648-3648/? E/android.os.Debug﹕ failed to load memtrack module: -2
02-08 22:48:52.814 3543-3661/com.novsky.zefir.blogreader E/MainListActivity﹕ exception caught:
org.json.JSONException: Unterminated string at character 3244 of {"status":"ok","count":10,"count_total":1949,"pages":195,"posts":[{"id":24680,"url":"http:\/\/blog.teamtreehouse.com\/create-sticky-navigation","title":"How to Create a Sticky Navigation","date":"2015-02-05 14:44:13","author":"Guil Hernandez","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/01\/sticky-150x150.jpg"},{"id":24690,"url":"http:\/\/blog.teamtreehouse.com\/hooks-wordpress-actions-filters-examples","title":"WordPress Hooks: Actions, Filters, and Examples","date":"2015-02-04 09:57:04","author":"Zac Gordon","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/01\/hooks-in-wordpress-150x150.png"},{"id":24712,"url":"http:\/\/blog.teamtreehouse.com\/font-families-hamburger-menus-flux-treehouse-show-episode-126","title":"Font Families, Hamburger Menus, Flux | The Treehouse Show | Episode 126","date":"2015-02-03 11:35:10","author":"Chris Zabriskie","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/02\/Screenshot-2015-02-03-11.34.26-150x150.png"},{"id":24706,"url":"http:\/\/blog.teamtreehouse.com\/nested-routes-laravel-4","title":"Nested Routes in Laravel 4","date":"2015-02-03 11:27:04","author":"Hampton Paulk","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/02\/Screenshot-2015-02-03-11.26.04-150x150.png"},{"id":24693,"url":"http:\/\/blog.teamtreehouse.com\/add-navigation-drawer-android","title":"How to Add a Navigation Drawer in Android","date":"2015-02-02 14:54:34","author":"Ben Jakuben","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
what means these symbols "�"?
Eric Michaud
6,547 PointsTry replacing your doInBackground method with the one Ben posted in this thread: https://teamtreehouse.com/forum/trying-to-retrieve-data-from-my-own-blog-help
Stas Novsky
3,119 Points02-09 22:40:45.079 4194-4256/com.novsky.zefir.blogreader E/MainListActivity﹕ exception caught:
org.json.JSONException: Unterminated string at character 3244 of {"status":"ok","count":10,"count_total":1949,"pages":195,"posts":[{"id":24680,"url":"http:\/\/blog.teamtreehouse.com\/create-sticky-navigation","title":"How to Create a Sticky Navigation","date":"2015-02-05 14:44:13","author":"Guil Hernandez","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/01\/sticky-150x150.jpg"},{"id":24690,"url":"http:\/\/blog.teamtreehouse.com\/hooks-wordpress-actions-filters-examples","title":"WordPress Hooks: Actions, Filters, and Examples","date":"2015-02-04 09:57:04","author":"Zac Gordon","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/01\/hooks-in-wordpress-150x150.png"},{"id":24712,"url":"http:\/\/blog.teamtreehouse.com\/font-families-hamburger-menus-flux-treehouse-show-episode-126","title":"Font Families, Hamburger Menus, Flux | The Treehouse Show | Episode 126","date":"2015-02-03 11:35:10","author":"Chris Zabriskie","thumbnail":"http:\/\/blog.teamtreehouse.com\/wp-content\/uploads\/2015\/02\/Screen�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
the same diamonds after replacing Ben's code
Eric Michaud
6,547 PointsOkay, undo what I said before, and go back to the thread. Look for the guy who posted an answer under Ben's and do what he says.
Stas Novsky
3,119 PointsStas Novsky
3,119 Pointsit was that, but I have a new problem now)