나는 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);
}
}
}
결과 : 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>
에 대한
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은 나에게 어떤 대답을 적어주세요
이
내 코드입니다. 감사. 이 어댑터 생성자에 전달할 때
ProdukListFragment2.java 줄 149의 코드 줄은 무엇입니까? 그리고 단지 제안, 당신은 xml 파일에있는 listView id는'android : id = "@ android : id/list"'?와 동일합니까? – Houcine
라인 149 : listView.setAdapter (adapter); –
귀하의 listView null입니다, 그래서 plz 귀하의 ListView 들어있는 XML 레이아웃 파일의 코드를 추가, 내가 문제가 올바른 ID와 함께 listView를 검색하지 않는 것 같아요 – Houcine