Hi bekomme ich Daten vom Server und Speichern in SQLite und zeigt in Wischen Tabs, die dynamisch ist.Ich bekomme Fehler einige Male und manchmal funktioniert es ganz gut. Ich verstehe nicht, warum es zu einem Crash kommt. Ich habe versucht zu debuggen, konnte aber das Problem nicht finden. Benötigen Sie Hilfe, um dieses Problem zu beheben.Fehler in onPostExecute der asynchronen Aufgabe
Hier der Async-Taskcode. Hier
class JSONAsyncTask extends AsyncTask<String, Void, Boolean> implements
OnClickListener {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... urls) {
InputStream inputStream = null;
HttpURLConnection urlConnection = null;
try {
// ------------------>>
URL url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
/* optional request header */
urlConnection.setRequestProperty("Content-Type",
"application/json");
/* optional request header */
urlConnection.setRequestProperty("Accept", "application/json");
/* for Get request */
urlConnection.setRequestMethod("GET");
int statusCode = urlConnection.getResponseCode();
if (statusCode == 200) {
inputStream = new BufferedInputStream(
urlConnection.getInputStream());
String response = convertInputStreamToString(inputStream);
JSONObject jsono = new JSONObject(response);
JSONArray jarray = jsono.getJSONArray("product");
for (int i = 0; i < jarray.length(); i++) {
JSONObject feedObj = jarray.getJSONObject(i);
// Actors actor = new Actors();
CartItem item = new CartItem();
item.setQuantity("0");
item.setProductName(feedObj.optString("post_title"));
item.setPrice(feedObj.optString("post_excerpt"));
item.setProductPrice(feedObj.optString("meta_value"));
item.setProductId(ids);
item.setProdId(feedObj.optString("ID"));
item.setProductTotalPrice("0");
item.setImage(feedObj.optString("image_url"));
mHelper.addProduct(item);
System.out.println("Database price : "+item.getProductPrice());
}
return true;
}
// ------------------>>
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
protected void onPostExecute(Boolean result) {
if (result == false) {
recyclerView.setVisibility(View.GONE);
fhfgh.setVisibility(View.VISIBLE);
} else {
listAdapter = new FeedListAdapter(getActivity(), mHelper.getAllProducts(ids));// Error on this line.
recyclerView.setAdapter(listAdapter);
listAdapter.setOnAddNum(this);
listAdapter.setOnSubNum(this);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(
getActivity()));
}
}
ist die logcat
05-20 12:08:26.308: E/AndroidRuntime(8564): FATAL EXCEPTION: main
05-20 12:08:26.308: E/AndroidRuntime(8564): java.lang.NullPointerException
05-20 12:08:26.308: E/AndroidRuntime(8564): at com.grotap.adapter.FeedListAdapter.<init>(FeedListAdapter.java:47)
05-20 12:08:26.308: E/AndroidRuntime(8564): at com.grotap.activity.MyFragment$JSONAsyncTask.onPostExecute(MyFragment.java:350)
05-20 12:08:26.308: E/AndroidRuntime(8564): at com.grotap.activity.MyFragment$JSONAsyncTask.onPostExecute(MyFragment.java:1)
05-20 12:08:26.308: E/AndroidRuntime(8564): at android.os.AsyncTask.finish(AsyncTask.java:631)
05-20 12:08:26.308: E/AndroidRuntime(8564): at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-20 12:08:26.308: E/AndroidRuntime(8564): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-20 12:08:26.308: E/AndroidRuntime(8564): at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 12:08:26.308: E/AndroidRuntime(8564): at android.os.Looper.loop(Looper.java:137)
05-20 12:08:26.308: E/AndroidRuntime(8564): at android.app.ActivityThread.main(ActivityThread.java:5283)
05-20 12:08:26.308: E/AndroidRuntime(8564): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 12:08:26.308: E/AndroidRuntime(8564): at java.lang.reflect.Method.invoke(Method.java:511)
05-20 12:08:26.308: E/AndroidRuntime(8564): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
05-20 12:08:26.308: E/AndroidRuntime(8564): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
05-20 12:08:26.308: E/AndroidRuntime(8564): at dalvik.system.NativeStart.main(Native Method)
Hier ist der Adapter Klasse
public class FeedListAdapter extends
RecyclerView.Adapter<FeedListAdapter.ViewHolder> {
private Activity activity;
private LayoutInflater inflater;
private ArrayList<CartItem> feedItems;
private ArrayList<CartItem> filteredfeedItems;
ImageView plus;
ImageView minus;
String result;
String formattedDate;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
int id;
private TextView prices;
private View.OnClickListener onAddNum;
private View.OnClickListener onSubNum;
public FeedListAdapter(Activity activity, ArrayList<CartItem> feedItems) {
this.activity = activity;
this.feedItems = feedItems;
this.filteredfeedItems = feedItems;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void setOnAddNum(View.OnClickListener onAddNum) {
this.onAddNum = onAddNum;
}
public void setOnSubNum(View.OnClickListener onSubNum) {
this.onSubNum = onSubNum;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(
R.layout.feed_item, parent, false);
prices = (TextView) v.findViewById(R.id.timestamp2);
ViewHolder viewHolder = new ViewHolder(v);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
// setupClickableViews(v, viewHolder);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
CartItem item = (CartItem) filteredfeedItems.get(position);
holder.name.setText(item.getProductName());
holder.assignTo.setText(item.getPrice());
String rupee = activity.getResources().getString(R.string.Rs);
holder.price.setText(rupee+" "+item.getProductPrice());
holder.location.setText((String.valueOf(item.getQuantity())) + "");
holder.plus.setTag(item.getId());
holder.plus.setFocusable(true);
holder.plus.setClickable(true);
holder.plus.setOnClickListener(onAddNum);
holder.minus.setTag(item.getId());
holder.minus.setOnClickListener(onSubNum);
holder.profilePic.setImageUrl(item.getImage(), imageLoader);
holder.profilePic.setDefaultImageResId(R.mipmap.ic_launcher);
holder.profilePic.setErrorImageResId(R.mipmap.ic_launcher);
//Picasso.with(activity).load(item.getImage()).into(holder.profilePic);
}
/*private void displayImage(int adapterPosition) {
// TODO Auto-generated method stub
LayoutInflater inflater = activity.getLayoutInflater();
View offer = inflater.inflate(R.layout.prompts, null);
AlertDialog.Builder alert = new AlertDialog.Builder(activity);
alert.setView(offer);
alert.setCancelable(true);
final AlertDialog dialog = alert.create();
int width = (int)(activity.getResources().getDisplayMetrics().widthPixels*0.80);
int height = (int)(activity.getResources().getDisplayMetrics().heightPixels*0.50);
dialog.show();
dialog.getWindow().setLayout(width, height);
dialog.setCanceledOnTouchOutside(true);
dialog.setCancelable(true);
CartItem item = (CartItem) filteredfeedItems.get(adapterPosition);
NetworkImageView viewOffer = (NetworkImageView)offer.findViewById(R.id.viewOffer);
viewOffer.setImageUrl(item.getImage(),imageLoader);
viewOffer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
}*/
@Override
public int getItemCount() {
return filteredfeedItems.size();
}
public long getItemId(int position) {
return position;
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView plus;
ImageView minus;
NetworkImageView profilePic;
TextView name;
TextView price;
TextView assignTo;
TextView location;
public ViewHolder(View vi) {
super(vi);
name = (TextView) vi.findViewById(R.id.name);
price = (TextView) vi.findViewById(R.id.price);
assignTo = (TextView) vi.findViewById(R.id.timestamp);
location = (TextView) vi.findViewById(R.id.timestamp2);
plus = (ImageView) vi.findViewById(R.id.btnAddToCart1);
profilePic = (NetworkImageView) vi.findViewById(R.id.profilePic);
minus = (ImageView) vi.findViewById(R.id.btnAddToCart5);
}
}
}
Hier ist getAllProducts
public ArrayList<CartItem> getAllProducts(String ids) {
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<CartItem> cityList = null;
try{
cityList = new ArrayList<CartItem>();
String QUERY = "SELECT * FROM "+TABLE_NAME+ " WHERE " +KEY_PRODUCT_ID
+ " = '" + ids + "'";
Cursor cursor = db.rawQuery(QUERY, null);
if(!cursor.isLast())
{
while (cursor.moveToNext())
{
CartItem city = new CartItem();
city.setId(cursor.getInt(0));
city.setQuantity(cursor.getString(1));
city.setProductName(cursor.getString(2));
city.setPrice(cursor.getString(3));
city.setProductPrice(cursor.getString(4));
city.setProductId(cursor.getString(5));
city.setProductTotalPrice(cursor.getString(6));
city.setImage(cursor.getString(7));
city.setProdId(cursor.getString(8));
cityList.add(city);
}
}
db.close();
}catch (Exception e){
Log.e("error",e+"");
}
return cityList;
}
posten Sie bitte die FeedListAdapter-Klasse sowie – Lino
Was ist Mhelper in dieser Zeile? Auch FeedListAdapter Code –
mHelper = new DBHelper (getActivity) meine db Klasse – Nitesh