2017-09-19 19 views
0

my error log 私のfragment.Butでリストビューをロードしようとしましたが、ボタンをクリックしてリストビューを読み込むとクラッシュしました。私は何をしたのか分からない。どんな助けもありがたい。私はthis..But何に関してません詰め込むのほとんどを試してみましたはよくの作品(私は不器用な外観を避けるために、いくつかのコードを削除した)非同期タスクを含むフラグメントのリストビュー

ここに私の断片コードです:。

public class Func extends Fragment { 

    ArrayList<Flowers> flowersList = new ArrayList<Flowers>(); 

    String url ="http://113.193.30.155/MobileService/MobileService.asmx/GetSampleData"; 

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

     FlowerAdapter adapter=new FlowerAdapter(getActivity().getApplicationContext(),R.layout.flower_list_xml,flowersList); 
     ListView listView=(ListView)rootView.findViewById(R.id.listView); 
     listView.setAdapter(adapter); 

     return rootView; 
    } 
    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     Button b = (Button)getView().findViewById(R.id.button); 

     b.setOnClickListener(new View.OnClickListener() { 

      @Override 

      public void onClick(View view) { 

       new BackTask().execute(url); 

      } 

     }); 

    } 

//私の非同期は、タスクは

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

     @Override 
     protected void onPreExecute(){ 
      super.onPreExecute(); 
     } 
     @Override 
     protected String doInBackground(String... strings) { 
      String result = null; 
      BufferedReader reader = null; 
      try { 
       URL url = new URL(strings[0]); 
       HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
       StringBuilder sb = new StringBuilder(); 
       reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
       Log.d("testhtt2", "test"); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       Log.d("test44", sb.toString()); 
       return sb.toString(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
       return null; 

      } finally { 
       if (reader != null) { 
        try { 
         reader.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
         return null; 

        } 
       } 

       return result; 
      } 
     } 
    @Override 
     protected void onPostExecute(String s){ 
      try { 
       JSONArray ar =new JSONArray(s); 
       for (int i = 0; i < ar.length(); i++){ 
        JSONObject jsonObject=ar.getJSONObject(i); 
        Flowers flowers= new Flowers(); 
        flowers.setName(jsonObject.getString("NAME")); 
        flowersList.add(flowers); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
+1

ポスト誤差も – Anonymous

+0

ポスト・エラー・ログ.... –

+0

何がうまく機能しませんか?だから誰もあなたを助けません。より具体的にする必要があります。 – Hetfieldan24

答えて

1

if(getView()!=null){ 
//Your code  
} 
ようgetViewメソッドを()を使用する前にはnullチェックを行うここから始まります

また、それは)(intead getViewメソッドのrootviewを使用してOnCreateのビューでボタンを初期化した方がよい

EDIT:あなたがやっている

あなたのネットワーク呼び出しは、それがあるべきようdoInBackgroundに移動させなければなりませんバックグラウンドスレッドで実行し、result.Theフェッチされた結果をフェッチonPostExecute.Hopeにリストに追加する必要があり、これはあなたあなたは、あなたの中にJSONArrayとして解析しようとしている、あなたのdoInBackgroundにnullを返し

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

@Override 
protected void onPreExecute(){ 
    super.onPreExecute(); 
} 
@Override 
protected String doInBackground(String... strings) { 
    BufferedReader reader = null; 
    String result=null; 
    try { 
     URL url = new URL(strings[0]); 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
     StringBuilder sb = new StringBuilder(); 
     reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     Log.d("testhtt2", "test"); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     Log.d("test44", sb.toString()); 
     result= sb.toString(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     result= null; 

    } finally { 
     if (reader != null) { 
      try { 
       reader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       result= null; 

      } 
     } 
     return result; 
    } 
} 

@Override 
protected void onPostExecute(String s){ 
    try { 
     JSONArray ar =new JSONArray(s); 
     for (int i = 0; i < ar.length(); i++){ 
      JSONObject jsonObject=ar.getJSONObject(i); 
      Flowers flowers= new Flowers(); 
      flowers.setName(jsonObject.getString("NAME")); 
      flowersList.add(flowers); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
2

役立ちますOnPostExecute。 doInBackgroundメソッドから適切なStringを返し、それが役立つかどうかを確認してください。

0

あなたはonViewCreated()メソッドで)getViewメソッド(insteadofビューで試すことができ、このコード

public class Listview extends Fragment { 

ArrayList<Flowers> flowersList = new ArrayList<Flowers>(); 
String url ="http://113.193.30.155/MobileService/MobileService.asmx/GetSampleData"; 

ListView listview; 
View rootView; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    if (rootView!= null) { 
     ViewGroup parent = (ViewGroup) view.getParent(); 
     if (parent != null) 
      parent.removeView(view); 
    } 
    try { 
     rootView = inflater.inflate(R.layout.tab2, container, false); 
    } catch (InflateException ignored) { 
    } 

    listView=(ListView)rootView.findViewById(R.id.listView); 
    Button b = (Button)rootView.findViewById(R.id.button); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      new BackTask().execute(url); 
     } 

    }); 
    return view; 
} 
private class BackTask extends AsyncTask<String,String,String>{ 

    @Override 
    protected void onPreExecute(){ 
     super.onPreExecute(); 
    } 
    @Override 
    protected String doInBackground(String... strings) { 
     return null; 
    } 
    @Override 
    protected void onPostExecute(String s){ 
     try { 
      JSONArray ar =new JSONArray(s); 
      for (int i = 0; i < ar.length(); i++){ 
      JSONObject jsonObject=ar.getJSONObject(i); 
      Flowers flowers= new Flowers(); 
      flowers.setName(jsonObject.getString("NAME")); 
      flowersList.add(flowers); 
    } 
    FlowerAdapter adapter=new FlowerAdapter(getActivity(),R.layout.flower_list_xml,flowersList); 
    listView.setAdapter(adapter); 

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

} 
} 
+0

それはうまく動作しません。それは私に多くの赤旗を表示します – MilkaMozhi

+0

"view"タグは私に赤い旗の仲間を示します – MilkaMozhi

0

を試してみてください。

public class ListView extends Fragment { 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.tab2, container, false); 
    return rootView; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    Button b = (Button) view.findViewById(R.id.button); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      new BackTask().execute("http://113.193.30.155/MobileService/MobileService.asmx/GetSampleData"); 
     } 
    }); 
} 

private class BackTask extends AsyncTask<String, Void, String> { 
    String result; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 
    @Override 
    protected String doInBackground(String... params) { 
     try { 
      result = Utility.executeHttpGet(params[0]); 
     } catch (Exception e) { 
      Log.e("ListView", e.getMessage(), e); 
     } 
     return result; 
    } 
    @Override 
    protected void onPostExecute(String s) { 
     try { 
      JSONArray ar = new JSONArray(s); 
      for (int i = 0; i < ar.length(); i++) { 
       JSONObject jsonObject = ar.getJSONObject(i); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}