Android Studio ListViewAdapter错误

时间:2015-09-29 03:38:41

标签: android

请帮我解决这个问题..

我将之前的问题改为此..

我无法发布新问题,因为我有被封锁的危险..

继承人我的问题..

我试图从数据库中获取数据,但是当我运行应用程序时出现此错误..

    09-29 13:41:07.032  26507-26507/? E/Error﹕ No value for result
09-29 13:41:07.032  26507-26507/? W/System.err﹕ org.json.JSONException: No value for result
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at org.json.JSONObject.get(JSONObject.java:354)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at org.json.JSONObject.getJSONArray(JSONObject.java:548)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at com.example.administrator.mosbeau.CategoryFragment.prepareListData(CategoryFragment.java:249)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at com.example.administrator.mosbeau.CategoryFragment$1GetDataJSON.onPostExecute(CategoryFragment.java:233)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at com.example.administrator.mosbeau.CategoryFragment$1GetDataJSON.onPostExecute(CategoryFragment.java:180)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:631)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5494)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691)
09-29 13:41:07.032  26507-26507/? W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
09-29 13:41:07.042  26507-26507/? I/MemoryCache﹕ MemoryCache will use up to 24.0MB
09-29 13:41:07.042  26507-26507/? D/AndroidRuntime﹕ Shutting down VM
09-29 13:41:07.042  26507-26507/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418e38e0)
09-29 13:41:07.042  26507-26507/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.example.administrator.mosbeau.ListViewAdapter.getCount(ListViewAdapter.java:38)
            at android.widget.ListView.setAdapter(ListView.java:463)
            at com.example.administrator.mosbeau.CategoryFragment$1GetDataJSON.onPostExecute(CategoryFragment.java:236)
            at com.example.administrator.mosbeau.CategoryFragment$1GetDataJSON.onPostExecute(CategoryFragment.java:180)
            at android.os.AsyncTask.finish(AsyncTask.java:631)
            at android.os.AsyncTask.access$600(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5494)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691)
            at dalvik.system.NativeStart.main(Native Method)
09-29 13:41:07.052     941-7799/? I/ActivityManager﹕ Notify an ApplicationCrash

这是代码..

CategoryFragment.java

package com.example.administrator.mosbeau;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ListView;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Created by Administrator on 9/18/2015.
 */
public class CategoryFragment extends Fragment {

    public static CategoryFragment newInstance(String id,String name) {
        CategoryFragment fragment = new CategoryFragment();

        Bundle bundle = new Bundle();
        bundle.putString("id", id);
        bundle.putString("name", name);
        fragment.setArguments(bundle);

        return fragment;
    }

    public CategoryFragment () {
    }

    EditText tpid, tpname;
    String cid;
    String cname;

    String myJSON;
    JSONObject jsonobject;
    JSONArray jsonarray;
    ListView productlistview;
    ListViewAdapter adapter;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    static final String result="result";
    static String products_id = "products_id";
    static String products_name = "products_name";
    static String products_price = "products_price";
    static String products_image = "products_image";

    Boolean InternetAvailable = false;
    Seocnd detectconnection;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.categorylayout, container, false);

        getActivity().invalidateOptionsMenu();

        tpid = (EditText) rootView.findViewById(R.id.tpid);
        tpname = (EditText) rootView.findViewById(R.id.tpname);

        if(getArguments() != null) {
            String catid = getArguments().getString("id");
            String catname = getArguments().getString("name");

            tpid.setText(catid);
            tpname.setText(catname);
            cid = catid;
            cname = catname;
        }

        productlistview = (ListView) rootView.findViewById(R.id.productlistview);

        //new DownloadJSON().execute();

        detectconnection = new Seocnd(getActivity());
        InternetAvailable = detectconnection.InternetConnecting();
        if (InternetAvailable) {
            getProduct();
        } else {
            NointernetFragment fragment = new NointernetFragment();
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, fragment)
                    .commit();
        }

        return rootView;
    }

    public void getProduct(){
        class GetDataJSON extends AsyncTask<String, Void, String> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Create a progressdialog
                mProgressDialog = new ProgressDialog(getActivity());
                // Set progressdialog title
                mProgressDialog.setTitle(cname);
                // Set progressdialog message
                mProgressDialog.setMessage("Loading...");
                mProgressDialog.setIndeterminate(false);
                // Show progressdialog
                mProgressDialog.show();
            }

            @Override
            protected String doInBackground(String... params) {
                DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
                HttpPost httppost = new HttpPost("http://joehamirbalabadan.com/android/android/products.php");

                // Depends on your web service
                httppost.setHeader("Content-type", "application/json");

                InputStream inputStream = null;
                String result = null;
                try {
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();

                    inputStream = entity.getContent();
                    // json is UTF-8 by default
                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                    StringBuilder sb = new StringBuilder();

                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        sb.append(line + "\n");
                    }
                    result = sb.toString();
                } catch (Exception e) {
                    // Oops
                }
                finally {
                    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
                }
                return result;
            }

            @Override
            protected void onPostExecute(String result){
                myJSON=result;
                prepareListData();
                adapter = new ListViewAdapter(getActivity(), arraylist);
                // Set the adapter to the ListView
                productlistview.setAdapter(adapter);
                // Close the progressdialog
                mProgressDialog.dismiss();
            }
        }
        GetDataJSON g = new GetDataJSON();
        g.execute();
    }

    protected void prepareListData(){
        try {
            // Locate the array name in JSON
            JSONObject jsonObj = new JSONObject(myJSON);
            jsonarray = jsonObj.getJSONArray(result);

            HashMap<String, String> map = new HashMap<String, String>();
            for (int i = 0; i < jsonarray.length(); i++) {
                JSONObject p = jsonarray.getJSONObject(i);
                // Retrive JSON Objects
                map.put("products_id", p.getString("products_id"));
                map.put("products_name", p.getString("products_name"));
                map.put("products_price", p.getString("products_price"));
                map.put("products_image", p.getString("products_image"));
                // Set the JSON Objects into the array
                arraylist.add(map);
            }
        } catch (JSONException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity) activity).onSectionAttached(2);
    }
}

ListViewAdapter.java

package com.example.administrator.mosbeau;

/**
 * Created by Administrator on 9/28/2015.
 */

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;

public class ListViewAdapter extends BaseAdapter {

    // Declare Variables
    Context context;
    LayoutInflater inflater;
    ArrayList<HashMap<String, String>> data;
    ImageLoader imageLoader;
    HashMap<String, String> resultp = new HashMap<String, String>();

    public ListViewAdapter(Context context,
                           ArrayList<HashMap<String, String>> arraylist) {
        this.context = context;
        data = arraylist;
        imageLoader = new ImageLoader(context);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        // Declare Variables
        TextView products_id;
        TextView products_name;
        TextView products_price;
        ImageView products_image;

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.product_listview_item, parent, false);
        // Get the position
        resultp = data.get(position);

        // Locate the TextViews in product_listview_item.xml
        products_id = (TextView) itemView.findViewById(R.id.products_id);
        products_name = (TextView) itemView.findViewById(R.id.products_name);
        products_price = (TextView) itemView.findViewById(R.id.products_price);

        // Locate the ImageView in product_listview_item.xml
        products_image = (ImageView) itemView.findViewById(R.id.products_image);

        // Capture position and set results to the TextViews
        products_id.setText(resultp.get(CategoryFragment.products_id));
        products_name.setText(resultp.get(CategoryFragment.products_name));
        products_price.setText(resultp.get(CategoryFragment.products_price));
        // Capture position and set results to the ImageView
        // Passes flag images URL into ImageLoader.class
        imageLoader.DisplayImage(resultp.get(CategoryFragment.products_image), products_image);
        // Capture ListView item click
        itemView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Get the position
                resultp = data.get(position);
                Intent intent = new Intent(context, SingleItemView.class);
                // Pass all data rank
                intent.putExtra("products_id", resultp.get(CategoryFragment.products_id));
                // Pass all data country
                intent.putExtra("products_name", resultp.get(CategoryFragment.products_name));
                // Pass all data population
                intent.putExtra("products_price",resultp.get(CategoryFragment.products_price));
                // Pass all data flag
                intent.putExtra("products_image", resultp.get(CategoryFragment.products_image));
                // Start SingleItemView Class
                context.startActivity(intent);

            }
        });
        return itemView;
    }
}

新错误

09-29 14:12:26.981      593-593/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x409bf1f8)
09-29 14:12:26.992      593-593/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.example.administrator.mosbeau.CategoryFragment.prepareListData(CategoryFragment.java:259)
            at com.example.administrator.mosbeau.CategoryFragment$1GetDataJSON.onPostExecute(CategoryFragment.java:232)
            at com.example.administrator.mosbeau.CategoryFragment$1GetDataJSON.onPostExecute(CategoryFragment.java:179)
            at android.os.AsyncTask.finish(AsyncTask.java:602)
            at android.os.AsyncTask.access$600(AsyncTask.java:156)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)

这是第259行

            arraylist.add(map);

第232行

            prepareListData();

更新代码

CategoryFragment.java

package com.example.administrator.mosbeau;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ListView;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Created by Administrator on 9/18/2015.
 */
public class CategoryFragment extends Fragment {

    public static CategoryFragment newInstance(String id,String name) {
        CategoryFragment fragment = new CategoryFragment();

        Bundle bundle = new Bundle();
        bundle.putString("id", id);
        bundle.putString("name", name);
        fragment.setArguments(bundle);

        return fragment;
    }

    public CategoryFragment () {
    }

    EditText tpid, tpname;
    String cid;
    String cname;

    String myJSON;
    JSONObject jsonobject;
    JSONArray jsonarray;
    ListView productlistview;
    ListViewAdapter adapter;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    public static String products_id = "products_id";
    public static String products_name = "products_name";
    public static String products_price = "products_price";
    public static String products_image = "products_image";

    Boolean InternetAvailable = false;
    Seocnd detectconnection;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.categorylayout, container, false);

        getActivity().invalidateOptionsMenu();

        tpid = (EditText) rootView.findViewById(R.id.tpid);
        tpname = (EditText) rootView.findViewById(R.id.tpname);

        if(getArguments() != null) {
            String catid = getArguments().getString("id");
            String catname = getArguments().getString("name");

            tpid.setText(catid);
            tpname.setText(catname);
            cid = catid;
            cname = catname;
        }

        productlistview = (ListView) rootView.findViewById(R.id.productlistview);

        //new DownloadJSON().execute();

        detectconnection = new Seocnd(getActivity());
        InternetAvailable = detectconnection.InternetConnecting();
        if (InternetAvailable) {
            getProduct();
        } else {
            NointernetFragment fragment = new NointernetFragment();
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, fragment)
                    .commit();
        }

        return rootView;
    }

    public void getProduct(){
        class DownloadJSON extends AsyncTask<String, Void, String> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Create a progressdialog
                mProgressDialog = new ProgressDialog(getActivity());
                // Set progressdialog title
                mProgressDialog.setTitle(cname);
                // Set progressdialog message
                mProgressDialog.setMessage("Loading...");
                mProgressDialog.setIndeterminate(false);
                // Show progressdialog
                mProgressDialog.show();
            }

            @Override
            protected String doInBackground(String... params) {
                DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
                HttpPost httppost = new HttpPost("http://joehamirbalabadan.com/android/android/products.php");

                // Depends on your web service
                httppost.setHeader("Content-type", "application/json");

                InputStream inputStream = null;
                String result = null;
                try {
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();

                    inputStream = entity.getContent();
                    // json is UTF-8 by default
                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                    StringBuilder sb = new StringBuilder();

                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        sb.append(line + "\n");
                    }
                    result = sb.toString();
                } catch (Exception e) {
                    // Oops
                }
                finally {
                    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
                }
                return result;
            }

            @Override
            protected void onPostExecute(String result){
                myJSON=result;

                try {
                    // Locate the array name in JSON
                    JSONObject jsonObj = new JSONObject(myJSON);
                    jsonarray = jsonObj.getJSONArray("products");

                    arraylist = new ArrayList<HashMap<String, String>>();

                    for (int i = 0; i < jsonarray.length(); i++) {
                        HashMap<String, String> map = new HashMap<String, String>();
                        JSONObject p = jsonarray.getJSONObject(i);
                        // Retrive JSON Objects
                        map.put("products_id", p.getString("products_id"));
                        map.put("products_name", p.getString("products_name"));
                        map.put("products_price", p.getString("products_price"));
                        map.put("products_image", p.getString("products_image"));
                        // Set the JSON Objects into the array
                        arraylist.add(map);
                    }
                } catch (JSONException e) {
                    Log.e("Error", e.getMessage());
                    e.printStackTrace();
                }

                adapter = new ListViewAdapter(getActivity(), arraylist);
                // Set the adapter to the ListView
                productlistview.setAdapter(adapter);
                // Close the progressdialog
                mProgressDialog.dismiss();
            }
        }
        DownloadJSON g = new DownloadJSON();
        g.execute();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity) activity).onSectionAttached(2);
    }
}

当我在此代码中使用.php文件时,图像不显示..

DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
                    HttpPost httppost = new HttpPost("http://joehamirbalabadan.com/android/android/products.php");

但是当我使用.txt文件时,它可以工作..

我尝试复制products.php的数据并将其另存为.txt然后我将链接更改为此http://joehamirbalabadan.com/android/android/products.txt ..

它的工作..但我想使用.php文件,因为我用它来从数据库中获取数据..

products.php结果

enter image description here

products.txt结果

enter image description here

请帮帮我..

3 个答案:

答案 0 :(得分:2)

首先尝试初始化arraylist并在for循环中创建HashMap项新实例,如:

protected void prepareListData(){
    try {
        arraylist = new ArrayList<HashMap<String, String>>();
        // Locate the array name in JSON
        JSONObject jsonObj = new JSONObject(myJSON);
        jsonarray = jsonObj.getJSONArray(result);

        for (int i = 0; i < jsonarray.length(); i++) {
            HashMap<String, String> map = new HashMap<String, String>();
            JSONObject p = jsonarray.getJSONObject(i);
            // Retrive JSON Objects
            map.put("products_id", p.getString("products_id"));
            map.put("products_name", p.getString("products_name"));
            map.put("products_price", p.getString("products_price"));
            map.put("products_image", p.getString("products_image"));
            // Set the JSON Objects into the array
            arraylist.add(map);
        }
    catch (JSONException e) {
       Log.e("Error", e.getMessage());
       e.printStackTrace();
    }  
}

答案 1 :(得分:1)

使用以下产品初始化结果字符串:

static final String result="products";

它会起作用

答案 2 :(得分:0)

我认为你需要在变量之下进行十分转换

static final String result="result";
static String products_id = "products_id";
static String products_name = "products_name";
static String products_price = "products_price";
static String products_image = "products_image";

你必须像这样改变

public static final String result="result";
public static String products_id = "products_id";
public static String products_name = "products_name";
public static String products_price = "products_price";
public static String products_image = "products_image";

我希望它有效。