适配器无法在Android上从JSON加载图像

时间:2016-04-18 03:20:28

标签: java android json

我的JSON代码有问题。 我想显示包含文本和图像的列表。存储在我的在线数据库中的文本和图像,我使用JSON将它们下载到我的Android应用程序。

JSON不显示任何错误,显示文本但不显示图像。

我检查了logcat,这个过程没有错误。我使用viewAdapter在列表中显示图像。

请高手帮帮我,你能给我一些简单的解释如何解决这个问题吗?

...谢谢

NB。这是我的HomeFragment.java代码(我在做JSON)。

Pie 3.14515 69 true
Apple 4.234 42 true
Potato 5 4.532 false
Carrot 55 1.2204 true
Corn 7.53221 12 false

}

categoryAdapter.java的代码(我把JSON的结果放到列表中)

public class HomeFragment extends Fragment implements InternetConnectionListener, ApiHandler.ApiHandlerListener {

private static final String ARG_SECTION_NUMBER = "section_number";
private final int CATEGORY_ACTION = 1;
private CategorySelectionCallbacks mCallbacks;
private ArrayList<Category> categoryList;
private ListView categoryListView;
private String Error = null;
private InternetConnectionListener internetConnectionListener;

public HomeFragment() {

}

public static HomeFragment newInstance(int sectionNumber) {
    HomeFragment fragment = new HomeFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, sectionNumber);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    ((HomeActivity) activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER));
    try {
        mCallbacks = (CategorySelectionCallbacks) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException("Activity must implement CategorySelectionCallbacks.");
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_home, container, false);
    categoryListView = (ListView) rootView.findViewById(R.id.categoryListView);
    return rootView;
}

@Override
public void onResume() {
    super.onResume();
    if (UtilMethods.isConnectedToInternet(getActivity())) {
        initCategoryList();
    } else {
        internetConnectionListener = (InternetConnectionListener) HomeFragment.this;
        showNoInternetDialog(getActivity(), internetConnectionListener,
                getResources().getString(R.string.no_internet),
                getResources().getString(R.string.no_internet_text),
                getResources().getString(R.string.retry_string),
                getResources().getString(R.string.exit_string), CATEGORY_ACTION);
    }

}

public class getCategList extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... params) {

        /**
         * json is populating from text file. To make api call use ApiHandler class
         *
         *  <CODE>ApiHandler apiHandler = new ApiHandler(this, URL_GET_CATEGORY);</CODE> <BR>
         *  <CODE>apiHandler.doApiRequest(ApiHandler.REQUEST_GET);</CODE> <BR>
         *
         * You will get the response in onSuccessResponse(String tag, String jsonString) method
         * if successful api call has done. Do the parsing as the following.
         */
        URL hp = null;
        try {
            hp = new URL(
                    getString(R.string.liveurl) + "foodcategory.php");

            Log.d("URL", "" + hp);
            URLConnection hpCon = hp.openConnection();
            hpCon.connect();
            InputStream input = hpCon.getInputStream();

            BufferedReader r = new BufferedReader(new InputStreamReader(input));

            String x = "";
            x = r.readLine();
            String total = "";

            while (x != null) {
                total += x;
                x = r.readLine();
            }
            Log.d("UR1L", "" + total);

            JSONArray j = new JSONArray(total);

            Log.d("URL1", "" + j.length());



            categoryList = new ArrayList<Category>();

            for (int i = 0; i < j.length(); i++) {
                Category category = new Category();// buat variabel category
                JSONObject Obj;
                Obj = j.getJSONObject(i); //sama sperti yang lama, cman ini lebih mempersingkat karena getJSONObject cm d tulis sekali aja disini

                category.setId(Obj.getString(JF_ID));
                category.setTitle(Obj.getString(JF_TITLE));
                category.setIconUrl(Obj.getString(JF_ICON));

                if (!TextUtils.isEmpty(Obj.getString(JF_BACKGROUND_IMAGE))) {
                    category.setImageUrl(Obj.getString(JF_BACKGROUND_IMAGE));
                }
                Log.d("URL1",""+Obj.getString(JF_TITLE));
                categoryList.add(category);
            }

            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    categoryListView.setAdapter(new CategoryAdapter(getActivity(), mCallbacks, categoryList));
                }
            });



        }catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Error = e.getMessage();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Error = e.getMessage();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            Error = e.getMessage();
            e.printStackTrace();
        } catch (NullPointerException e) {
            // TODO: handle exception
            Error = e.getMessage();
        }
        return null;
    }
}



//! function for populate category list
private void initCategoryList() {
        new getCategList().execute();
}

@Override
public void onConnectionEstablished(int code) {
    if (code == CATEGORY_ACTION) {
        initCategoryList();
    }
}

@Override
public void onUserCanceled(int code) {
    if (code == CATEGORY_ACTION) {
        getActivity().finish();
    }
}

//! catch json response from here
@Override
public void onSuccessResponse(String tag, String jsonString) {
    //! do same parsing as done in initCategoryList()
}

//! detect response error here
@Override
public void onFailureResponse(String tag) {

}

//! callback interface listen by HomeActivity to detect user click on category
public static interface CategorySelectionCallbacks {
    void onCategorySelected(String catID, String title);
}

}

1 个答案:

答案 0 :(得分:0)

试试这个。

Picasso.with(activity).load(category.getIconUrl())
        .into(row.categoryImage);

如果有效!你检查UtilMethods.getDrawableFromFileName()!!!