2017-09-13 2 views
2

以下のコードがウェブサイトから見つかったため、アンドロイドアプリケーションで役立つようです。しかし、問題は、以下のコードはアクティビティのみのためであり、コードをフラグメントで実行する必要があることです。私のアプリケーションは、オンラインデータベースからイメージをダウンロードし、それをリストビューに保存することです。フラグメント内でGetJsonFromUrlTask​​.javaを使用する方法

どうすればよいですか?ただactivityCreateview

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

getActivity()

場所コードに従うようフラグメント内AsyncTaskを使用する簡単なステップがあります

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

方法は次のとおりです。

この

は、私が使用するコードですあなたの活動状況を断片クラスにするまで

注:あなたがウェブサイトからコードを発見したように、このコードは、あなたがActivityにこのコードを呼び出すことができますAsyncTaskクラスであり、Fragment、他のどのクラスも

変更コード

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

関連する問題