简体   繁体   English

在AsyncTask之后不在Fragment的oncreateview上运行

[英]Doesn't run oncreateview at Fragment after AsyncTask

I'm new in android and stuck at one step, so really need someones help. 我是android的新手,只能一步一步,所以确实需要别人的帮助。 I m code for small piece of program, that should parse Json local file, and post it to activity. 我是一个小程序的代码,应该解析Json本地文件,并将其发布到活动中。 Image decode with Base64 to Bitmap and given to CustomAdapter(extends Base Adapter). 使用Base64将图像解码为位图并提供给CustomAdapter(扩展了Base Adapter)。 I check program's steps with Log. 我用Log检查程序的步骤。 AsyncTask make all correct, but in method "Oncreate view" it seems to run nothing. AsyncTask完全正确,但是在方法“ Oncreate view”中似乎什么也不运行。 Her is my code. 她是我的密码。 I m really have no idea , what the problem, help! 我真的不知道,什么问题,帮忙!

My MainFragment+AsyncTask 我的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 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>

Your Adapter Has Not Any Item So Please change That on Adapter 您的适配器没有任何物品,因此请在适配器上进行更改

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

And also call updatePost() methed in onActivityCreated() Mehhed 并在onActivityCreated()方法中调用updatePost()方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM