在AsyncTask之后,不会在Fragment上运行oncreateview

时间:2016-06-05 11:31:36

标签: android android-fragments android-asynctask android-adapter

我是android的新手并且一步到位,所以真的需要有人帮忙。 我是小程序的代码,应解析Json本地文件,并将其发布到活动。使用Base64到Bitmap进行图像解码并将其提供给CustomAdapter(扩展基本适配器)。我用Log检查程序的步骤。 AsyncTask使一切正确,但在方法" Oncreate view"它似乎一无所获。 她是我的代码。我真的不知道,有什么问题,帮忙!

My MainFragment + AsyncTask

public class MainFragment extends Fragment {

ArrayList<Bitmap> bitArray;

public MainFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);

    ListView listview = (ListView)rootView.findViewById(R.id.listViewPost);
    Log.v("Pl","1");
    listview.setAdapter(new CustomListAdapter(getContext(), bitArray));
    listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            Toast.makeText(getActivity(), "YESS", Toast.LENGTH_SHORT).show();
        }
    });

    return rootView;
}

@Override
public void onStart() {
    super.onStart();
}

private void updatePost() {

    FetchPosterTask postTask = new FetchPosterTask(getActivity());
    postTask.execute("uk_news.json");

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    updatePost();
}

class FetchPosterTask extends AsyncTask<String, Void, ArrayList<Bitmap>> {
    private final String LOG_TAG = FetchPosterTask.class.getSimpleName();
    private Context context;


    public FetchPosterTask (Context myContext) {
        this.context = myContext;
    }

    @Override
    protected ArrayList<Bitmap> doInBackground(String... params) {

        if(params.length ==0 ){
            return null;
        }

        String json = null;

        try {
            json = getJson(params[0]);

        } catch (IOException e)
        {
            e.printStackTrace();
        }

        try {
            String[] masPst = getPosterfromJsonAsString(json);
            ArrayList<Bitmap> result =decodeImageToBitmap(masPst);

            return result;
        }catch (JSONException e){
            Log.e(LOG_TAG, "Place 5", e);
        }

        return null;
    }

    private String getJson(String filename) throws IOException{
        InputStream is = this.context.getAssets().open(filename);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        return new String(buffer);

    }

    private String[] getPosterfromJsonAsString(String posterJson) throws JSONException {
        final String OWM_NFO = "nfo";
        final String OWM_NWS = "nws";
        final String OWM_PST = "pst";


        JSONObject imageJson = new JSONObject(posterJson);
        JSONObject nfoArray = imageJson.getJSONObject(OWM_NFO);
        JSONArray nwsArray = nfoArray.getJSONArray(OWM_NWS);

        String[] resultStr = new String[nwsArray.length()];

        for(int i =0; i<nwsArray.length(); i++){
            JSONObject pst = nwsArray.getJSONObject(i);
            String im = pst.getString(OWM_PST);

            resultStr[i] = im;
        }

        return resultStr;

    }


    public ArrayList<Bitmap> decodeImageToBitmap (String[] base64Image) {
        ArrayList<Bitmap> bitmapArrayList = new ArrayList<Bitmap>();
        for(int i =0; i<4; i++) {
            byte[] decodedString = Base64.decode(base64Image[i], Base64.DEFAULT);
            Bitmap base64Bitmap = BitmapFactory.decodeByteArray(decodedString, 0,
                    decodedString.length);
            bitmapArrayList.add(i, base64Bitmap);
        }
        return bitmapArrayList;
    }

    @Override
    protected void onPostExecute(ArrayList<Bitmap> bitmapArrayList) {
        if(bitArray == null){
            bitArray = new ArrayList<>(bitmapArrayList);
        }
        else{
            for(Bitmap bit: bitmapArrayList){
                bitArray.clear();
                bitArray.add(bit);
            }
        }
    }
}

}

CustomListAdapter

public class CustomListAdapter extends BaseAdapter {
private final String LOG_TAG = CustomListAdapter.class.getSimpleName();
private ArrayList<Bitmap> bitmapArrayList;
private LayoutInflater layoutInflater;

public CustomListAdapter(Context context, ArrayList<Bitmap> bitmapArrayList) {
    this.bitmapArrayList = bitmapArrayList;
    this.layoutInflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
    return 0;
}

@Override
public Object getItem(int position) {
    return bitmapArrayList.get(position);
}
@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if(convertView == null) {
        convertView = layoutInflater.inflate(R.layout.list_post_item, null);

        holder = new ViewHolder();
        holder.imageView = (ImageView) convertView.findViewById(R.id.list_item);
        convertView.setTag(holder);
        Log.v(LOG_TAG,"1");
    }
 else {
    holder = (ViewHolder) convertView.getTag();
        Log.v(LOG_TAG,"2");
}
    Log.v(LOG_TAG,"3");
    holder.imageView.setImageBitmap((Bitmap)getItem(position));
    Log.v(LOG_TAG,"4");

    return convertView;
}

static class ViewHolder {
    ImageView imageView;

}

}

Layouts
list_post_item

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/list_item"/>

</LinearLayout>

fragment main

     <?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="273dp"
            android:layout_height="wrap_content"
            android:id="@+id/listViewPost" />

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

您的适配器没有任何项目所以请在适配器上更改

@Override
public int getCount() {
    return bitmapArrayList.size();
} 

并在updatePost() Mehhed

中调用onActivityCreated()