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()
已设置所有适配器仍然收到此错误,请提出解决建议,以便继续使用该项目。
答案 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);
}
}
}