2017-09-13 44 views
2

我从网站上找到了下面的代码,它似乎可能会帮助我在我的android应用程序中。但问题是,下面的代码仅适用于一个活动,我需要在代码片段中运行代码。顺便说一句,我的应用程序是关于从在线数据库下载图像并将其存储到列表视图。如何在片段中使用GetJsonFromUrlTask​​.java

我该怎么办?

这是我想使用的代码:

public class GetJsonFromUrlTask extends AsyncTask<Void, Void, String> { 

private Activity activity; 
private String url; 
private ProgressDialog dialog; 
private final static String TAG = GetJsonFromUrlTask.class.getSimpleName(); 

public GetJsonFromUrlTask(Activity activity, String url) { 
    super(); 
    this.activity = activity; 
    this.url = url; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    // Create a progress dialog 
    dialog = new ProgressDialog(activity); 
    // Set progress dialog title 
    dialog.setTitle("Getting JSON DATA"); 
    // Set progress dialog message 
    dialog.setMessage("Loading..."); 
    dialog.setIndeterminate(false); 
    // Show progress dialog 
    dialog.show(); 
} 

@Override 
protected String doInBackground(Void... params) { 

    // call load JSON from url method 
    return loadJSON(this.url).toString(); 
} 

@Override 
protected void onPostExecute(String result) { 
    ((CategoryListViewActivity) activity).parseJsonResponse(result); 
    dialog.dismiss(); 
    Log.i(TAG, result); 
} 

public JSONArray loadJSON(String url) { 
    // Creating JSON Parser instance 
    JSONGetter jParser = new JSONGetter(); 

    // getting JSON string from URL 
    JSONArray json = jParser.getJSONFromUrl(url); 

    return json; 
} 

private class JSONGetter { 

    private InputStream is = null; 
    private JSONArray jObj = null; 
    private String json = ""; 

    // constructor 
    public JSONGetter() { 

    } 

    public JSONArray getJSONFromUrl(String url) { 

     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 

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

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 
        8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONArray(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 
} 
} 

回答

0

有简单的步骤,以片段中使用的AsyncTask就像跟着

地方的代码上activityCreateview

new GetJsonFromUrlTask(getActivity(), mListView).execute(""); 

getActivity()是方法让你的活动环境进入片段类

注:当你发现从网站代码这段代码是的AsyncTask类,你可以到ActivityFragment调用此代码,任何其他类也

更改密码

public class GetJsonFromUrlTask extends AsyncTask<Void, Void, String> { 

private Context activity; 
private String url; 
private ProgressDialog dialog; 
private final static String TAG = GetJsonFromUrlTask.class.getSimpleName(); 

public GetJsonFromUrlTask(Context activity, String url) { 
    super(); 
    this.activity = activity; 
    this.url = url; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    // Create a progress dialog 
    dialog = new ProgressDialog(activity); 
    // Set progress dialog title 
    dialog.setTitle("Getting JSON DATA"); 
    // Set progress dialog message 
    dialog.setMessage("Loading..."); 
    dialog.setIndeterminate(false); 
    // Show progress dialog 
    dialog.show(); 
} 

@Override 
protected String doInBackground(Void... params) { 

    // call load JSON from url method 
    return loadJSON(this.url).toString(); 
} 

@Override 
protected void onPostExecute(String result) { 

    dialog.dismiss(); 
    Log.i(TAG, result); 
} 

public JSONArray loadJSON(String url) { 
    // Creating JSON Parser instance 
    JSONGetter jParser = new JSONGetter(); 

    // getting JSON string from URL 
    JSONArray json = jParser.getJSONFromUrl(url); 

    return json; 
} 

private class JSONGetter { 

    private InputStream is = null; 
    private JSONArray jObj = null; 
    private String json = ""; 

    // constructor 
    public JSONGetter() { 

    } 

    public JSONArray getJSONFromUrl(String url) { 

     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 

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

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 
        8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONArray(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 
} 
} 
+1

它仍然没有工作。它说了一些关于空指针的内容。我认为是因为parseJsonResponse方法没有被调用 – EDGE