Разобрать данные JSON в Android ListView - PullRequest
0 голосов
/ 08 марта 2011

Я уже давно скрываюсь на этом сайте, к счастью, до сих пор на все мои вопросы были даны ответы. Я надеялся, что некоторые из вас смогут пролить свет на мою проблему здесь. Я могу успешно получить ListView для отображения массива строк - но когда я пытаюсь проанализировать данные JSON в массив - моя программа просто принудительно закрывается, и LogCat мне мало помогает. Anywho - вот код, который я использую.

String[] journals = {"Filler"};
String result;
JSONArray jArray[];
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try{
  //http post
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://xxx.xxx.xxx.xxx/query.php");
            org.apache.http.HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream is = entity.getContent();


  //convert response to string
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();

            result=sb.toString();

   //I think the problem is somewhere here ....
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                    JSONObject json_data = jArray.getJSONObject(i);
                    journals[i] = json_data.getString("JournalName");
                    Log.i("log_tag","JournalID: "+json_data.getInt("JournalID") +
                            ",JournalName: " + json_data.getString("JournalName"));
            }
    }
    catch (Exception e) {
    }

    //Or here -- I know this code should REALLY be separated and not in onCreate -- I feel like that's half my problem
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, journals));
    ListView lv = getListView();

Заранее спасибо, ребята! Я ценю это.

03-07 22:24:33.060: ERROR/AndroidRuntime(7986): FATAL EXCEPTION: main
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.SurvAcademia}: java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}: java.lang.NullPointerException
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.os.Looper.loop(Looper.java:123)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.lang.reflect.Method.invoke(Method.java:521)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at dalvik.system.NativeStart.main(Native Method)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{Andrew.Badura.A4A.com/Andrew.Badura.A4A.com.JournalActivity}: java.lang.NullPointerException
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.TabHost.setCurrentTab(TabHost.java:326)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.TabHost.addTab(TabHost.java:216)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at Andrew.Badura.A4A.com.SurvAcademia.onCreate(SurvAcademia.java:25)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     ... 11 more
03-07 22:24:33.060: ERROR/AndroidRuntime(7986): Caused by: java.lang.NullPointerException
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.util.Arrays$ArrayList.<init>(Arrays.java:49)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at java.util.Arrays.asList(Arrays.java:171)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:125)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at Andrew.Badura.A4A.com.JournalActivity.onCreate(JournalActivity.java:69)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-07 22:24:33.060: ERROR/AndroidRuntime(7986):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

Ответы [ 2 ]

1 голос
/ 10 марта 2011

вы можете использовать открытый API Gson.jar для извлечения данных из Json. Он извлекает данные стандартизированным способом ... попробуйте, например, ... http://blog.foos -bar.com / 2010/08/parsing-facebook-json.html

1 голос
/ 08 марта 2011

Этот код неверен на многих уровнях, начиная с игнорирования соглашений Java и полностью поглощенной обработкой исключений.

Я бы настоятельно рекомендовал выполнять любые виды удаленных вызовов в основном потоке вашего приложения. Вам нужно обернуть его как минимум в AsyncTask (или, возможно, в Service) и заполнить свой ListView с помощью обратного вызова, чтобы убедиться, что вы вернулись в основной поток пользовательского интерфейса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...