2

私はアンドロイド開発が初めてです。mainactivity で使用する場合は JSON に問題はありませんが、コードを ListFragment に移動すると問題が発生します

この行は何も起こりません: JSONObject json = userFunctions.announcementFeed(myID, myType);

完全なコードは次のとおりです。

package com.example.demo123;
import java.util.ArrayList;
import java.util.HashMap;
import library.UserFunctions;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleAdapter;

public class AnnouncementList extends ListFragment {
private static final String TAG = "MyAnnouncement"; 

JSONArray announcementList = null;            
UserFunctions userFunctions;

String myID = MainActivity.myID;
String myType = MainActivity.myType;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {      
    return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    Log.i(TAG,"START ANNOUNCEMENT LIST");

    ArrayList<HashMap<String, String>> theAnnnouncement = new ArrayList<HashMap<String, String>>();
    JSONObject json = userFunctions.announcementFeed(myID, myType);

    try {
        if (json.getString("success") != null) {
            announcementList = json.getJSONArray("announceDT");
            for (int i = 0; i < announcementList.length(); i++) {
                JSONObject c = announcementList.getJSONObject(i);
                String title = c.getString("topic");
                String course = c.getString("course") + " - " + c.getString("courseTitle");
                String created = "By " + c.getString("entered_by") + " | " + c.getString("entry_date");

                HashMap<String, String> map = new HashMap<String, String>();
                map.put("title", title);
                map.put("course", course);
                map.put("created", created);

                theAnnnouncement.add(map);
            }
        }                
    } catch (JSONException e) {
        e.printStackTrace();
    }

    String[] from = { "title","course","created" };
    int[] to = { R.id.title,R.id.course,R.id.created};

    SimpleAdapter adapter = new SimpleAdapter(getActivity().getBaseContext(), theAnnnouncement, R.layout.list_item, from, to);            
    setListAdapter(adapter);        
}

}

4

1 に答える 1

1

そのロジックを onActivityCreated に入れることが絶対に必要なのはなぜですか? Fragment はその時点で完全には初期化されないため、そのロジックを onResume または別の場所に移動することをお勧めします。

編集:あなたがリンクしたコードと、announceFeed() メソッドを調べました。

このメソッドから、メインスレッドでネットワークを実行しようとしているようです。

public JSONObject announcementFeed(String username, String userType){
    ..................................

    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    return json;
}

onActivityCreated でこのメソッドを呼び出しています。これをバックグラウンド スレッドまたはAsyncTaskに移動することをお勧めします。それでも、LogCat がなければ、何が起こっているのかを 100% 確信することはできませんが、少なくともそれをはっきりと指摘することはできます。

于 2013-07-24T04:35:21.353 に答える