停止创建片段视图,直到我删除了Json中的所有数据。

时间:2014-06-04 09:07:04

标签: android json android-asynctask fragment

我尝试填充接口时收到空指针异常,因为我的实例对象中没有数据。

我正在使用登录按钮并调用服务,我收到一个json,在我解析之后我有一个状态处理程序...登录确定...这里我想启动一个asynk任务来获取一些照片数据< / p>

public void StatusHandlerLogin(String status, Activity currentActivity) {

    if (status.equals("0")) {

        new GetPhotoDataTask(currentActivity).execute();
        Intent intent = new Intent(currentActivity,
                NavigationActivity.class);
        currentActivity.startActivity(intent);
    }

//}

asynk任务就像这样

public class GetPhotoDataTask extends
        AsyncTask<Void, Void, List<PhotoData>> {

    Activity activity;

    public GetPhotoDataTask(Activity activity) {
        this.activity = activity;
    }

    ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        Log.d("GetPhotoDataTask onPreExecute",
                "GetPhotoDataTask onPreExecute");
        super.onPreExecute();

        progressDialog = ProgressDialog.show(activity, "Preluare Date",
                "Va rugam asteptati!");
    }

    @Override
    protected List<PhotoData> doInBackground(Void... params) {

        Log.d("GetPhotoDataTask doInBackground",
                "GetPhotoDataTask doInBackground");
        MyStyleApi myStyleApi = new MyStyleApi();

        List<PhotoData> photoData = null;

        try {
            photoData = myStyleApi.getPhotoDataWithDispatch();
        } catch (JSONException e) {

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

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

            e.printStackTrace();
        }

        List<String> photoStr = new ArrayList<String>();

        for (int i = 0; i < photoData.size(); i++) {
            photoStr.add(photoData.get(i).getPhotoURL());
        }

        String[] photoUrls = new String[photoStr.size()];
        photoUrls = photoStr.toArray(photoUrls);

        for (int i = 0; i < photoUrls.length; i++) {
            if (photoUrls[i].contains("\"")) {
                photoUrls[i] = photoUrls[i].replace("\"", "");
            }
        }

        AppManager.getInstance().setphotoUrls(photoUrls);

        List<PhotoData> photoDataS = AppManager.getInstance().setPhotoData(
                photoData);

        return photoData;
    }

    protected void onProgressUpdate(Integer... percent) {
        progressDialog = ProgressDialog.show(activity, "Preluare Date",
                "Va rugam asteptati!");
    }

    protected void onPostExecute(List<PhotoData> photoData) {

        if (progressDialog != null && progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
    }
}

在后台执行我有一个调用其他服务的方法

使用userId作为参数获取PhotoData

public List<PhotoData> getPhotoDataWithDispatch() throws JSONException,
        ClientProtocolException, IOException {

    Log.d("getPhotoDataWithDispatch ", "getPhotoDataWithDispatch ");

    UserData data = AppManager.getInstance().getUserData();
    String userID = data.getUserID();

    if (userID.contains("\"")) {
        userID = userID.replace("\"", "");
    }

    Map<String, Object> params = new LinkedHashMap<String, Object>();
    params.put("userID", userID);

    JsonArray response = WebServiceApi.PostToServiceWithStringResponse(
            "images/get_images_data", params);

    List<PhotoData> photoDataList = new ArrayList<PhotoData>();
    if (response != null) {

        photoDataList = parseJsonArrayForFotoData(response);
    }

    return photoDataList;
}

如果响应不为null我会解析它

public static List<PhotoData> parseJsonArrayForFotoData(JsonArray jsonArray) {

    List<PhotoData> photoDataList = new ArrayList<PhotoData>();

    for (int i = 0; i < jsonArray.size(); i++) {
        Log.d("getPhotoDataWithDispatch ", "getPhotoDataWithDispatch ");
        JsonElement photoID = ((JsonObject) jsonArray.get(i)).get("pozaID");
        JsonElement photoUrl = ((JsonObject) jsonArray.get(i))
                .get("pozaURL");
        JsonElement thumbURL = ((JsonObject) jsonArray.get(i))
                .get("thumbURL");

        JsonElement tags = ((JsonObject) jsonArray.get(i)).get("tags");

        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(tags.toString()).getAsJsonArray();

        List<Tags> tagsList = new ArrayList<Tags>();

        for (int j = 0; j < array.size(); j++) {
            JsonElement tagId = ((JsonObject) array.get(j)).get("tagID");
            JsonElement coordX = ((JsonObject) array.get(j)).get("coordX");
            JsonElement coordY = ((JsonObject) array.get(j)).get("coordY");
            JsonElement productId = ((JsonObject) array.get(j))
                    .get("productID");

            Tags tagPData = new Tags(tagId.toString(), coordX.toString(),
                    coordY.toString(), productId.toString());
            tagsList.add(tagPData);
        }

        PhotoData photoData = new PhotoData(photoID.toString(),
                photoUrl.toString(), thumbURL.toString(), null, tagsList);
        photoDataList.add(photoData);
    }

    return photoDataList;
}

好的GetPhotoDataTaskFb在后台我做了设置照片对象的实例

    AppManager.getInstance().setphotoUrls(photoUrls);

和在fragmnet中

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.ac_image_pager, container,
                false);

//虚拟代码

        if (counter == 0) {
            for (int i = 0; i <= 20; i++) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        counter++;

        String[] imageUrls = AppManager.getInstance().getphotoUrls();

//这里是我得到null的地方..我尝试了一些虚拟代码来延迟和接收数据,但它无法正常工作

如何在解析所有数据之前设法停止创建视图?

0 个答案:

没有答案