2016-05-20 5 views
-1

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; 


} 
+0

posten Sie bitte die FeedListAdapter-Klasse sowie – Lino

+0

Was ist Mhelper in dieser Zeile? Auch FeedListAdapter Code –

+0

mHelper = new DBHelper (getActivity) meine db Klasse – Nitesh

Antwort

1

In Ihrer onPostExecute() -Methode rufen Sie getActivity() an. Diese Methode gibt null zurück, weil Ihr Fragment noch keiner Aktivität zugeordnet ist. Stellen Sie sicher, dass der Aufruf an getActivity() erst erfolgt, nachdem onAttach() für Ihr Fragment aufgerufen wird.