我发现一个错误,我的listitem内容没有膨胀到我的xml文件

时间:2015-07-23 13:18:23

标签: java android xml

Listactivity.java

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@android:id/list"/>

</LinearLayout>

list_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:id="@+id/item">

    <TextView
        android:id="@+id/bankid"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:paddingTop="6dip"
        android:textColor="#5d5d5d"
        android:text="bankid"
        android:textSize="16sp"
        android:textStyle="bold"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <TextView
        android:id="@+id/status"
        android:layout_width="67dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:text="status"
        android:textStyle="bold"
        android:textColor="#5d5d5d"
        android:layout_below="@+id/bankid"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:id="@+id/dval"
        android:layout_width="78dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:textColor="#43bd00"
        android:textStyle="bold"
        android:text="dval"
        android:layout_gravity="right"
        android:layout_above="@+id/date"
        android:layout_alignRight="@+id/bankid"
        android:layout_alignEnd="@+id/bankid" />

    <TextView
        android:id="@+id/cval"
        android:layout_width="78dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:text="cval"
        android:textStyle="bold"
        android:textColor="#FF0000"
        android:layout_gravity="right"
        android:layout_below="@+id/bankid"
        android:layout_alignRight="@+id/bankid"
        android:layout_alignEnd="@+id/bankid" />

    <TextView
        android:id="@+id/date"
        android:layout_width="71dp"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="date"
        android:textColor="#5d5d5d"
        android:textStyle="bold"
        android:layout_below="@+id/status"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

item.xml

07-23 18:41:35.101  22014-22034/com.sample.mpassbook.mpassbook_d E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.sample.mpassbook.mpassbook_d, PID: 22014
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
        at com.sample.mpassbook.mpassbook_d.ListActivity$getlist.doInBackground(ListActivity.java:86)
        at com.sample.mpassbook.mpassbook_d.ListActivity$getlist.doInBackground(ListActivity.java:53)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
07-23 18:41:40.963  22014-22014/com.sample.mpassbook.mpassbook_d I/Choreographer﹕ Skipped 42 frames!  The application may be doing too much work on its main thread.
07-23 18:41:41.192  22014-22014/com.sample.mpassbook.mpassbook_d E/WindowManager﹕ android.view.WindowLeaked: Activity com.sample.mpassbook.mpassbook_d.ListActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{38c12a7d V.E..... R......D 0,0-1026,348} that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
        at android.app.Dialog.show(Dialog.java:298)
        at com.sample.mpassbook.mpassbook_d.ListActivity$getlist.onPreExecute(ListActivity.java:168)
        at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
        at android.os.AsyncTask.execute(AsyncTask.java:535)
        at com.sample.mpassbook.mpassbook_d.ListActivity.onCreate(ListActivity.java:50)
        at android.app.Activity.performCreate(Activity.java:5937)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        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)

Logcat消息

sortable()

已设置所有适配器仍然收到此错误,请提出解决建议,以便继续使用该项目。

2 个答案:

答案 0 :(得分:0)

您有NullPointerException,因为您从未初始化contentlist。您可以在声明它的同一位置执行此操作,如下所示:

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

另外,在任何地方使用界面而不是实施都是一种很好的做法。例如,此处contentlist可以是List而不是ArrayList

答案 1 :(得分:0)

您尚未初始化contentlist个对象。尝试在doInBackground()方法中初始化它。在执行声明的位置初始化它将导致contentlist对象在asyncTask执行多次时具有重复值。因为它没有再次重新初始化。

尝试以下代码:

package com.sample.mpassbook.mpassbook_d; 

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.sample.mpassbook.httpconnection.Httpmanager; 

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

/** 
 * Created by abhil on 22/07/15. 
 */ 
public class ListActivity extends android.app.ListActivity {
    private ProgressDialog pDialog;
    private static String url="https://fierce-tundra-4082.herokuapp.com/transactions/?msisdn=456&account=123&from_date=2015-07-10&format=json";
//    public static final String TAG_acnum = "account_number"; 
//    public static final String TAG_mnum = "mobile_number"; 
    public static final String TAG_content = "content";
    public static final String TAG_bankid = "bank_id";
    public static final String TAG_status = "details";
    public static final String TAG_Date = "date";
    public static final String TAG_cval = "amount";
//    public static final String TAG_dval = "debit_val"; 
    public static final String TAG_bal = "balance";


    JSONArray content = null;

    ArrayList<HashMap<String, String>> contentlist;


    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_activity);

        ListView lv = getListView();

        new getlist().execute();

    } 
    private class getlist extends AsyncTask<Void,Void,Void> {

        @Override 
        protected Void doInBackground(Void... params) {
            Httpmanager hm = new Httpmanager();
            // initialization to be added in you code.
            contentlist = new ArrayList<>();
            String jsonstr = hm.makeServiceCall(url, Httpmanager.get);

            Log.d("Response: ", "> " + jsonstr);

            if (jsonstr != null) {
                try { 
                    JSONObject jsonObject = new JSONObject(jsonstr);
                    content = jsonObject.getJSONArray(TAG_content);


                    for (int i = 0; i < content.length(); i++) {
                        JSONObject c = content.getJSONObject(i);

                        String bank_id = c.getString(TAG_bankid);
                        String details = c.getString(TAG_status);
                        String date = c.getString(TAG_Date);
                        String amount = c.getString(TAG_cval);
                        String balance = c.getString(TAG_bal);

                        HashMap<String, String> contents = new HashMap<String, String>();

                        contents.put(TAG_bankid, "TRANSACTION ID : " +bank_id);
                        contents.put(TAG_status, "" +details);
                        contents.put(TAG_Date,"" +date);
                        contents.put(TAG_cval, "" +amount);

                        contentlist.add(contents);
                    } 
                } catch (JSONException e) {
                    e.printStackTrace();
                } 
            } else { 
                Log.e("HttpManager", "Couldn't get any data from the url");
                runOnUiThread(new Runnable() {

                    public void run() { 

                        Toast.makeText(getApplicationContext(), "CHECK YOUR NETWORK CONNECTION", Toast.LENGTH_LONG).show();

                    } 
                }); 

            } 

            return null; 
        } 



        @Override 
        protected void onPreExecute() { 
            super.onPreExecute(); 
            pDialog = new ProgressDialog(ListActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        } 
        @Override 
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if (pDialog.isShowing())
                pDialog.dismiss();

            ListAdapter adapter = new SimpleAdapter(ListActivity.this, contentlist, R.layout.item, new String[]{TAG_bankid, TAG_status, TAG_Date, TAG_cval},
                    new int[]{R.id.bankid, R.id.status, R.id.date, R.id.cval});
            setListAdapter(adapter);


        } 
    } 






}