0
我很困惑AsynctaskLoader。我使用Asynctaskloader使用PHP从服务器加载JSON数据,但仍然收到错误。android,asyntaskloader,simpleadapter
这是我的代码:
public class ProdukListFragment2 extends ListFragment implements LoaderCallbacks<ArrayList<HashMap<String, String>>>{
private static final String proUrl = "http://bsamon.com/salesmonitoring/list_produk2.php";
private EditText searchprod;
private static final int LOADER_LOAD_DATA = 0;
// Creating JSON Parser object
static JSONHelper jParser = new JSONHelper();
//static ArrayList<HashMap<String, String>> productsList;
// products JSONArray
static JSONArray products = null;
ListAdapter adapter;
private ListView listView;
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUK = "tb_barang";
private static final String TAG_KODE_PRODUK = "kode_barang";
private static final String TAG_TIPE_PRODUK = "tipe_barang";
String kodepro;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
getListView();
listView = (ListView) view.findViewById(android.R.id.list);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.list_prod_layout, container, false);
view.setBackgroundColor(Color.parseColor("#e16505"));
return view;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getLoaderManager().initLoader(LOADER_LOAD_DATA, null, this);
}
@Override
public Loader<ArrayList<HashMap<String, String>>> onCreateLoader(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
ProdukLoader loader = new ProdukLoader(getActivity());
return loader;
}
@Override
public void onLoadFinished(Loader<ArrayList<HashMap<String, String>>> loader, ArrayList<HashMap<String, String>> produk) {
// TODO Auto-generated method stub
String[] from = new String[]
{
TAG_TIPE_PRODUK,
TAG_KODE_PRODUK
};
int[] to = new int[]
{
R.id.listnamaprod,
R.id.listkodeprod
};
adapter = new SimpleAdapter(getActivity(), produk, R.layout.list_prod, from, to);
listView.setAdapter(adapter);
}
@Override
public void onLoaderReset(Loader<ArrayList<HashMap<String, String>>> loader) {
// TODO Auto-generated method stub
listView.setAdapter(null);
}
// ---------- Loader --------------
public static class ProdukLoader extends AsyncTaskLoader<ArrayList<HashMap<String, String>>> {
ArrayList<HashMap<String, String>> produk;
public ProdukLoader(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public ArrayList<HashMap<String, String>> loadInBackground() {
// TODO Auto-generated method stub
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(proUrl, "GET", params);
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1)
{
products = json.getJSONArray(TAG_PRODUK);
// Storing each json item in variable
for (int i = 0; i < products.length(); i++)
{
JSONObject jObj = products.getJSONObject(i);
String kodePro = jObj.getString(TAG_KODE_PRODUK);
String tipePro = jObj.getString(TAG_TIPE_PRODUK);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_KODE_PRODUK, kodePro);
map.put(TAG_TIPE_PRODUK, tipePro);
produk.add(map);
}
} else
{
//trhtrh
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return produk;
}
@Override
protected void onStopLoading() {
// TODO Auto-generated method stub
cancelLoad();
}
@Override
protected void onReset() {
// TODO Auto-generated method stub
super.onReset();
produk = null;
onStopLoading();
}
@Override
public void onCanceled(ArrayList<HashMap<String, String>> data) {
// TODO Auto-generated method stub
super.onCanceled(data);
}
@Override
protected void onStartLoading() {
// TODO Auto-generated method stub
super.onStartLoading();
if (produk !=null)
{
deliverResult(produk);
} else
{
forceLoad();
}
}
@Override
public void deliverResult(ArrayList<HashMap<String, String>> data) {
// TODO Auto-generated method stub
super.deliverResult(data);
}
}
}
logcat的结果:
03-25 22:15:21.975: E/AndroidRuntime(21478): FATAL EXCEPTION: main
03-25 22:15:21.975: E/AndroidRuntime(21478): java.lang.NullPointerException
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.widget.ListView.setAdapter(ListView.java:466)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.app.ListFragment.setListAdapter(ListFragment.java:240)
03-25 22:15:21.975: E/AndroidRuntime(21478): at com.bimasakti.samon.ProdukListFragment2.onLoadFinished(ProdukListFragment2.java:149)
03-25 22:15:21.975: E/AndroidRuntime(21478): at com.bimasakti.samon.ProdukListFragment2.onLoadFinished(ProdukListFragment2.java:1)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:483)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:451)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.content.Loader.deliverResult(Loader.java:143)
03-25 22:15:21.975: E/AndroidRuntime(21478): at com.bimasakti.samon.ProdukListFragment2$ProdukLoader.deliverResult(ProdukListFragment2.java:255)
03-25 22:15:21.975: E/AndroidRuntime(21478): at com.bimasakti.samon.ProdukListFragment2$ProdukLoader.deliverResult(ProdukListFragment2.java:1)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:254)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:91)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.os.AsyncTask.finish(AsyncTask.java:631)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.os.Looper.loop(Looper.java:153)
03-25 22:15:21.975: E/AndroidRuntime(21478): at android.app.ActivityThread.main(ActivityThread.java:5293)
03-25 22:15:21.975: E/AndroidRuntime(21478): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 22:15:21.975: E/AndroidRuntime(21478): at java.lang.reflect.Method.invoke(Method.java:511)
03-25 22:15:21.975: E/AndroidRuntime(21478): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
03-25 22:15:21.975: E/AndroidRuntime(21478): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-25 22:15:21.975: E/AndroidRuntime(21478): at dalvik.system.NativeStart.main(Native Method)
此代码XML进行list_prod_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/edsearchprod"
android:layout_width="match_parent"
android:layout_height="45dp"
android:inputType="textFilter|textAutoComplete"
android:singleLine="true"
android:hint="Cari Produk"
android:ems="10" >
<requestFocus />
</EditText>
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:listSelector="@color/color_bluecompat"
android:gravity="center" >
</ListView>
</LinearLayout>
,请给我一些答案。谢谢。
什么是ProdukListFragment2.java 149行代码的ligne?只是一个建议,你有xml文件中的listView id等于'android:id =“@ android:id/list”'? – Houcine
第149行:listView.setAdapter(adapter); –
你的listView是空的,所以PLZ添加包含你的ListView的XML布局文件的代码,我认为问题是你没有检索到具有正确ID的listView – Houcine